我正在使用ECDH在Alice和Bob之间共享一个秘密,一个在Android上运行,另一个在嵌入式上运行。我的理解是,最佳实践是双方都生成AES密钥来加密消息。有人可以在使用ECDH同意共享机密之后,就Alice和Bob双方如何生成相同的AES密钥发送一些示例吗?
最佳答案
最好遵循NIST关于“关键协议”计划的建议,例如将NIST SP 800-56A与recommendations in the implementers guide和NIST SP 800-108中指定的键派生方法之一一起使用。它描述了如何将秘密转换为字节,然后可以使用KDF之一将其转换为(多个)密钥。
请注意,自1.50开始,密钥派生自Bouncy Castle的轻量级API,因此也应出现在Spongy Castle中。最常见的NIST算法在org.bouncycastle.crypto.generators.KDFCounterBytesGenerator
中。您可以简单地在构造函数中给它任何HMAC(例如HMAC SHA1),并在初始化期间给它org.bouncycastle.crypto.params.KDFCounterParameters
。
请注意,与Perseids的答案相比,此方法遵循更好的加密实践,但可能很难理解/实施。