【发布时间】:2013-01-07 15:22:02
【问题描述】:
我正在使用 Botan 创建公共/私有 ECDSA 密钥对。生成的公钥(即使在使用此代码的不同机器上)非常相似......我认为太相似了,无法考虑安全。以下是两次运行的示例:
-----BEGIN PUBLIC KEY-----
MIIBEzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA////////////////
/////////////////////v///C8wRAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBEEEeb5m
fvncu6xVoGKVzocLBwKb/NstzijZWfKBWxb4F5hIOtp3JqPEZV2k+/wOEQio/Re0
SKaFVBmcR9CP+xDUuAIhAP////////////////////66rtzmr0igO7/SXozQNkFB
AgEBAyIAAneDBKm4ubKbv0hxgzhkh0oAI8WKFTs1Hz/Qqyl6qxzD
-----END PUBLIC KEY-----
-----BEGIN PUBLIC KEY-----
MIIBEzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA////////////////
/////////////////////v///C8wRAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHBEEEeb5m
fvncu6xVoGKVzocLBwKb/NstzijZWfKBWxb4F5hIOtp3JqPEZV2k+/wOEQio/Re0
SKaFVBmcR9CP+xDUuAIhAP////////////////////66rtzmr0igO7/SXozQNkFB
AgEBAyIAAtQr5BPT04pk/Ror6uIGRqEKeB8dwIteR8p/r+Nl7hql
-----END PUBLIC KEY-----
我正在使用 X509 编码对公钥进行编码。下面是生成 ECDSA 密钥的代码:
LibraryInitializer init;
AutoSeeded_RNG rng;
EC_Group ecGroup("secp256k1");
ECDSA_PrivateKey key(rng, ecGroup);
为什么我会生成如此相似的公钥?如果多个用户要使用此代码生成自己的密钥,我是否认为这不“安全”?
更新: 下面的答案似乎是正确的。我通过电子邮件向 XCA 的创建者 Christian Hohnstaedt 发送了电子邮件,以进一步探讨 XCA 如何生成此公钥以及它是什么。他回答说是EC_POINT,是通过命令获取的
openssl ec -pubin -noout -text
插入 X509 PEM 编码的公钥确实揭示了不同的公共 EC 点。应该注意(对于像我这样的其他新手)答案中的公共 EC 点对另一方本身没有好处 - 另一方需要知道正在使用哪个 EC 组,这就是为什么 X509 PEM 编码是比仅仅一个 EC 点更有帮助。
【问题讨论】:
-
我删除了 C++ 标签,因为这不是 C++ 问题。
-
我怀疑大部分键都包含组描述。它们在 44 个字符上有所不同,这与 Base64 编码的 256 位私钥相匹配。
-
如果大部分键是组描述,这是否更可能导致两个用户使用相同的键?这是否会使 EC 密钥的公钥空间小于 RSA 密钥空间,因为 EC 需要一个组,而 RSA 只需要因子?
-
256 位 ECC 密钥与 3000 位 RSA 密钥一样强。两个用户获得相同密钥(假设 RNG 正常工作)的机会对于任何一个都可以忽略不计。不用担心。
标签: security public-key-encryption x509 botan ecdsa