【问题标题】:Trying to understand salting and hashing passwords in Ruby on Rails尝试理解 Ruby on Rails 中的加盐和散列密码
【发布时间】:2011-03-06 22:24:05
【问题描述】:

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

这是 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"

非常感谢!

【问题讨论】:

    标签: ruby-on-rails encryption saltedhash


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 很好的解释。补充一点,每条记录使用不同的盐的意义在于,即使攻击者成功破解了给出盐和哈希的密码,他们仍然只破坏了一个帐户。他们必须对表中的每个条目重复此过程。
    猜你喜欢
    • 2015-02-17
    • 2017-09-30
    • 2015-08-20
    • 2014-06-10
    • 2012-03-24
    • 2011-06-02
    • 2011-10-29
    • 2011-07-27
    相关资源
    最近更新 更多