了解身份验证中salt的用途

时间:2015-05-19 02:06:28

标签: authentication salt

根据我的研究,盐的目的是打败彩虹表的使用。这样做是因为彩虹表仅用于查找唯一密码的哈希值(没有盐)。我正在理解冲突,了解在引入盐时我们如何使用彩虹表。假设我们有以下情况:

我是恶意黑客,我希望能够访问富人的银行帐户。我能够访问银行的数据库,该数据库具有明显的盐和散列字符串,这是用户密码和盐(f(密码+盐))的函数。盐是fsd88。接下来,我从网上的一些黑客那里得到一张彩虹表。太棒了,所以我准备变得富有并搬到瑞士。

我接下来要做的是把哈希的字符串放在彩虹桌上查找(根据在线教程,这需要大约一个小时的时间)。彩虹表查找然后返回passwfsd88。因为我知道盐是fsd88。我现在知道密码是什么了!它的密码!

我的盐的心理模型有什么问题?谢谢你的阅读。

1 个答案:

答案 0 :(得分:0)

在计算哈希值之前添加salt:

$password = 'secret';
$salt = 'kU832hNWQ2122093uiue';
$passwordHash = hash($password + $salt);

在此示例中,未计算密码'secret'的哈希值,而是'secretkU832hNWQ2122093uiue'的哈希值。没有人会用这样的密码创建一个彩虹表,如果你找到一个预先计算好的彩虹表,它将包含'secret'的散列。

当然你可以使用这个盐构建一个带有可能密码列表的彩虹表(盐并不是秘密),但如果每个密码都有其独特的盐,那么你必须为每个密码构建彩虹表分别。这意味着,salt可以防止使用单个rainbow-table一次性获取所有密码。

很高兴知道我现在很富有,来自瑞士的问候: - )

相关问题