我正在使用 ECDH 在 Alice 和 Bob 之间共享一个 secret ,一个在 Android 上运行,另一个在嵌入式上运行。我的理解是,最好的做法是双方生成一个 AES key 来加密消息。有人可以发送一些示例,说明 Alice 和 Bob 双方在使用 ECDH 就共享 secret 达成一致后如何生成相同的 AES key 吗?
最佳答案
最好遵循 NIST 关于 key 协议(protocol)方案的建议,例如使用 NIST SP 800-56A与 recommendations in the implementers guide和 NIST SP 800-108 中指定的 key 派生方法之一.它描述了如何将 secret 转换为字节,然后可以使用其中一个 KDF 转换为(多个) key 。
请注意,从 1.50 开始, key 派生在 Bouncy CaSTLe 的轻量级 API 中,因此也应该出现在 Spongy Castle 中。 .最常见的 NIST 算法在 org.bouncycaSTLe.crypto.generators.KDFCounterBytesGenerator
中。您可以简单地在构造函数中为它提供任何 HMAC(比如 HMAC SHA1),并在初始化期间为它提供 org.bouncycaSTLe.crypto.params.KDFCounterParameters
。
请注意,这比 Perseids 的答案更符合加密实践,但可能更难理解/实现。
关于android - 在 ECDH 之后生成 AES key ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23167936/