Bcrypt 用于哈希还是加密?有点混淆。

26

我一直在研究关于bcrypt(应用程序角度)的内容,考虑在我的站点上使用它来存储密码。

从我阅读的一些资料中,有两种建议:

  • 例如1:Bcrypt是一个跨平台的文件加密实用程序,来自bcrypt
  • 例如2:bcrypt是一种自适应密码哈希算法,使用Blowfish密钥安排,而不是对称加密算法。来自如何安全地存储密码
  • bcrypt是由Niels Provos和David Mazières设计的用于密码的自适应加密哈希函数,基于Blowfish密码。来自bcrypt维基

Bcrypt到底是什么?


Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许Cryptography Stack ExchangeInformation Security Stack Exchange更适合您提出问题。 - jww
1
@jww,五年过去了,这个问题仍未被标记为离题。 - Naveen DA
3个回答

26

那么,您的意思是说当我使用bcrypt存储密码时,我将使用“自适应哈希算法”? - ThinkingMonkey
@ThinkingMonkey。是的,只要你选择正确的那个。我在我的回答中添加了(你的)链接,希望能更清楚地表明区别。 - PaulG
不错。实际上我有问题中提到的相同链接。 :) - ThinkingMonkey

11

Bcrypt加密软件使用Bruce Schneier于1993年设计的Blowfish算法。[1]

Bcrypt哈希函数只是一个哈希函数。它并不执行加密,而是进行哈希处理。它基于Blowfish密码,并被认为是一种好东西,因为您可以随着时间的推移使其变慢

维基百科解释说:

这与标准的Blowfish密钥调度在密码学上没有显着差异,但重新钥匙轮数是可配置的;因此,哈希处理可以任意变慢,有助于防止针对哈希或盐的暴力攻击。

关于在网站上存储密码,应该先对密码进行加密,然后再进行哈希处理。

只有在使用某些加密算法(例如Blowfish,Rijndael / AES)对密码进行加密之后,才应使用bcrypt对加密后的密码进行哈希处理,并存储密码哈希值

有关实现密码安全的更多细节,请参见此问题的顶部答案。


2
他的名字是“Schneier”,不是“Schneider”。 - Martin Ellis
11
Nitpick一下,哈希之前不需要加密。 - PaulG
1
@PaulG 如果你加密的话,它会增加额外的安全级别,并且被认为是良好的实践,只要你将秘钥存储在不同的服务器上或者如果这太昂贵了,在远程服务器的本地文件系统中以文本文件的形式存储。 - Charles Robertson
1
@PaulG 这个链接详细解释了盐哈希的最佳实践以及使用秘密密钥加密盐哈希的方法。BCrypt只是一种更方便的方式来进行盐哈希,因为盐不需要存储在数据库中:https://crackstation.net/hashing-security.htm - Charles Robertson
2
@CharlesRobertson - 为什么在哈希之前加密密码会使其更安全?为了使计算更加昂贵吗?Bcrypt已经可以在这方面进行调整。这将使要哈希的值更长,但使用更长的盐也可以实现相同的效果。我读了你的链接,但我没有看到提到这个过程。 - Ben Hull
这是一个错误的观念,即模糊不清不能创造更安全的情况。问问任何将服务放在非标准端口上的管理员。99.9%的攻击者无法打扰检查其他端口,因为这需要太多时间。 - Robert Talada

3

bcrypt是一种密码键导出函数。

简单来说,哈希(由bcrypt使用)和加密的区别如下:

1)加密数据可以通过私钥解密。 2)哈希是一种单向加密,如果您对纯文本进行哈希,则无法逆转,因此更加安全。唯一的确保方法是重新哈希该纯文本,并将其与以前哈希的数据进行比较,以确定相等性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接