我一直looking around for encryption我看过Rainbow Tables的几个实现就像密码上的魅力一样(比如说windows)。
我还没有看到对RAR文件执行Rainbow攻击。为什么会如此。是什么让RAR加密更加安全并且不受这些攻击的影响?
答案 0 :(得分:15)
彩虹表是反转散列函数的优化:当你拥有的所有东西都是它的散列时找到密码。虽然这里并不是绝对必要的,但我建议阅读What are rainbow tables and how are they used?,它有一个非常好的解释,可以解决一些常见的错误观念。
RAR加密有两个部分(或几乎任何使用密码加密某些数据的部分)。首先,使用key derivation function(KDF)从密码派生加密密钥。然后,加密密钥用于加密或解密数据。
即使KDF是哈希函数,彩虹表也无济于事:攻击者没有KDF的输出。使用密码进行身份验证时,KDF的输出将存储在数据库中。当密码用于加密时,KDF的输出是攻击者所追求的密钥。
无论如何,rainbow tables only help against unsalted hashes。 WinRAR uses a good KDF(PBKDF2)包含一个盐。
KDF将可变长度字符串转换为固定大小的键。 KDF的一个关键属性是它必须将输入字符串与不同的键区分开来。 cryptographic hash function(SHA-1,SHA-256,......)实现了这一目标。当输入字符串是人工提供的密码时,哈希函数本身无法实现另外两个重要属性:
盐达到了第一个属性。第二个属性是通过这样的方式实现的:获取密码,附加盐,散列批次;拿这个哈希,追加盐,散列很多;重复多次。
彩虹表是通过“单向”函数计算前映像的优化:在一个方向上易于计算但几乎不可能反转的函数,即给定x很容易计算y = f(x)但是给定y没有已知的方法来找到x,使y = f(x),而不是以某种方式猜测x和检查。散列函数是这样的。使用对称密钥进行加密不是这样的:攻击者无法计算f而不是计算其逆数。因此,彩虹表无法帮助打破对称加密。
答案 1 :(得分:6)
彩虹表用于解码哈希,而非加密。彩虹表只是一组预先计算的哈希值,用于某些可能的输入。
因此,如果您为每个可能的Windows密码预先计算哈希值,那么当您想要恢复未知密码时,您需要的只是来自SAM数据库的哈希值,然后在彩虹表中查找。然后,彩虹表会为您提供一个与该哈希对应的密码。密码盐很复杂,但这是基本的想法。
彩虹表无法破解加密。从理论上讲,你可以为所有可能的键和所有可能的纯文本输入预先计算所有可能的密文 - 但是你可能需要更多的比特来存储这些数据而不是宇宙中的原子,更不用说这些原子会在你到达那里之前可能已经沸腾了。只是强行关键,它会更快(尽管仍然过于缓慢)。
答案 2 :(得分:3)
Rainbow表帮助从加密哈希函数生成的哈希中恢复纯文本内容,但RAR文件对文件数据和标题使用AES加密。这是一种不同的动物。
答案 3 :(得分:1)
使用散列密码击败彩虹表的简单方法是使用salt。我不熟悉RAR文件中的加密,但the Wikipedia page天RAR3使用badass encryption scheme。
答案 4 :(得分:-2)
盐的目的是确保相同的明文仍有不同的哈希值。例如,假设您的密码是entropy9,其哈希值是649acba24bab481f16ee49cdf0a40870。现在,如果你看到别人的哈希也是649acba24bab481f16ee49cdf0a40870,那么你马上就知道了他们的密码!显然这对非安全上下文也有影响,比如使用哈希映射等。