假设我有一个表格,用于存储哈希密码以及密码所用的盐(对于每个用户).
基于另一个stackoverflow问题,我理解盐可以用散列密码保存在同一个表上.
盐渍SHA1与盐渍SHA512相比有多不安全
我的问题是,如果带有散列密码的数据库被黑客入侵,并且用户将拥有这些哈希的彩虹表,并且考虑到盐与散列密码存储在同一个表中,那么看起来不是很简单实际的密码?您只需要从特定的彩虹表中删除密码中的盐.
考虑到这一点,我不明白为什么可以将盐存储在具有散列密码的同一数据库表中.有人可以给出更明确的解释吗?
好的,停在那儿.如果您甚至询问有关盐腌的问题,那么您已经走错了路.这是很容易出错的事情,并且有很多非常糟糕的例子说明如何做到这一点很容易对完全错误的东西过于自信.
最简单的正确方法是使用该password_hash
功能,而不是发明自己古怪的方法.这实际上比你在这里考虑的更容易,更安全.
该password_hash
函数默认在内部使用Bcrypt,它是一个非常难以暴力破解的哈希,不能与彩虹表一起使用.它也是可调节的,所以你可以随意使它变得更加困难.
您需要此可调整性因子来保护您的数据库更长的时间.今天非常难以破解的十年可能是微不足道的,我们只是不知道.您现在可以更难以确保如果您的数据库确实泄漏了某些时候您仍然受到保护.
将哈希和盐存储在同一个表中通常是必需的,将它们拆分通常是徒劳的,攻击者抓住两个不同的表几乎不会花费太多精力.他们可能会从你失去控制权的备份中获取所有内容.
现代的裂解系统甚至不打扰彩虹表.GPU崩解的最新技术是如此疯狂,以至于它使它变得毫无意义,普通密码可以在几秒钟内破解,在几分钟内就可以破解,而在几小时或几天内,如果这甚至是优先考虑的话,则更加模糊不清.比特币对SHA256的使用推动了该部门的大量研究,使得这些算法在这种安全性方面几乎无用.市场上有些设备每秒可以执行数万亿次的哈希.
这实际上比你从硬盘读取彩虹表更快.彩虹桌基本上是历史.
今天的威胁是已知良好密码的巨大词典,以及将其变为更加天文数字变体的方法.这些使GPU保持忙碌,并且可以发现人们使用的许多不太常见,故意更棘手的密码.