在选择哈希函数之前我应该​​等待多长时间?

信息安全 哈希 安全编码
2021-08-23 22:42:11

在使用更新的(希望改进的)哈希函数之前,我应该等待多长时间?例如:

由于 NIST 竞赛期间进行了额外的测试,SHA-3 是否可以使用?

2个回答

在使用更新的(希望改进的)哈希函数之前,我应该等待多长时间?

要问的更好的问题是:“在关闭当前哈希之前我应该​​等待多长时间”。你现在在干嘛?如果您的数据受 MD5 或 SHA1 保护,请切换。请立即切换。如果您已经使用了被认为是完整的东西,那么您没有理由“升级”。

加密的一般规则是假设一切最终都会被破坏,因此选择当时不知道会被破坏的东西,并制定计划,如果攻击确实发生,则尽快将数据切换到新算法发表。

在撰写本文时,以下都是完全可以接受的、未知被破坏的散列函数/密钥派生函数

  • 布莱克, SHA2, SHA3, ... , bcrypt, scrypt, PBKDF2, argon2, ...

选择最适合您的应用的一种。


由于 NIST 竞赛期间进行了额外的测试,SHA-3 是否可以使用?

如果 NIST 已经对其进行了标准化(他们在FIPS-202中有),那么它就可以使用了!

正如@RoryAlsop 所说,请注意,如果您需要您的数据与多个软件兼容,那么请注意兼容性问题;仅仅因为 SHA3 已经标准化了两年,并不意味着它已被广泛采用。


最后一点,从字里行间看,您似乎暗示 SHA3 是“一种更新的(希望改进的)散列函数”。我想纠正这一点。

虽然它较新,但并不比 SHA2“更好”,事实上 SHA3 提供与 SHA2 完全相同的安全级别。NIST 发起 SHA3 竞赛并不是因为他们想在 SHA2 上“改进”,而是因为他们对“一个篮子里的所有鸡蛋”只有一种经过批准的哈希算法的性质感到不舒服。这并不是说 SHA2 有任何问题,但如果确实出现问题,他们希望准备好迁移路径。


SHA3​​ 用于密码散列。

馊主意。SHA3​​ 非常适合文件散列(因为它很快),但实际上将它用于密码散列会被认为是一个弱点(因为它很快)。

参见NIST SP-800-63b

合适的密钥导出函数的示例包括基于密码的密钥导出函数 2 (PBKDF2) [SP 800-132] 和气球 [BALLOON]。应该使用内存硬函数,因为它会增加攻击的成本。

SHA3​​ 被设计为高效,它既不慢(时间硬)也不大(内存硬)。

PBKDF2Balloon是围绕标准散列函数的方案,分别使其成为时间难/内存难的方案。因此,如果您只想在嵌入式硬件设备中支持一种哈希原语,您可以将 PBKDF2 / Balloon 包裹在 SHA3 周围,并且仍然具有 FIPS 认证的加密,但请不要在密码上使用裸 SHA3。

通常,一旦一项功能被批准作为现有功能的替代品,就值得研究如何迁移,以便一旦发现弱点,您就可以进行迁移。

开发新功能以便有替代品 - 因为在旧功能中会发现弱点是给定的。

所以这不是等待新功能进行额外测试的情况(尽管显然已经发生了很多测试,例如 NIST 的批准) - 这是等待有需要的情况。