gpt4 book ai didi

security - 我是否必须将我的盐与我的散列放在同一列中?

转载 作者:行者123 更新时间:2023-12-05 02:25:07 24 4
gpt4 key购买 nike

所以,我很乐意使用 per-user salt散列我的用户密码。但是,accepted answer 中有一条建议:

Do not use a separate column for the salt.

这对我来说没有意义。如果我只是连接散列和盐并将它们放在同一列中,那么这在语义上肯定等同于两个单独的列吗?在这种情况下,这只是隐蔽性安全,不是吗?

使用单独的列来存储盐会更容易(只要它是针对每个用户的)。我为什么不应该?

最佳答案

如果您要为每个用户存储一个随机盐,这并不重要。将盐+散列存储在一列中或将盐和散列存储在两列中。 我个人会将其存储为单个列,因为您不太可能只检索盐或仅检索哈希。此外,如果您更新盐,则哈希也需要更新,并且在更新哈希时你不妨更新盐。从密码学的角度来看,这两种存储方法都同样有效。

我认为该评论所表明的(尽管很糟糕)是另一种解决方案是从另一段每用户数据中派生盐,派生盐

以用户名为例,并将其传递给 PBKDF2 的 1000 多次迭代(实际上选择唯一且不寻常的迭代次数更好 - 比如 2137)。这将要求攻击者不仅可以访问数据库,还可以访问您的源代码以攻破系统。

现在,如果攻击者可以完全访问密码表和源代码,您将无法获得安全性,但是如果攻击者只能访问数据库(有限入侵),您就可以阻止攻击或至少使其变得更加困难。

派生 salt 实现中要考虑的另一个方面是攻击者是否能够创建用户帐户(开放注册系统)。如果任何人(包括你的攻击者)都可以创建一个帐户(比如在 stackoverflow 上),那么派生盐的值(value)就会降低。为什么?攻击者可以通过明文攻击仅访问数据库(攻击者知道自己的密码和其他详细信息)来对盐和盐源进行逆向工程。

关于security - 我是否必须将我的盐与我的散列放在同一列中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4060294/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com