首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从PyKCS11验证ECDSA签名

从PyKCS11验证ECDSA签名
EN

Stack Overflow用户
提问于 2016-08-30 17:22:43
回答 1查看 955关注 0票数 0

我有一个使用PyKCS11的python程序,它是用于pkcs11接口的python包装器。我可以用存储在高速机床上的ECC私钥(CKM_ECDSA机制)对数据进行签名,该私钥由PyKCS11访问。

我现在想要的是用openssl通过相应的公钥验证ECDSA签名。这个公钥包含在一个x509 (NewCert.pem)中,它是由HSM中的私钥创建的。

我测试了许多正确验证签名的方法,但没有成功。

代码语言:javascript
复制
openssl dgst -ecdsa-with-SHA1 -verify <(openssl x509 -noout -pubkey -in NewCert.pem) -signature <(cat sign | base64 -d) file

文件“签名”包含base64编码的签名。和文件‘文件’的普通数据。

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-09-06 14:32:22

最后,我找到了解决问题的办法。

(1) PyKCS11的签名输出是ECDSA签名的r值和s值的级联。它不是用ASN1样式格式化的。这是不可能使用openssl进行验证的第一个问题,因为后者需要这种格式。

因此,我编写了一个函数,将PyKCS11输出格式化为ASN1一致性,并将二进制签名输出保存到文件中。

(3)为了使用散列函数,首先必须散列要签名的数据或文件。这可以用hashlib的命令摘要()在Python中完成。在此之后,您将数据的二进制哈希作为PyKCS11的输入并创建签名。

(4)可以使用openssl中的以下命令来验证哈希ECDSA签名:

代码语言:javascript
复制
openssl dgst -sha384 -verify pubkey -signature file.sign file

确保公共密钥是来自相应的x509证书(而不是x509本身)的EC公钥。file.sign意味着是包含ECDSA签名的二进制文件,该签名表示原始数据的二进制哈希(参见步骤三)。

希望这对其他人有帮助。

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

https://stackoverflow.com/questions/39233560

复制
相关文章

相似问题

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