4

我正在浏览 Michael Hartl 的书(真棒,免费资源,顺便说一句,谢谢 Michael!)我有一个关于加盐和散列密码的问题。加盐密码的目的是防止黑客执行彩虹攻击,如果我理解正确的话,如果黑客能够猜出所使用的加密类型,这基本上是一种蛮力攻击。为了防止这种攻击,在加密之前使用盐来随机化密码,但是盐必须与加密密码一起存储?如果是这样,那么如果黑客可以访问数据库并检索加密密码,那么他们不能也检索盐并继续进行彩虹攻击吗?

这是迈克尔的流程代码示例......

>> Time.now.utc
=> Fri Jan 29 18:11:27 UTC 2010
>> password = "secret"
=> "secret"
>> salt = secure_hash("#{Time.now.utc}--#{password}")
=> "d1a3eb8c9aab32ec19cfda810d2ab351873b5dca4e16e7f57b3c1932113314c8"
>> encrypted_password = secure_hash("#{salt}--#{password}")
=> "69a98a49b7fd103058639be84fb88c19c998c8ad3639cfc5deb458018561c847"

非常感谢!

4

1 回答 1

9

不,彩虹攻击与蛮力攻击不同。

您可以将彩虹表视为字符串及其散列的大型数据库。当有人访问您的数据库时,他们可以将密码哈希与彩虹表中的密码进行比较并轻松获取密码。

盐通过在密码中添加额外的位来防止这种情况。如果盐足够长,散列就不会出现在彩虹表中。

使用蛮力攻击时,您必须计算哈希值,而使用彩虹攻击时,您已经有了哈希值。

所以是的,当有人访问您的数据库时,他们也可以获得您的盐。但这并不重要,如果它是每条记录的唯一记录。

于 2011-03-06T22:30:01.733 回答