试图了解Ruby on Rails中的salting和散列密码

Bea*_*red 4 encryption ruby-on-rails saltedhash

我正在浏览Michael Hartl的书(真棒,免费资源,顺便说一下,谢谢迈克尔!)我有一个关于盐渍和哈希密码的问题.腌制密码的目的是防止黑客进行彩虹攻击,如果我理解正确的话,如果黑客可以猜测所使用的加密类型,那么基本上就是暴力攻击.为了防止这种攻击,使用salt在密码加密之前随机化密码,但该密码必须与加密密码一起存储?如果是这样,那么如果黑客可以访问数据库并检索加密密码,那么他们是否也无法检索盐并继续进行彩虹攻击?

这是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"
Run Code Online (Sandbox Code Playgroud)

非常感谢!

Bv2*_*202 9

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

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

盐通过向密码添加额外位来防止这种情况.如果盐足够长,则散列将不在彩虹表中.

使用蛮力攻击时,你必须计算哈希值,而彩虹攻击时,你已经拥有哈希值.

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

  • 很好的解释.要添加,每个记录的不同盐的点是这样的,即使攻击者成功破解了给定盐和哈希的密码,他们仍然只破坏了一个帐户.他们必须为表中的每个条目重复此过程. (2认同)