为了账号安全,请及时绑定邮箱和手机立即绑定

OpenSSL 支持 ECDH 吗?

OpenSSL 支持 ECDH 吗?

PHP
子衿沉夜 2021-06-10 14:15:22
openssl_dh_compute_key()让我觉得 OpenSSL 没有 ECDH。它只谈论 DH,而不是 ECDH。此外,公钥基本上只是基数为 256 的质数,并且有关于如何删除公钥的-----BEGIN PUBLIC KEY-----部分的具体说明,就好像它不受支持一样。另外,从技术上讲,以-----BEGIN PUBLIC KEY-----开头的字符串是有效的 base-256 数字。假设 ECDH 密钥与 ECDSA 密钥相同,那么 ECDH 的公钥由 X、Y 坐标和曲线(无论是命名曲线还是指定曲线)组成,并且公钥需要采用哪种格式并不是很明显在openssl_dh_compute_key()工作。尽管如此,我尝试过,令我惊讶的是,我没有收到错误消息,但也没有得到任何输出。$public = '-----BEGIN PUBLIC KEY-----MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkldhVs+UpzZ/E6hYF536mSYvdnfNoEa/Idsfu7pBEcqPGHTsp+zDM/rquKwr8eoxn554LYw/3udRgzEpHk4vag==-----END PUBLIC KEY-----';$private = openssl_pkey_get_private('-----BEGIN PRIVATE KEY-----MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgF1ZD0LhQm5q71gL9O+yzfX8g/sdYTBz/50nkw6wrE16hRANCAAQeZkUZ3ey7W5Czz52pOLmgSBHlnI3u9gLcbr9NVCecEstDR0EK2+fJMfokogfW+RdoEJKN0qLdHilGPGHV/aq1-----END PRIVATE KEY-----');$s = openssl_dh_compute_key($public, $private);echo bin2hex($s);echo "\n\n";echo openssl_error_string();$s 是假的。
查看完整描述

1 回答

?
牛魔王的故事

TA贡献1830条经验 获得超3个赞

OpenSSL 确实支持ECDH。我的猜测 PHP 没有像支持 DH 那样公开支持 ECDH 所需的 ECDH 方法。

我的猜测是,建议 ECH 使用 EVP 功能,这会在某种程度上抽象 DH 指定,而 ECDH_compute_key 的使用并未真正记录在案。

看起来 PHP 没有公开足够的 EVP 功能来支持 ECDH。


查看完整回答
反对 回复 2021-06-25
  • 1 回答
  • 0 关注
  • 258 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信