【发布时间】:2011-07-12 08:15:38
【问题描述】:
MCRYPT_RIJNDAEL_128、MCRYPT_RIJNDAEL_256、MCRYPT_BLOWFISH等有什么区别,哪一个最适合网络数据传输?
【问题讨论】:
-
正在传输什么数据,在什么之间传输?
-
这个问题很宽泛——你能缩小范围吗?
标签: php algorithm encryption mcrypt
MCRYPT_RIJNDAEL_128、MCRYPT_RIJNDAEL_256、MCRYPT_BLOWFISH等有什么区别,哪一个最适合网络数据传输?
【问题讨论】:
标签: php algorithm encryption mcrypt
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 已经“坏掉了”。
实际上,到目前为止,这次攻击是无关紧要的。即使支持最短的密钥长度,比暴力破解快四倍的攻击需要 2126 次操作,即使使用大规模硬件实现也是不切实际的。但是,如果可以改进攻击,这可能会在未来发生变化。
【讨论】:
openssl_random_pseudo_bytes(32) 将为您提供 256 位的加密足够随机性,这恰好是 AES-256 中的最大密钥大小。它可以安全地以 base64 编码方式存储。
Rijndael 和 Blowfish 都被认为是安全的。
MCRYPT_RIJNDAEL_128 与 MCRYPT_RIJNDAEL_256:
唯一的区别是块大小。您可以使用 128 位、192 位或 256 位密钥。
较大的密钥需要更长的时间来进行暴力破解。
因此 256 位版本更安全。
注意:128 位版本仍然需要 大量时间 时间来进行暴力破解。
目前 Rijndael 是高级加密标准:
http://en.wikipedia.org/wiki/Advanced_Encryption_Standard
AES 通常比 Blowfish 更快,因为:
- 算法本身对处理器更有效(位与字节块)。
- 许多处理器支持 AES 硬件加速。
结论:
- 这三个选项对于数据传输来说都足够安全。
- 选择取决于数据的“秘密”程度。
- Rijndael 使用更广泛,因此在某些情况下更容易实现。
【讨论】:
RIJNDAEL_256 不是 AES。仅限RIJNDAEL_128
该问题的答案指出,关于 MCRYPT_RIJNDAEL_128 和 MCRYPT_RIJNDAEL_256,“数字 128 或 256 是密钥长度” - 这是不正确的。这些数字指的是 blocksize,而不是密钥长度。但是,两种实现方式(使用 128 位或 256 位的块大小)都可以接受 128 位或 256 位的密钥。
【讨论】:
这取决于您想要的答案类型:实现上的差异仅仅是编程问题,而设计上的差异通常是非常详细的数学证明。解释几种加密算法之间复杂的设计差异可能超出了本网站的范围。此外,每种算法都有弱点,有些是已知的,有些不是。现有算法中的特定弱点通常会导致它们被淘汰,但可以通过一些方法来解决它们(经典示例:DES 有一个密钥子集,导致代码易于破解。解决方法是不使用这些密钥。)。
【讨论】:
RSA 是一种非对称加密算法,建议 2030 年的最大密钥长度为 2048 AES 是一种对称算法,建议 2015 年的最大密钥大小为 256 位蛇加密算法也是对称算法,密钥大小为 256,建议 2015 年。
【讨论】: