【问题标题】:Why are these Botan public keys so similar?为什么这些 Botan 公钥如此相似?
【发布时间】: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


【解决方案1】:

这些中的实际公钥是:

02:77:83:04:A9:B8:B9:B2:9B:BF:48:71:83:38:64:87
4A:00:23:C5:8A:15:3B:35:1F:3F:D0:AB:29:7A:AB:1C
C3 

02:D4:2B:E4:13:D3:D3:8A:64:FD:1A:2B:EA:E2:06:46
A1:0A:78:1F:1D:C0:8B:5E:47:CA:7F:AF:E3:65:EE:1A
A5

这些并不相同,因此没有明显的理由担心这方面。相同的数据是密钥元数据和编码 bumf(对于相同的格式密钥,您希望它们是相同的)。

通过导入 xca (linux) 获得的值。有更好的工具可以检查 DER 编码的数据,但我找不到。

【讨论】:

  • 感谢您的回复!您是如何从 x509 编码中获得这些值的?