比方说,我有一个存储散列密码的表,还存储了密码使用的盐类(针对每个单独的用户)。
基于另一个堆栈溢出问题,我理解使用散列密码将盐分保存在同一个表上是可以的。
我的问题是,如果有哈希密码的数据库被黑了,用户会有一个彩虹表来处理这些散列,并且考虑到盐类与散列密码存储在同一个表中,那么看到实际的密码不是很简单吗?您只需从特定彩虹表中删除密码中的salt即可。
考虑到这一点,我不明白为什么可以用散列密码将salt存储在同一个数据库中。有人能给我一个更清楚的解释吗?
发布于 2016-04-07 08:46:40
好的,,停在这里,。如果你问的是盐渍,你已经走错路了。这是一件很容易出错的事情,关于如何做到这一点,有很多可怕的坏例子,以至于我们很容易对完全错误的事情过于自信。
最简单的正确方法是使用函数,而不是自己发明一种奇怪的方法。这实际上比你在这里考虑的要容易得多,也更安全。
默认情况下,password_hash函数在内部使用Bcrypt,它是一个哈希,它的设计非常难以强制,不能与彩虹表一起使用。它也是可调的,所以你可以任意使它更加困难,如果你愿意的话。
您需要此可调整因子来保护数据库的较长时间。今天很难解决的问题在十年内可能是微不足道的,我们只是不知道。现在,您可以更难确保如果数据库确实泄漏了,那么您仍然会在一段时间内受到保护。
将散列和盐分存储在同一个表中通常是必要的,将它们分开通常是徒劳无功的,攻击者抓取两个不同的表几乎没有多大的努力。他们可能会从你失去控制的后援那里抓走所有的东西。
现代破解系统甚至不用彩虹桌。在GPU的破解速度太快了中,最先进的技术是它没有意义,普通密码可以在几秒钟内破解,而不那么普通的密码可以在几分钟内破解,而那些在几小时或几天内更模糊的密码(如果这是优先考虑的话)。比特币对SHA256的使用推动了这个部门的大量研究,使得这些算法对这种安全性几乎毫无用处。市场上有些设备每秒可以执行数万亿次哈希运算。
这实际上比你在硬盘上读取彩虹表的速度要快。彩虹桌基本上是历史。
如今的威胁是巨大的已知密码字典,也是将其变异成更多变体的一种方法。它们使GPU忙碌,并能发现人们使用的许多不那么常见的、故意使用的更棘手的密码。
https://stackoverflow.com/questions/36470897
复制相似问题