假设我有一个表,其中存储了哈希密码,还存储了密码的盐(对于每个用户)。
根据另一个stackoverflow问题,我知道可以将盐与哈希密码保存在同一张表上,这是可以的。
我的问题是,如果具有哈希密码的数据库将被黑客入侵,并且用户将拥有一个针对这些哈希的彩虹表,并考虑到盐与哈希密码一起存储在同一表中,那么看到它会不会很简单实际密码?您只需要从该特定Rainbow表的密码中消除盐分即可。
考虑到这一点,我不明白为什么可以将盐与散列密码存储在同一数据库的表中。有人可以给我更清晰的解释吗?
好吧,就在那儿停下来。如果您甚至要问有关盐腌的问题,那么您已经走错了路。这是很容易出错的事情,并且有太多可怕的例子说明如何做到这一点,以至于对完全错误的事情变得过于自信。
最简单的正确方法是使用该password_hash
函数,而不要发明自己的古怪方法。实际上,这比您在此考虑的要容易得多,也更安全。
该password_hash
函数默认情况下在内部使用Bcrypt,并且它是一个哈希,旨在使暴力破解极其困难,并且不能与Rainbow表一起使用。它也是可调的,因此您可以根据需要任意增加难度。
您需要此可调整性因素来保护您的数据库更长的时间。我们只是不知道,如今很难破解的东西可能在十年后变得微不足道。现在,您可以更难地确定数据库是否由于某种原因泄漏出去,从而在一段时间内仍然受到保护。
通常将散列和盐存储在同一张表中是必要的,将它们拆分通常是徒劳的,对于攻击者来说,抓住两个不同的表几乎不费吹灰之力。他们可能会从您始终无法控制的备份中获取所有内容。
现代的破解系统甚至不用理会彩虹桌。GPU破解的最新技术如此之快以至于使其变得毫无意义,通用密码可以在几秒钟之内破解,较少的普通密码在数分钟内破解,而在数小时或数天之内更难破解,即使这是当务之急。比特币对SHA256的使用推动了该部门的大量研究,致使这些算法对于此类安全性几乎毫无用处。市场上有一些设备可以每秒执行数万亿个哈希。
这实际上比您可以从硬盘读取Rainbow表更快。彩虹桌基本上是历史。
今天的威胁是巨大的已知密码词典,以及将其突变为更庞大数量的变体的一种方法。这些使GPU处于繁忙状态,并且可以发现人们使用的许多较不常见的,故意棘手的密码。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句