【问题标题】:What are the differences between these encryption algorithms?这些加密算法有什么区别?
【发布时间】:2011-07-12 08:15:38
【问题描述】:

MCRYPT_RIJNDAEL_128MCRYPT_RIJNDAEL_256MCRYPT_BLOWFISH等有什么区别,哪一个最适合网络数据传输?

【问题讨论】:

  • 正在传输什么数据,在什么之间传输?
  • 这个问题很宽泛——你能缩小范围吗?

标签: php algorithm encryption mcrypt


【解决方案1】:

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 次操作,即使使用大规模硬件实现也是不切实际的。但是,如果可以改进攻击,这可能会在未来发生变化。

【讨论】:

  • 谁说加密密钥(和 IV)必须是人类可读的? openssl_random_pseudo_bytes(32) 将为您提供 256 位的加密足够随机性,这恰好是 AES-256 中的最大密钥大小。它可以安全地以 base64 编码方式存储。
  • 每个字符 2 位熵?听起来密码太低了,我猜更像是每个字符 5 或 6 位。我猜英文文本(如报纸文章)的每个字符的熵将远低于密码的熵。
  • "数字 128 或 256 是密钥长度。"不,它定义了块大小! php.net/manual/en/function.mcrypt-encrypt.php
  • @Damon “Rijndael,支持 128、192 和 256 位的块和密钥大小,但在 AES 中,块大小始终为 128 位。” en.wikipedia.org/wiki/Block_size_%28cryptography%29 在官方 PHP 文档中,您可以使用相关常量设置块大小。
  • @Damon 有趣。你能引用“破碎”定义的来源吗?我没有意识到它有如此严格的含义。例如,this page 将损坏定义为能够从密文中提取明文,并将您的场景描述为弱化。
【解决方案2】:

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 使用更广泛,因此在某些情况下更容易实现。

【讨论】:

  • 暴力破解 128 键是不现实的。它只是不会发生。如果您有 i7,则每秒可以执行大约 4000 万次 AES 操作。假设我的数字错了 1000 倍,并假设攻击者拥有一个拥有 5 亿台此类机器的巨大僵尸网络。现在将 2^128 除以这些数字,然后再除以 (86400*365)。那仍然是 10^11 年。哎呀,我们的星球甚至不存在 10^11 年。您的密码被破解的可能性更多
  • 这正是我提到它需要“大量时间”的原因。目前,暴力破解是在没有密钥的情况下解密 AES 加密数据的唯一方法,换句话说,没有比尝试所有可能的选项更快的方法。本质上 128 位 AES 加密仍然非常安全,有太多的可能性:)
  • RIJNDAEL_256 不是 AES。仅限RIJNDAEL_128
【解决方案3】:

该问题的答案指出,关于 MCRYPT_RIJNDAEL_128 和 MCRYPT_RIJNDAEL_256,“数字 128 或 256 是密钥长度” - 这是不正确的。这些数字指的是 blocksize,而不是密钥长度。但是,两种实现方式(使用 128 位或 256 位的块大小)都可以接受 128 位或 256 位的密钥。

【讨论】:

    【解决方案4】:

    这取决于您想要的答案类型:实现上的差异仅仅是编程问题,而设计上的差异通常是非常详细的数学证明。解释几种加密算法之间复杂的设计差异可能超出了本网站的范围。此外,每种算法都有弱点,有些是已知的,有些不是。现有算法中的特定弱点通常会导致它们被淘汰,但可以通过一些方法来解决它们(经典示例:DES 有一个密钥子集,导致代码易于破解。解决方法是不使用这些密钥。)。

    【讨论】:

      【解决方案5】:

      RSA 是一种非对称加密算法,建议 2030 年的最大密钥长度为 2048 AES 是一种对称算法,建议 2015 年的最大密钥大小为 256 位蛇加密算法也是对称算法,密钥大小为 256,建议 2015 年。

      【讨论】:

      • 这不能回答问题!
      猜你喜欢
      • 1970-01-01
      • 2020-06-28
      • 1970-01-01
      • 2018-11-06
      • 2012-11-21
      • 1970-01-01
      • 2013-01-16
      • 1970-01-01
      相关资源
      最近更新 更多