【发布时间】:2019-06-11 16:54:05
【问题描述】:
我有一些私钥存储在 HSM 中,但没有公钥。我想通过PKCS11接口获取对应的公钥。
如果私钥是 RSA 密钥,我可以从 CKA_MODULUS 中提取模数,从 CKA_PUBLIC_EXPONENT 中提取指数,然后用这两个数字构造公钥。
但是,对于 ECDSA(或 DSA)密钥,我怎样才能实现相同的目标?
CKA_EC_POINT 属性不适用于私钥。
我想我能得到的唯一有用的信息就是它来自CKA_EC_PARAMS的曲线参数,这还不足以得到公共点。
【问题讨论】:
-
应该可以从签名计算公钥(我自己从来没有尝试过)......见例如here
-
@vlp 这个方法看起来很有趣!但我不能完全理解……我不理解史蒂夫·米切尔和简·莫里茨所说的两个罕见的案例。如果我尝试使用两个或更多签名来恢复公钥,我是否更有可能恢复正确的公钥?
-
我想是的。可能值得在crypto SE 上搜索/询问。 This code 用于从单一颁发的证书中获取捷克国民身份证 CA 的公钥(CA 公钥未公开发布,请参阅here)。 Bouncy castle 有一个很好的用于 EC 计算的 API。
-
@vlp 这个消息很有趣!是的,我在 C# 中使用 Bouncycastle。我将尝试编写一些代码来重现公钥。