encryption - RAR 密码,为什么彩虹表不起作用?

标签 encryption passwords rainbowtable

关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。












想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。

1年前关闭。




Improve this question




我已经looking around for encryption我已经看到彩虹表的几个实现就像密码的魅力(比如windows)。

我还没有看到对 RAR 文件进行 Rainbow 攻击的实现。为什么会这样。是什么让 RAR 加密更安全且不受此类攻击的影响?

最佳答案

彩虹表是对反转散列函数的优化:当你只有它的散列时找到密码。虽然这在这里不是绝对必要的,但我建议阅读 What are rainbow tables and how are they used?它有一个很好的解释,可以消除一些常见的误解。

RAR 加密有两个部分(或几乎任何使用密码加密某些数据的东西)。首先,使用 key derivation function 从密码派生出一个加密 key 。 (KDF)。然后使用加密 key 对数据进行加密或解密。

即使 KDF 是一个散列函数,彩虹表也无济于事:攻击者没有 KDF 的输出。当使用密码进行身份验证时,KDF 的输出就是存储在数据库中的内容。当使用密码进行加密时,KDF 的输出是攻击者想要的 key 。

无论如何,rainbow tables only help against unsalted hashes . WinRAR uses a good KDF ( PBKDF2 ) 包括盐。

KDF 将可变长度的字符串转换为固定大小的 key 。 KDF 的一个关键特性是它必须将输入字符串不同地映射到不同的键。 cryptographic hash function (SHA-1, SHA-256, ...) 实现了这一点。当输入字符串是人工提供的密码时,散列函数本身无法实现另外两个重要属性:

  • 如果两个人选择相同的密码,那么他们最终不得拥有相同的 key 。
  • KDF 的计算速度必须很慢,以便攻击者无法通过蛮力找到密码。

  • 盐实现了第一个特性。第二个属性是通过做这样的事情来实现的:获取密码,附加盐,散列批量;取这个散列,附加盐,散列很多;重复很多次。

    彩虹表是一种通过“单向”函数计算原像的优化:在一个方向上易于计算但几乎不可能逆向计算的函数,即给定 x 很容易计算 y=f(x) 但给定 y除了以某种方式猜测 x 和检查之外,没有已知的方法可以找到 x 使得 y=f(x)。哈希函数是这样的。使用对称 key 的加密不是这样的:攻击者不能计算 f 就像他可以计算它的逆一样。因此彩虹表无法帮助破解对称加密。

    关于encryption - RAR 密码,为什么彩虹表不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3817941/

    相关文章:

    C: OpenSSL RSA_private_decrypt() 失败,返回 "error:0407A079:rsa routines:RSA_padding_check_PKCS1_OAEP:oaep decoding error”

    ruby-on-rails - 简单地使用 rails 密码保护页面 - 我该怎么办?

    hash - RAR3 哈希算法

    c++ - 彩虹表 : Unable to get last reduction

    java - Java 中的加密和 Flutter 中的解密 (AES-256)

    java - 如何在java中的AES加密中将加密数组截断为大小16

    java通过受信任的服务器交换公钥

    java - 如何比较java中的2个密码?

    encryption - 将初始化向量和盐与密文一起传递是否不安全?

    security - 什么是字典攻击?