我正在建立一个网站,并试图决定如何加密用户密码以将其存储在SQL数据库中。
我意识到使用简单的md5(password)是非常不安全的。我正在考虑使用sha512(password.salt),并且我一直在研究生成有用盐的最佳方法。我阅读了许多文章,指出盐应尽可能地随机以增加哈希值的熵,这似乎是个好主意。但:
数据库中哈希旁边的看起来很奇怪的值难道不是很明显吗?如果攻击者可以使用哈希值和哈希值来访问盐,那如何更安全?
在这方面有专业知识吗?谢谢!
攻击者被 “允许” 知道盐-必须以某种方式设计安全性,即使知道盐也仍然是安全的。
盐有什么作用?
盐有助于使用预先计算的“彩虹表”防御暴力攻击。 盐会使暴力破解者的攻击者(在时间/内存方面)更加昂贵。 计算这样的表是昂贵的,并且通常仅在它可以用于多个攻击/密码时才进行。 如果您对所有密码使用相同的盐,那么攻击者可以预先计算出这样的表,然后将您的密码暴力破解为明文… 只要您为每个想要生成的密码生成一个新的(最佳加密强度)随机盐存储哈希值没有问题。
如果您想进一步加强安全性,则 可以多次计算哈希(哈希等)-这虽然不花很多钱,但会使蛮力攻击/计算“彩虹表”的成本更高。 ..请不要发明自己- 有行之有效的标准方法,请参见例如http://en.wikipedia.org/wiki/PBKDF2和http://www.itnewb.com/tutorial/Encrypting- Passwords使用PHP来使用RSA- PBKDF2-Standard进行存储
注意:
由于“ CPU时间”(可用于彩虹表/蛮力之类的攻击)越来越广泛地被使用,因此, 如今 使用这种机制已成为一种 挑战 。例如,Amazon Cloud服务在最快的前50名中排名第一全球超级计算机,任何人都可以使用它的数量相对较少)!