首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Bcrypt SHA-256实现

Bcrypt SHA-256实现
EN

Security用户
提问于 2013-12-19 14:30:52
回答 1查看 2.1K关注 0票数 0

我需要bcrypt来创建加密密钥和身份验证散列,但是来自密码的输出的熵必须大于256位(这显然不能通过使用SHA256哈希196位来实现)。

在KDF中是否有使用SHA256的bcrypt实现?如果不是,请自己来帮我做。

斯克里普更受欢迎,但android手机没有那么多内存。有没有在氪星中使用低内存的问题?)

EN

回答 1

Security用户

发布于 2013-12-19 15:01:22

通过构造,bcrypt是它自己的函数,并且不使用像SHA-1或SHA-256这样的散列函数。您可能会将其与PBKDF2混淆。

你对“熵”的要求充其量只能被严重误导:

  • 只要你的攻击者不能将整个银河系的质量转化为能量来运行一些庞大的计算,256比特的熵就是“全杀之母”。对于任何不涉及与敌对的外星实体战斗的实际情况,128比特就足够了。
  • 你不会得到256位熵,甚至128位。您说"bcrypt":因此,您正在处理一个密码。一个可以被人类选择和记住的密码不能达到那么大的熵。对于典型的用户来说,如果达到32位熵,你可以认为自己是幸运的;大多数人甚至不能做到这一点。不管您做什么,也不管您抛出了多少散列函数,在输出上永远不会得到比开始时更大的熵,熵是“攻击者不知道的东西”,即密码。(这里最重要的一点是熵并不等于长度。)

您真正想要的是一个密码处理函数,它将密码扩展到您所设想的任何密码目的所需的“密钥位”。例如,您需要256位,因为您需要基于密码的加密,对称加密本身需要128位,而MAC需要128位。这分为两个步骤:

  1. 使用密码哈希函数散列密码,该函数包含密码保护特有的功能,这是解决密码固有弱点的方法。即盐和可配置的慢度。那样就没问题了。详情请参见这个答案
  2. 使用确定性密钥推导函数扩展密码散列。如果您只需要256位,那么只要使用SHA-256散列密码就可以了:只要您不需要超过256位的输出,SHA-256就像KDF一样工作得很好。对于任意长的输出,您可能需要一些更复杂的东西;SSL/TLS的“伪随机函数”是一个深入研究的例子。注意,典型的bcrypt实现输出一个字符串,该字符串编码192位输出,但也编码salt和其他参数;对于键扩展,您只想处理192位输出。

PBKDF2是一个“基于密码的密钥派生函数”(因此名),它结合了这两个操作。

票数 6
EN
页面原文内容由Security提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://security.stackexchange.com/questions/47339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档