使用随机盐改进密码哈希

Tch*_*upi 21 php mysql security hash sha

我正在创建一个网站,我正在尝试决定如何加密用户密码以将它们存储在SQL数据库中.

我意识到使用简单的md5(密码)是非常不安全的.我正在考虑使用sha512(password.salt),我一直在研究生成有用盐的最佳方法.我阅读了很多文章,说明盐应该尽可能随机地添加熵到哈希,这看起来是个好主意.但:

  • 你需要将随机盐与哈希一起存储
  • 鉴于攻击者以某种方式访问​​了您的哈希密码(并试图将哈希值反转为纯文本),这意味着他可能会转储您的数据库,然后也可以访问您的随机盐

在数据库中哈希旁边的怪异外观值是不是很明显?如果攻击者可以使用哈希值访问salt,那么它更安全吗?

任何人都有该领域的专业知识?谢谢!

Yah*_*hia 40

攻击者"被允许"知道盐 - 你的安全必须以一种方式设计,即使知道盐,它仍然是安全的.

盐有什么作用?

Salt使用预先计算的"彩虹表"帮助抵御暴力攻击.
对于攻击者来说,盐使蛮力更加昂贵(在时间/内存方面).
计算这样一个表是很昂贵的,通常只有当它可以用于多个攻击/密码时才会这样做.
如果您对所有密码使用相同的盐,则攻击者可以预先计算此类表,然后将密码暴力强制为明文...
只要您为每个密码生成一个新的(最好的密码强)随机盐存储哈希没有问题.

如果你想进一步加强安全性
你可以多次计算哈希值(散列哈希等) - 这不会花费你太多但是它使得暴力攻击/计算"彩虹表"更加昂贵. ..请不要自己发明 - 有经过验证的标准方法,请参阅http://en.wikipedia.org/wiki/PBKDF2http://www.itnewb.com/tutorial/Encrypting-Passwords -with-PHP换存储,使用最RSA-PBKDF2-标准

注意:

使用这样的机制是这些天mandatrory因为"CPU时间"(可用于像彩虹表/蛮力等攻击)的越来越广泛使用(例如见的事实,亚马逊的云服务是最快的前50名中全世界的超级用户,任何人都可以使用相对较少的数量)!

  • 甚至更好的GPU时间 (9认同)

Tac*_*der 15

鉴于攻击者以某种方式访问​​了您的哈希密码(并试图将哈希值反转为纯文本),这意味着他可能会转储您的数据库,然后也可以访问您的随机盐

腌制的全部意义在于打败"彩虹桌":

http://en.wikipedia.org/wiki/Rainbow_table

看看为什么足够长的盐会在"防御彩虹表"一节中击败任何彩虹表.

怎么更安全?

它曾经更安全,因为它迫使攻击者尝试当时非常昂贵的蛮力方法,而不是在预先计算的彩虹表中查看.如果你有一个64位的盐,攻击者需要有2 ^ 64个预先计算的彩虹表而不是一个...换句话说:它使彩虹表无用.

但请注意,现代GPU可以每秒破解数十亿个密码,这使得攻击者存储巨大的彩虹表(而不是存储数十亿个哈希值,只需几秒钟就可以计算出来)几乎没有意义.

现在你想使用像PBKDF2或scrypt这样的东西存储你的"密码".