我目前正在研究一个协议(protocol),该协议(protocol)使用 Diffie-Hellman 进行 key 交换。 我收到一个数据包,其中包含一个 aes-128 加密部分和一个 128 位 DH 公钥。
在协议(protocol)的最后一步,aes key 被发送到网络中的另一个对等点。 此 aes key 应使用 128 位强 key 使用密码加密。
我打算使用 Blowfish(也可以是另一种密码,对问题来说并不重要)
现在要加密 aes key ,比方说河豚,我必须使用一个名为 SecretKeySpec 的类(我正在使用 javax.crypto 的东西)构建一个用于加密的 key ,它在构造函数中使用一个 byteArray 来构建 key 。
来自 DH 的共享 key 是一个 128 位的 BigInteger。 好吧,现在我可以将我的共享 key 解释为一个 byteArray(这仍然给我 16 字节中的 128 位 [其中数字被解释为 8 位数据的帧])
所以我的问题是,我的 key 到底有多强?
是否有任何影响,因为我只使用数字作为 byteArray 的输入(所以这会以任何方式限制键空间吗?)
我认为情况并非如此,但我不是 100% 确定。 也许有人可以计算并证明我是对还是错。
如果我错了,共享 key 的 key 大小是多少让我最终获得 128 位 SecretKey 进行加密?
最佳答案
Crypto++网站建议使用至少 3072 位的 p
(或对于 ECC 实现为 256 位)来传输 128 位 AES key 。
您可能希望研究 http://www.keylength.com/en/compare/ 提供的引用资料有关比较不同算法之间的 key 长度的更多信息。
关于java - 使用 diffie-hellman 共享 key 继续加密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7935890/