为什么我们不能将每个哈希密码都存储在存储HDD中并使用它来匹配哈希密码,而不是使用暴力破解密码?

问题描述

因此,假设我们以某种方式获得了受害者的哈希密码

因此,暴力破解方法获取每个可能的字符串,对其进行哈希处理,然后检查其是否与受害者的哈希密码匹配。如果可以,我们可以使用该字符串作为密码,从而被黑。

但是,即使对于6-8个字符的字符串,这也需要大量的计算能力和大量的时间。

但是,如果我们可以用少于10个(某些)字符对每个可能的字符串进行哈希处理,然后将其像预先存储的数据库一样存储在存储中,该怎么办?这样,当您获得哈希密码时,您可以轻松地查找表并获取密码

P.S:-
对于此示例,假设我们仅使用一种哈希算法,并且具有庞大的数据服务器来存储数据。 我刚接触安全,这是一个非常基本的问题,但是由于某种原因,很难在互联网上找到该问题的答案。

解决方法

这被称为rainbow table,是非常知名的概念。

这也是您不应该仅存储密码哈希的原因。 salt(添加到密码中的随机字符串,然后与哈希一起存储为纯文本以进行验证)可以通过有效地使它无法使用彩虹表和强制重新计算来轻松缓解这种攻击。

同样为了完整起见,还需要注意的是,普通的密码散列不再足够用于凭证(密码),因为它们太快了,这意味着为给定的盐有效生成彩虹表太快了暴力破解密码。专门的硬件使得即使仅使用普通的加密散列进行散列,即使使用盐也可以恢复相对较强的密码。

因此,最佳实践是使用key derivation function (KDF)生成密码哈希,这种方式使暴力破解非常缓慢(不可行),但足以进行验证。同样,在大多数已知的实现中,向每个哈希中添加随机盐是自动的,并且整个过程都是安全的。

此类算法例如是PBKDF2,bcrypt,scrypt或更近期的Argon2。这些都具有不同的特征,并且更能抵抗不同的攻击。