首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >openssl_sign是否支持Ed25519密钥?

openssl_sign是否支持Ed25519密钥?
EN

Stack Overflow用户
提问于 2019-05-20 21:34:09
回答 1查看 2.5K关注 0票数 0

根据OpenSSL ChangeLog的说法,OpenSSL 1.1.1添加了对EdDSA (包括Ed25519)的支持。我正在运行PHP7.3.5和OpenSSL 1.1.1b,它应该支持它。我试着使用Ed25519 (来自https://www.rfc-editor.org/rfc/rfc8410#section-10.3的那个)。这使我得到了以下错误(由openssl_error_string()返回)和"Ed25519私有密钥不带公钥“的密钥。

错误:0608D096:此密钥类型不支持数字信封routines:EVP_PKEY_sign_init:operation

“用属性和公钥编码的Ed25519私钥”键给了我一个不同的错误。

警告: openssl_sign():无法在第3行的/path/to/test.php中将提供的密钥参数强制为私钥。错误:0D078094:ASN1编码routines:asn1_item_embed_d2i:sequence长度不匹配

这是我使用的代码。

代码语言:javascript
复制
$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。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-05-21 03:27:17

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

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

评论如下:

PureEdDSA算法不支持使用例如EVP_DigestUpdate()的其他签名算法的流机制。必须使用one-shot EVP_DigestSign()和EVP_DigestVerify()函数传递要签名或验证的消息。

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56222067

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档