【问题标题】:Storing salt in code instead of database将盐存储在代码中而不是数据库中
【发布时间】:2010-10-27 02:02:32
【问题描述】:

great 中的 couple 讨论了 salt 最佳实践,似乎压倒性的建议是为每个密码生成不同的 salt,并将其与密码一起存储在数据库中。

但是,如果我正确理解 salt 的用途,它是为了减少您受到彩虹表攻击的可能性。所以,我知道通过将它存储在数据库中,最好为每个用户更改它,但是如果盐离数据库不远怎么办?如果我在代码中存储一个盐值(在 Web 服务器上将在一个已编译的 dll 中),如果攻击者以某种方式获得对数据库的访问权,这难道不是同样的目的吗?在我看来,这似乎更安全。

【问题讨论】:

    标签: asp.net security cryptography salt


    【解决方案1】:

    ...直到攻击者获得对 DLL 的访问权限。

    【讨论】:

      【解决方案2】:

      盐的价值在于它对每个用户都是不同的。当您重新创建散列值以进行比较时,您还需要能够检索此非唯一值。

      如果您存储一个用于每个密码的盐值,那么您首先会大大降低使用盐的价值。

      【讨论】:

        【解决方案3】:

        盐的目的是要求每个密码重新生成彩虹表。如果您使用单一的盐,黑客/破解者只需重新生成彩虹表一次,并且他拥有您所有的密码。但是,如果您为每个用户生成一个随机的,他必须为每个用户生成一个。黑客部分要贵得多。这就是为什么您可以以纯文本形式存储盐的原因,只要有多个盐,黑客是否知道它并不重要。

        默默无闻的安全性不好,微软已经教会了我们这一点。

        【讨论】:

        • 如果你想玩得开心,就两个都做 ;) 或者两个都做,然后在数据库中存储一个 dup,或者两者都做,在数据库中使用第三个盐和第四个盐重复:D
        【解决方案4】:

        我从盐中学到的教训是:分而治之(安全)

        【讨论】:

          【解决方案5】:

          除了其他答案之外,还值得注意的是,攻击者可以像找出密码一样找出你的盐:给定一个已知密码(他自己的),他可以对可能的密码进行暴力攻击盐。

          【讨论】:

            猜你喜欢
            • 2012-10-21
            • 1970-01-01
            • 1970-01-01
            • 2021-03-18
            • 2011-07-22
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-01-31
            相关资源
            最近更新 更多