cryptography - bcrypt 用 hmac'd 密码改进了吗?

标签 cryptography password-protection password-encryption

给出:

$salt - 一个足够长的伪随机生成的字符串

$pepper - 一个足够强大的私钥,只有存储密码的数据库的管理员知道

你会看到吗

$hash = bcrypt(hmac($userpassphrase,$pepper),$salt)

有意义地优于

$hash = bcrypt($userpassphrase,$salt)

考虑到管理/存储 $pepper 和 $salt 的额外负担?

我的假设是 hmac 并没有有意义地加强由此产生的 $hash,并且存储 $pepper 的负担超过了任何假设的好处......但我很想听到明智的意见。

最佳答案

key 散列或 HMac 用于验证数据源,而不用于密码保护。例如,如果你和我有一个共享 key ,我可以将一些数据与计算出的 hmac 一起发送给你,你可以使用相同的 key 来检查 hmac 哈希值是否匹配,如果匹配,你就知道数据来自我,并没有被改变。

您无法有效地在机器上隐藏攻击者无法访问的 secret 密码,您要做的就是添加一层隐藏。在没有共享 key 的情况下使用 HMac 本质上与执行 SHA($userpassphrase, $salt) 相同,它非常容易计算,因此一旦“secret “密码是已知的。

bcrypt 的全部目的只是为了减慢散列过程,因此攻击者需要很长时间才能为您的盐生成彩虹表。如果你想让你的密码散列方案更安全,只需增加原始散列函数的成本。在 bcrypt 中,您可以指定“logRounds”的数量(我认为这就是他们所说的),这是执行散列的次数。如果您指定 logRounds 为 15(默认值为 10),则哈希将执行 2^15 = 32768 次,这会显着降低速度。执行散列所需的时间越长,攻击者破解它所需的时间就越长。

关于cryptography - bcrypt 用 hmac'd 密码改进了吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11106087/

相关文章:

php - 数据库上的安全明文密码

php - 如何通过 PHP/MySQL/JSON 对用户数据使用 bcrypt

windows-phone-7 - 在Windows Phone 7上使用SHA256加密算法

go - 在 Go 中使用 secp256k1

java - 如何使用新的 Bouncy CaSTLe 库从 PKCS10CertificationRequest 获取公钥?

javascript - 如何使用密码保护基本 HTML 页面?

database - 如何在 PHPMyAdmin 控制面板中更改加密密码?

hash - 根据文件内容计算出的MD5哈希值的前4个字节发生冲突的可能性是多少?

java - RSA block 失败的数据过多。什么是 PKCS#7?

https - 通过 HTTPS 的纯文本密码