好的,所以我一直在阅读(很多!)有关安全和散列、盐、加密等方面的内容,但是有一件事情一直困扰着我。看起来很多非常懂行的人都说,在数据库中存储散列密码时,将盐值与其一起存储是可以的。
我不禁想问,为什么呢?如果您的数据库被导出,那么黑客就可以访问到所有信息,他们可以查看任何一个记录,然后就能够轻松获得散列密码和明文盐值。这会为他们使用彩虹表和/或字典攻击提供所需的信息,不是吗?
我一定是漏了什么(是的,这以前从未发生过!!),真的很希望对此事有所启示。
彩虹表无法有效破解具有不同盐值的密码集合,即使已知盐值;如果要对每个盐值构建一个不同的表,那么就会打败整个彩虹表的目的。攻击者单独暴力破解每个密码会更快。这就是拥有每个用户盐值的目的。
换句话说,只有在尝试破解多个密码时,这些密码都使用相同的摘要算法进行处理,彩虹表才能发挥作用。为每个密码添加不同的盐意味着这些密码不使用相同的摘要算法进行处理。