MCRYPT_RIJNDAEL_128
, MCRYPT_RIJNDAEL_256
, , 等有什么区别MCRYPT_BLOWFISH
。哪一个最适合网络上的数据传输?
5 回答
Rijandel 是 AES 的另一个名称,它是当前的“一个好的标准”算法。数字 128 或 256 是密钥长度。
Blowfish 是一种较旧的 64 位分组密码(AES 是 128 位分组密码)。
你不能真的说它们中的任何一个是“更好”或“更差”,因为它们都没有真正被破坏,但总的来说 AES 应该更好,而且大多数实现也更快。此外,最现代的 CPU 在硬件中支持 AES,这将使其更快......所以没有理由不使用 AES。
至于密钥长度,对于对称密码来说,128 位实际上已经足够了。当然,除非您是您所在国家/地区核武器代码的保管人,否则您将希望使用 256 位密钥。
请注意,如果您想以合理的方式使用 256 位密钥,则需要大约 40 个字符的密码。这再次表明,加密算法不是安全链中的薄弱环节,而是人。
编辑:再想一想,对于 256 位密钥所需的密码长度,50-60 个字符可能是更合理的猜测。英语每个字符的熵大大少于 2 位。让我们假设您使用了一个更加随机的字母和数字字符序列(尽管如此......),所以也许我们每个字符会有 4-5 位的熵(非常乐观!)。这将要求您输入 51 到 64 个字符,因此密码的熵与密钥的熵大致匹配。
现在的问题是:我们中有多少人拥有 50 个字符的密码?:-)
更新:
截至 2011 年底,存在对 Rijndael/AES(Bogdanov、Khovratovich、Rechberger)的密钥恢复攻击,这不是“主要是理论上的”或“热闹的减少回合”类型的攻击。该攻击适用于全轮 AES,比暴力破解快 4 倍左右。因此,从形式上讲,人们可能会认为 Rijndael 是“坏掉的”。
实际上,到目前为止,这次攻击是无关紧要的。即使支持最短的密钥长度,比暴力破解快四倍的攻击需要 2 126次操作,即使使用大规模硬件实现也是不切实际的。但是,如果可以改进攻击,这可能会在未来发生变化。
Rijndael 和 Blowfish 都被认为是安全的。
MCRYPT_RIJNDAEL_128 与 MCRYPT_RIJNDAEL_256:
唯一的区别是块大小。您可以使用 128 位、192 位或 256 位密钥。
更大的键需要更长的时间来暴力破解。
256 位版本因此更安全。
注意:128 位版本仍然需要大量时间来蛮力。
目前 Rijndael 是高级加密标准:
http ://en.wikipedia.org/wiki/Advanced_Encryption_Standard
AES 通常比 Blowfish 更快,因为:
- 算法本身对处理器更有效(位与字节块)。
- Manny 处理器支持 AES 的硬件加速。
结论:
- 所有三个选项对于数据传输都足够安全。
- 选择取决于数据的“秘密”程度。
- Rijndael 使用更广泛,因此在某些情况下更容易实现。
这个问题的答案指出,关于 MCRYPT_RIJNDAEL_128 和 MCRYPT_RIJNDAEL_256,“数字 128 或 256 是密钥长度” - 这是不正确的。这些数字是指块大小,而不是密钥长度。但是,两种实现(使用 128 或 256 位的块大小)都可以接受 128 或 256 位的密钥。
这取决于您想要的答案类型:实现上的差异仅仅是编程问题,而设计上的差异通常是非常详细的数学证明。解释几种加密算法之间复杂的设计差异可能超出了本网站的范围。此外,每种算法都有弱点,有些是已知的,有些不是。现存算法中的特定弱点通常会导致它们被淘汰,但可以通过一些方法来解决它们(经典示例:DES 有一个密钥子集,导致代码易于破解。解决方法是不使用这些密钥。)。
RSA 是一种非对称加密算法,建议 2030 年的最大密钥长度为 2048 AES 是一种对称算法,建议 2015 年的最大密钥大小为 256 位 Serpent 加密算法也是密钥大小为 256 的对称算法,建议 2015 年。