然而,使用哈希值代替纯文本密码并不能提供完全的安全性。有一些方法可以从(捕获的)哈希值中得出相应的密码。
一种方法就是简单地尝试一下。如果使用工具自动高速发生这种情况,则这是暴力攻击。
黑客也喜欢字典攻击。在这种情况下,攻击者会尝试使用来自字典的不同术语。使用哈希函数处理这些术语,以将结果与捕获的哈希值进行比较。一旦匹配,密码就确定了。不幸的是,这种方法效果出奇地好,因为许多用户使用简单的术语(可以在任何好的字典中找到)作为密码。
此类攻击需要大量资源,尤其是计算能力和时间。黑 RCS 数据葡萄牙 客们流行的一种解决方案是在所谓的彩虹表中搜索合适的哈希值。简单来说,这些都是已经包含哈希值和相应密码的表。因此只需要比较。此类表格的吸引力在于它们还可以考虑复杂的算法。
幸运的是,彩虹表有一个弱点,即其大小。您的数据需要大量的存储空间,并将数据库的搜索和过滤功能推向技术极限。因此,彩虹表通常经过预先过滤,以便不会考虑到所有可能的、长度不超过一定范围的密码组合。
指纹识别与加密算法
许多散列算法(例如上面提到的 MD5 算法)主要用于指纹识别(创建数字指纹)。如果拥有大量的计算能力,则可以在可接受的时间内确定哈希值对应的密码。
因此,建议开发人员仅使用选定的哈希函数。在存储加密密码时,有些加密算法可以提供相对更高的安全性。例如,不会发生碰撞,从而可以提高安全性。这些安全哈希函数包括:
氩2
PBKDF2
RIPE-MD 320
加密
SHA3
SALT and PEPPER 程序更加安全
管理员和开发人员可以在计算哈希值之前在密码中添加 SALT 或 PEPPER 来进一步提高密码安全性。对于 SALT 来说,密码会用随机生成的字符串进行补充。它扩展了密码,从而使破解哈希值变得更加困难。
PEPPER 方法类似,但每个密码都补充相同的(即相同的)字符串。虽然相比之下这提供的安全性较低,但从技术上来说更容易实现。