当前位置: 首页 > 知识库问答 >
问题:

bCrypt是改进与hmac的密码?

柳俊健
2023-03-14

鉴于:

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

$Pepper-一个足够强的私钥,只有存储口令的数据库管理员知道

你会看到吗

###########################################################################################################

有意义地优于

$hash=bcrypt($userpassphrase,$salt)

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

我的假设是,hmac不会有意义地加强生成的$hash,并且存储$pepper的负担超过了任何假定的好处。。。但我很愿意听取知情的意见。

共有3个答案

单喜
2023-03-14

将一个额外的哈希附加到一个密码扩展函数上是没有意义的,比如bcrypt;再迭代几次会更容易也更好。

“胡椒”是一种常用但有问题的做法;就我个人而言,我认为攻击者获取您的数据库但无法访问您的密钥的攻击模型是经过精心设计的,因此不值得对其进行保护,因为这样会导致实现的复杂性。

孔驰
2023-03-14

我不知道你想怎么用它。假设您存储$hash以稍后进行挑战响应身份验证,那么您需要将$Pepper发送给客户端,这只是另一种盐。简单地添加一个HMAC不会有太大的用处。

越欣怡
2023-03-14

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

您无法有效地在计算机上隐藏攻击者无法获取的机密密码短语,您所要做的只是增加一层模糊性。在没有共享密钥的情况下使用HMac本质上与使用SHA($userpassphrase,$salt)相同,这非常容易计算,因此,一旦知道“secret”密码短语,就不会给密码哈希方案添加任何有意义的安全性。

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

 类似资料:
  • 密码\u默认值和密码\u BCRYPT之间有什么区别?他们都使用河豚加密算法吗?算法的成本是多少?如何在PHP中设置密码\u散列生成255个散列长度而不是60个?

  • 我的问题来自于如何用blowfish散列长密码(>72个字符) 我正在使用bcrypt(blowfish)对密码进行散列。因此,我从这个问题中发现https://security.stackexchange.com/questions/39849/does-bcrypt-have-a-maximal-password-length 它的字符限制为72。 所以,我开始考虑限制密码的最大长度,但在这些

  • 我有一个网页,使用bcrypt加密用户名密码,这些密码然后存储在数据库中。我有一个运行在QT上的C++程序,它需要对用户进行身份验证,为了做到这一点,我必须加密用户输入的密码,并将其与数据库中的密码进行比较。这是正确的做法吗?如果是的话,我该如何做到这一点?用户输入的密码的加密必须与bcrypt的加密相同,我如何做到这一点?提前道谢。

  • 我的应用程序中有一个用例,它应该防止用户在重置密码时选择最后3个密码中的一个。我使用Angular作为前端,spring boot作为后端。在我的场景中,用户密码存储为bcrypt哈希。 如何将用户输入的密码与最近3个存储的bcrypt密码进行比较? 当我运行下面的代码片段示例时, 它生成以下bcrypt哈希。每个散列都是不同的,这是合理的,因为当我检查时,我可以看到生成的salt是随机值。 sp

  • 问题内容: 我使用Node.js + passport设置了一个用于用户身份验证的站点。 现在,我需要迁移到Golang,并需要使用保存在db中的用户密码进行身份验证。 Node.js加密代码为: 如何使用Golang制作与Node.js bcrypt相同的哈希字符串? 问题答案: 我相信使用golang.org/x/crypto/bcrypt软件包将是: 工作示例:

  • 问题内容: 我想用散列密码,以后再验证提供的密码是否正确。 散列密码很容易: 如何将纯文本密码与存储的哈希值进行比较? 问题答案: 使用py-bcrypt,您不需要单独存储盐:将盐存储在哈希中。 您可以简单地将哈希用作盐,盐将存储在哈希的开头。