为什么使用用户的密码摘要将随机盐存储在数据库中是安全的?

ryb*_*ome 3 security passwords hash salt

鉴于LinkedIn密码漏洞,我一直在考虑密码安全问题.我过去使用的Web开发框架通常将主应用程序级别盐存储为应用程序常量,然后使用该值对所有用户密码进行加密(基于每个应用程序随机生成).例如在伪代码中:password = hash(App::salt + userPassword).

我已经阅读了很多建议,建议为每个用户生成一个随机盐,然后将其与每个用户的密码一起存储在数据库中.我的问题是,这如何提高安全性?如果攻击者从数据库中获取密码摘要列表,他们也可能也能获得盐,对吧?或者是否有一些我不知道的攻击向量会在没有访问表的其余部分的情况下获得密码摘要?

Ser*_*sev 5

为每个用户存储随机盐会击败彩虹桌攻击.

在"主盐"的情况下,仍然可以预先计算这样的表并在攻击中使用它.对于每用户盐,这变得不切实际.