【发布时间】:2011-12-17 15:57:27
【问题描述】:
我目前正在研究一种协议,该协议使用 Diffie-Hellman 进行密钥交换。 我收到一个数据包,其中包含一个 aes-128 加密部分和一个 128 位 DH 公钥。
在协议的最后一步,aes 密钥被发送到网络中的另一个对等点。 此 aes 密钥应使用 128 位强密钥加密。
我打算使用 Blowfish(也可以是另一种密码,与问题无关)
现在要加密 aes 密钥,比如说河豚,我必须使用一个名为 SecretKeySpec 的类(我正在使用 javax.crypto 的东西)构建一个用于加密的密钥,它在构造函数中使用一个 byteArray 来构建密钥。
来自 DH 的共享密钥是 128 位 BigInteger。 好吧,现在我可以将我的共享密钥解释为一个 byteArray(这仍然给我 16Bytes 中的 128 位 [其中数字被解释为 8 位数据的帧])
所以我的问题是,我的钥匙到底有多强?
是否有任何影响,因为我只使用数字作为 byteArray 的输入(所以这会以任何方式限制键空间吗?)
我认为情况并非如此,但我不能 100% 确定。 也许有人可以做数学并证明我是对还是错。
如果我错了,共享密钥的密钥大小让我放心最终使用 128 位 SecretKey 进行加密?
【问题讨论】:
-
请注意,使用 Blowfish 加密 AES 密钥会将您的协议强度降低到 AES 或 Blowfish 的最弱。虽然在 AES 发布后发现了一些针对 AES 的攻击,但我仍然会打赌 AES is stronger(并且更好地检查)而不是 Blowfish。
-
@sarnold:感谢您的注意,我知道这个问题。 Blowfish 只是一个例子,也许我也使用 AES。我还不确定是否需要在该步骤传输更多信息,所以我计划使用流密码运行,以摆脱固定大小的 aes 强制我使用(或填充我的数据)。我仅限于一个以太网数据包,所以我可以避免更好的每个字节。 :)
标签: java security key theory diffie-hellman