在 ECDH 之后生成 AES 密钥

Sim*_*mon 2 encryption android aes

我正在使用 ECDH 在 Alice 和 Bob 之间共享一个秘密,一个在 Android 上运行,另一个在嵌入式上运行。我的理解是,最佳实践是双方生成 AES 密钥来加密消息。有人可以发送一些示例,说明 Alice 和 Bob 在使用 ECDH 就共享密钥达成一致后如何生成相同的 AES 密钥吗?

Maa*_*wes 5

最好遵循 NIST 关于密钥协议方案的建议,例如使用NIST SP 800-56A以及实施者指南中的建议以及NIST SP 800-108中指定的密钥导出方法之一。它描述了如何将秘密转换为字节,然后可以使用 KDF 之一转换为(多个)密钥。

请注意,自 1.50 起,关键派生就存在于 Bouncy Castle 的轻量级 API 中,因此也应该存在于Spongy Castle中。最常见的 NIST 算法是在org.bouncycastle.crypto.generators.KDFCounterBytesGenerator. 您可以简单地在构造函数中和org.bouncycastle.crypto.params.KDFCounterParameters初始化期间为其提供任何 HMAC(例如 HMAC SHA1)。

请注意,这比英仙座流星雨的答案遵循更好的加密实践,但可能更难理解/实现。

  • 不,第一个 PB 的意思是“基于密码”。您需要一个 KBKDF(基于密钥)KDF,因为您的共享密钥已经包含足够的熵。我会修改答案...我实际上已经创建了它们的初始实现:) (2认同)