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

openssl_sign 是否支持 Ed25519 密钥?

openssl_sign 是否支持 Ed25519 密钥?

PHP
饮歌长啸 2021-06-11 18:08:27
根据OpenSSL ChangeLog,OpenSSL 1.1.1 添加了对 EdDSA(包括 Ed25519)的支持。我正在使用 OpenSSL 1.1.1b 运行 PHP 7.3.5,它应该支持它。我尝试使用 Ed25519(来自https://tools.ietf.org/html/rfc8410#section-10.3的那些)。openssl_error_string()使用“没有公钥的 Ed25519 私钥”密钥,这给我带来了以下错误(由 返回)。错误:0608D096:数字信封例程:EVP_PKEY_sign_init:此密钥类型不支持操作“用属性和公钥编码的 Ed25519 私钥”密钥给了我一个不同的错误。警告:openssl_sign():在第 3 行错误错误:0D078094:asn1 编码例程:asn1_item_embed_d2i:序列长度不匹配,无法将提供的密钥参数强制转换为 /path/to/test.php 中的私钥这是我使用的代码。$r = openssl_sign('hello, world!', $signature, '-----BEGIN PRIVATE KEY-----MHICAQEwBQYDK2VwBCIEINTuctv5E1hK1bbY8fdp+K06/nwoy/HU++CXqI9EdVhCoB8wHQYKKoZIhvcNAQkJFDEPDA1DdXJkbGUgQ2hhaXJzgSEAGb9ECWmEzf6FQbrBZ9w7lshQhqowtrbLDFw4rXAxZuE=-----END PRIVATE KEY-----');echo $r ? 'good' : 'bad';echo "\n";echo openssl_error_string();我猜 PHP 还不支持 Ed25519。
查看完整描述

1 回答

?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

我想不是,如果我们查看文档,看起来签名/验证要求与 openssl 库的正常使用不同。

Ed25519 和 Ed448 EVP_PKEY 实现支持使用 PureEdDSA 和 Ed25519 或 Ed448(参见 RFC8032)生成密钥、一次性摘要签名和摘要验证。

和评论如:

PureEdDSA 算法不支持使用 EVP_DigestUpdate() 等其他签名算法的流机制。必须使用一次性 EVP_DigestSign() 和 EVP_DigestVerify() 函数传递要签名或验证的消息。

当调用 EVP_DigestSignInit() 或 EVP_DigestVerifyInit() 时,摘要类型参数必须设置为 NULL。

所以,除非你可以直接调用 openssl api 或者可以添加更多的 openssl 粘合函数来支持一次性签名/验证支持,否则我猜不会。


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

添加回答

举报

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