首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么密码在被用来加密之前会被散列?

为什么密码在被用来加密之前会被散列?
EN

Security用户
提问于 2018-02-15 10:23:47
回答 4查看 10.1K关注 0票数 54

在阅读一些有关产品安全性的文档时,我发现供应商使用密码的SHA-2加密数据(AES-256),而不是直接使用该密码。

这样做有什么好处吗?

攻击者不会使用这个SHA-2密码密钥破解加密数据,而是耗尽密码密钥空间(如果可行)并尝试其哈希。因此,我能想到的唯一原因是有一个额外的计算步骤(创建哈希)。如果要计算复杂的攻击,我宁愿增加密码熵。

EN

回答 4

Security用户

回答已采纳

发布于 2018-02-15 12:02:19

这听起来像是密钥推导函数(KDF)的原始版本,特别是他们可能会避免使用PBKDF2来重新发明轮子。

您不想直接将密码用作AES密钥的原因有几个。

  1. 分配比特。这里的主要特性是,哈希函数的输出在统计上是均匀分布的。人们倾向于选择不是完全随机的密码,特别是,大多数密码只包含您可以在键盘中键入的字符。当用作加密密钥时,非统计随机密钥可能暴露加密函数中的弱点。
  2. 若要将密钥与加密密钥长度相匹配,请执行以下操作。大多数密码将比加密函数的密钥空间更长或更短。通过散列您的密码,确切的密钥长度将恰好是您的加密函数的输入密钥的大小。虽然派生密钥的熵没有增加,但这避免了如果您只是将密码为零或更糟地截断密码,则可能会暴露加密函数中的弱点。
  3. 若要减慢密钥派生解密速度,请执行以下操作。根据您的描述,该软件只使用单一的SHA256圆,这不是很多。但是,有了正确的基于密码的KDF (如PBKDF2 ),通常有数万或数十万轮的底层哈希函数。这降低了计算密钥的速度,在不增加密码长度的情况下增加了密码的有效强度。
  4. 将用户的纯文本密码保存在内存之外,从而防止在休眠或崩溃转储期间意外地将其转储到磁盘。虽然这不会保护哈希不被用于解密您正在加密的数据,但它将防止密码被重用以解密其他文件(可能使用不同的salt)或在您使用的在线帐户或其他设备上进行尝试。
票数 98
EN

Security用户

发布于 2018-02-15 10:33:00

SHA-256将从任意长度的密码生成256位哈希。从技术上讲,这个散列(就像它的长度一样)可以用作AES-256的一个键。

如果没有更多的上下文,我猜他们采用了最简单的方法来生成256位密钥。

正如您所提到的,这里的弱点是密码,密码的单个SHA-256太便宜,无法防止对密码的暴力攻击。

相反,应该使用基于密码的密钥派生函数(PBKDF)。人们也不应该直接使用密钥,而是使用它来加密使用更好的CSPRNG生成的密钥。

您可以在https://crypto.stackexchange.com/questions/22678/how-secure-is-it-to-use-password-as-aes-key中找到关于这个主题的非常好的讨论。

票数 14
EN

Security用户

发布于 2018-02-15 10:32:47

没有任何背景,就很难回答。这可能只是一种简单的密码扩展机制,也可能是其他一些东西。例如,另一方可能需要解密数据,从而存储必要的密钥。

通过使用散列,它将为原始用户的密码提供一定程度的保护。请注意,不多,但仍然比简单地存储密码本身要好得多。

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

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

复制
相关文章

相似问题

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