Ima*_*ist 23 security hash salt
我的理解是盐不是秘密的,它只是意图与任何集中标准不同,所以你不能开发彩虹表或类似的攻击来打破使用该算法的所有哈希值,因为盐分断裂彩虹桌.我在这里的理解可能不完全正确,所以如果我错了,请纠正我.
在一个广泛使用的开源软件中,盐会广为人知,这会让你受到攻击,因为现在他们可以简单地攻击哈希的盐渍版本并创建包含盐数据的彩虹表.
我认为,有两种方法可以解决这个问题.首先是使用每个新版本的软件更改salt,但这并不好,因为该软件的新版本将无法再针对旧密码哈希进行测试.
我想到的第二个解决方案是存储每个密码的盐; 换句话说,每个密码都有不同的盐.缺点是盐必须以某种方式与密码哈希相关联,可能只是将它们紧紧地放在数据库中的密码旁边.甚至可以使用用户名(但可能不会,用户名可能太短).
我的问题是,这可以接受吗?直接使用哈希密码存储盐有任何额外的风险吗?在我看来,在源代码中存储salt没有什么不同,因此通过使用密码存储salt不会造成安全性损失.
免责声明:我没有将它用于任何现实生活中的安全系统.事实上,我从未设计过任何类型的密码系统.我只是对自己的安全问题进行了模糊的教育.
Wil*_*ill 19
更新:使用一个称职的库,例如Python的passlib.
这些用于生成每密码盐并且它们使用适当的散列算法(它不足以仅使用诸如SHA1的加密散列;您必须以使其反向非常慢的方式应用它,例如循环1000或这就是密码散列函数如bcrypt工作的方式.密码存储库可以正常完成所有这些;它们通常会生成一个分隔的字符串,以便它们可以确定使用的散列系统和工作因子;您只需存储字符串需要知道这个.
您可以将盐存储在表格中的"纯文本"中.
盐不需要保密才能有效
它只需要是随机的.
salt通过使散列值与相同或其他数据库中的相同密码无法比较来强化密码,并使大的预生成的公共密码列表无效到散列查找(例如'彩虹表').
因此,每个用户的盐是唯一的并且随密码存储的随机值是至关重要的; 问题中概述的替代方案(使用用户名作为salt,使用整个应用程序的单个salt值)每个都失败:
如果系统使用用户名或其他琐事,则可以将密码与其他系统中具有相同名称的其他用户进行比较(想象"管理员"或"root"用户帐户在不同系统中使用相同密码的频率. .)
如果系统对同一系统中的所有用户使用单个随机盐,那么偶然拥有相同密码的两个用户将具有相同的哈希值,并且猜测一个用户的密码将轻而易举地损害另一个用户.
试图保持盐的秘密毫无意义,因为盐渍和散列密码的整个实践只是因为我们从经验中知道我们甚至无法保证我们的数据库完全可靠.您最多可以单独存储盐,并希望访问您的数据库的攻击者找不到它,但是如果您使用了良好的哈希算法和足够长的单个盐,那么您应该是安全的.
盐的唯一目的是确保您无法在整个数据库甚至多个数据库中分摊暴力攻击的成本.
首先是使用每个新版本的软件更改salt,但这并不好,因为该软件的新版本将无法再针对旧密码哈希进行测试.
我所看到的一个变体就是在安装过程中生成一个随机盐(当然还有不同的版本),这样每个运行的实例都有不同的版本.当然,为每个密码设置不同的盐(可能除上述之外)还是更好的.
| 归档时间: |
|
| 查看次数: |
6222 次 |
| 最近记录: |