3

我目前正在研究一种协议,该协议使用 Diffie-Hellman 进行密钥交换。我收到一个数据包,其中包含一个 aes-128 加密部分和一个 128 位 DH 公钥。

在协议的最后一步,aes 密钥被发送到网络中的另一个对等点。此 aes 密钥应使用 128 位强密钥使用密码进行加密。

我打算使用 Blowfish(也可以是另一种密码,对问题来说并不重要)

现在要加密 aes 密钥,让我们说河豚,我必须使用一个名为 SecretKeySpec 的类(我正在使用 javax.crypto 的东西)构建一个用于加密的密钥,它在构造函数中使用一个 byteArray 来构建密钥。

来自 DH 的共享密钥是一个 128 位的 BigInteger。好吧,现在我可以将我的共享密钥解释为一个 byteArray(这仍然给我 16Bytes 中的 128 位 [其中数字被解释为 8 位数据的帧])

所以我的问题是,我的钥匙到底有多强?

是否有任何影响,因为我只使用数字作为 byteArray 的输入(所以这会以任何方式限制键空间吗?)

我认为情况并非如此,但我不是 100% 确定。也许有人可以做数学并证明我是对还是错。

如果我错了,共享密钥的密钥大小让我放心最终使用 128Bit SecretKey 进行加密?

4

2 回答 2

2

Crypto++网站建议使用至少p3072 位(或ECC实现为 256 位)来传输 128 位 AES 密钥。

您可能希望研究http://www.keylength.com/en/compare/提供的参考资料,以获取有关比较不同算法之间的密钥长度的更多信息。

于 2011-10-29T21:12:40.607 回答
1

这里不是 DH 专家,但对我来说,DH 的以n位表示的共享密钥的密钥空间似乎比 2^ n小一些。

于 2011-10-29T21:09:26.287 回答