2011-10-28 44 views
3

我目前正在使用Diffie-Hellman进行密钥交换的协议。 我收到一个数据包,它由一个aes-128加密部分和一个128位DH公钥组成。用diffie-hellman共享密钥继续加密

在协议的最后一步,aes密钥被发送到网络中的另一个对端。 这个aes-key应该使用128位强密钥加密。

我计划用河豚(也可以是其它密码,其实并不重要的问题)

现在加密AES密钥,用可以说河豚,我要建立一个与秘密密钥加密一个名为SecretKeySpec的类(我使用javax.crypto的东西),它在构造函数中需要一个byteArray来构建secretKey。

来自DH的共享密钥是128位BigInteger。 好了,现在我可以解释我的共享密钥为ByteArray(至极让我在16字节[其中的数字将被解释为8个数据帧]还是128位)

所以我的问题是,如何强是我的关键真的吗?

是否有任何影响,因为我只使用数字作为输入的ByteArray(那么,这是否限制密钥空间以任何方式?)

我想,这是不是这样的,但我不是100%确定。 也许有人可以做数学并证明我对或错。

如果我错了什么密钥的共享密钥给我一块心,最后得到128Bit SecretKey的加密?

+1

请注意,使用Blowfish加密AES密钥会降低协议对AES或Blowfish的_weakest_的强度。虽然AES发布后发现了一些针对AES的攻击,但我仍然对Blowfish进行了赌注[AES更强大](http://en.wikipedia.org/wiki/Advanced_Encryption_Standard#Known_attacks)(以及更好的检查)。 – sarnold

+0

@sarnold:谢谢你的提示,我知道这个问题。河豚只是一个例子,也许我也使用AES。我还不确定是否需要在这一步传输更多的信息,所以我计划使用一个流式处理器来运行,以消除固定大小,迫使我使用(或填充我的数据)。我只限于一个以太网数据包,所以每个字节我都可以避免更好。 :) – evildead

回答

2

Crypto++网站建议使用3072位(或实现ECC的256位)的最少p来传输128位AES密钥。

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

+0

这是一个非常棒的链接,非常感谢!我在等待是否有更多的建议,像这里贴出来之前,我结束了这个问题 – evildead

+0

我错过了,为什么3072 Bit传输128位AES密钥被认为是“安全”的?也许我还没有找到合适的地方呢,希望有人能够给我启发。 – evildead

+0

这是一个“计算复杂性”的问题 - 你试图比较[对AES的最有名的攻击](http://en.wikipedia.org/wiki/Advanced_Encryption_Standard#Security)的复杂性(当前2^126或者128位AES的密钥恢复)与最有名的针对[离散对数](http://en.wikipedia.org/wiki/Discrete_logarithm)问题的攻击。正如你猜测的那样,整数不是每个位都独立于其他位--ECC通过减少位之间的相关性来改善这一点,但这些位仍然不是完全独立的。 – sarnold

1

不是一个在DH专家在这里,但对我来说似乎是DH的密钥空间为ň位表示共享密钥2^ň略小。

+0

看起来好像是,sarnold发布的链接告诉你至少应该使用3072 Bit p。但是为什么,我找不到:( – evildead