Coda Hale的文章“如何安全存储密码”声称:
bcrypt具有内置的盐,可以防止彩虹表攻击。
他引用了这篇论文,该论文说在OpenBSD的实现中bcrypt
:
OpenBSD从arcfour(arc4random(3))密钥流生成128位bcrypt盐,该密钥流以内核从设备时序收集的随机数据作为种子。
我不知道这怎么工作。在我的盐概念中:
- 每个存储的密码都需要不同,因此必须为每个密码生成一个单独的彩虹表
- 它需要存储在某个地方以便可重复:当用户尝试登录时,我们尝试输入密码,重复与最初存储密码时相同的盐和哈希程序,然后进行比较
当我将Devise(Rails登录管理器)与bcrypt一起使用时,数据库中没有salt列,因此感到困惑。如果盐是随机的并且没有存储在任何地方,我们如何可靠地重复哈希过程?
简而言之,bcrypt如何内置盐?