运维开发网

安全性 – 密码哈希与真正的随机盐或用户名盐加胡椒?

运维开发网 https://www.qedev.com 2020-07-05 16:31 出处:网络 作者:运维开发网整理
考虑以下两种方法: hashedPassword = hash(trulyRandomSalt + password) hashedPassword和trulyRandomSalt存储在数据库中. hashedPassword = hash(applicationConstantPepper + uniqueUserName + password) hashedPassword和uniqueUse
考虑以下两种方法:

hashedPassword = hash(trulyRandomSalt + password)

hashedPassword和trulyRandomSalt存储在数据库中.

hashedPassword = hash(applicationConstantPepper + uniqueUserName + password)

hashedPassword和uniqueUserName存储在数据库中,applicationConstantPepper存储在应用程序配置中.这里,uniqueUserName充当盐,通常是电子邮件地址.

我已经阅读了这篇question,它有很多很好的信息,但没有解决应用程序常量胡椒值以及如何使用用户名作为盐来改进.

我一直使用方法一,使用32位加密随机盐.但是,我刚刚看到在另一个应用程序中使用的方法二.我对方法二的第一个问题是它将用户名绑定到哈希值,这样用户名就永远不会改变而不重新生成哈希值.

方法二有哪些安全问题?

哪种方法最好?

Consider the following two methods:

第一种方法很糟糕,因为它允许攻击者使你的哈希值使用像oclHashcat这样的东西,通常每月进行数万亿或数万亿的猜测,第二种方法是可怕的,因为那些相同的攻击者不仅可以制造相同的,通常是数万亿或者每月猜测数以万亿,如果他们在获得密码之前得到了applicationConstantPepper和用户名,他们可以在获取密码时预先计算猜测.

请阅读How to securely hash passwords?,其中Thomas Pornin说:“为了使辣椒真正适用,你需要进入一个特殊的设置,那里不仅仅是带有磁盘的PC;你需要一个HSM.”请阅读整篇文章的上下文,但其要点是:

>使用PBKDF2(也称为RFC2898和PKCS#5v2),BCrypt或SCrypt.

>不管你的调味料有多好,都不要使用哈希算法的单次传递.

>使用8-16字节的加密随机盐.

>使用高的迭代计数/工作因子,因为您的机器可以在峰值负载下处理而不会导致用户抱怨.

>特别是对于PBKDF2,请勿请求或使用比散列函数的本机大小更多的输出字节.

> SHA-1 20个字节

> SHA-224 28字节

> SHA-256 32字节

> SHA-384 48字节

> SHA-512 64字节

>如果您使用的是64位系统,请考虑使用PBKDF2-HMAC-SHA-384或PBKDF2-HMAC-SHA-512,这将降低具有2014年复古GPU的攻击者对您的优势.

如果您还喜欢胡椒概念,请再次阅读Password Hashing add salt + pepper or is salt enough?,Thomas Porrin的回答.

0

精彩评论

暂无评论...
验证码 换一张
取 消