openssl_sign 是否支持 Ed25519 密钥?

根据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++CXqI9EdVhC

oB8wHQYKKoZIhvcNAQkJFDEPDA1DdXJkbGUgQ2hhaXJzgSEAGb9ECWmEzf6FQbrB

Z9w7lshQhqowtrbLDFw4rXAxZuE=

-----END PRIVATE KEY-----');


echo $r ? 'good' : 'bad';


echo "\n";


echo openssl_error_string();

我猜 PHP 还不支持 Ed25519。


饮歌长啸
浏览 326回答 1
1回答

慕尼黑8549860

我想不是,如果我们查看文档,看起来签名/验证要求与 openssl 库的正常使用不同。Ed25519 和 Ed448 EVP_PKEY 实现支持使用 PureEdDSA 和 Ed25519 或 Ed448(参见 RFC8032)生成密钥、一次性摘要签名和摘要验证。和评论如:PureEdDSA 算法不支持使用 EVP_DigestUpdate() 等其他签名算法的流机制。必须使用一次性 EVP_DigestSign() 和 EVP_DigestVerify() 函数传递要签名或验证的消息。当调用 EVP_DigestSignInit() 或 EVP_DigestVerifyInit() 时,摘要类型参数必须设置为 NULL。所以,除非你可以直接调用 openssl api 或者可以添加更多的 openssl 粘合函数来支持一次性签名/验证支持,否则我猜不会。
打开App,查看更多内容
随时随地看视频慕课网APP