繁体   English   中英

存储加密密钥的MD5哈希值安全吗?

[英]Is it safe to store an encryption key's MD5 hash?

这是一个场景:

  • 用户输入密码
  • 使用基于密码的密钥派生算法生成AES密钥(大约需要100毫秒)
  • 生成的密钥的MD5暴露(存储在某处)

暴露生成的密钥的MD5会以某种方式降低其安全性吗? 如果我正确理解:

  • 为了破解密码-您仍然需要通过先用慢速PBKDF从它们生成密钥,应用MD5,然后检查其是否匹配,来蛮力破解密码?

  • 找到冲突的MD5字符串将是无用的,因为该字符串无论如何都不与加密密钥匹配?

这些假设是否正确?有没有办法暴露这样的字符串会影响加密安全性?

您正在描述一个所谓的密钥检查值

“这些假设正确吗?”

是的,但是尽管不能反转MD5,但最好使用更安全的哈希(例如SHA-256或512)(在大多数运行时中,这可能令人惊讶地更快)。 如果需要,可以使用结果的最左N个字节。

“有没有办法暴露这样的字符串会影响加密的安全性?”

好吧,有点 它为攻击者提供了一种方法,可以几乎100%地确定密码/密钥是否正确。 如果您使用密钥进行经过身份验证的加密(多数情况下建议这样做),也是这种情况。 通常,您无需加密所有数据即可让攻击者验证密钥的正确性。

否则,MD5毕竟是单向功能,因此不应公开任何关键位。


笔记:

  • 当然,您以后不希望将密钥用作MD5的输入来加密任何内容。

  • 如果MD5功能本身泄漏了旁通道数据(通常不会泄漏),那么它可能会向攻击者揭示密钥。

  • 使用安全散列创建密钥检查值可能比对全零字节的块进行加密更好,后者是PKCS#11的默认KCV生成方法。

  • 有许多增加安全性的方法:使用HMAC或KBKDF,使用时间常数比较等。但是,通常,哈希是安全的。 我认为,将HMAC-SHA512或什至HKDF-SHA512与特定于应用程序的输入字符串和时间常数进行比较将是菱形标准。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM