文章解释了SHA-3和Keccak之间的差异,指出许多旧代码使用Keccak而非标准SHA-3,并呼吁开发者在使用相关库时明确区分,以避免混淆。
SHA-2 是一种被当前大部分互联网和加密系统(包括 TLS、SSL、SSH、比特币)所使用的哈希函数。SHA-2 于 2001 年发布,为了补充它,NIST 在 2007 年宣布了一场竞赛,以确定 SHA-3。Keccak 团队的提交于 2012 年被宣布为获胜者,自那时起,开发者们开始使用该提交来实现“sha3”(包括以太坊)。然而,2014 年,NIST 对 Keccak 的提交进行了小幅修改,并发布了FIPS 202,该标准于 2015 年 8 月成为官方的SHA-3 标准。因此,有很多自称 sha3 的旧代码并未更新到标准。本文将解释当前“sha3”普遍存在的这种不一致性,并鼓励开发者更加准确地描述 SHA-3 和旧代码。
你应该意识到,旧代码不会产生与 SHA-3 相同的哈希值。当你使用“sha3”库时,你是否知道它是旧代码还是标准的 SHA-3?
一个简单的测试是使用空输入进行 SHA3–256 计算。
根据标准,正确的输出是:
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
许多旧代码是 Keccak-256,它会产生以下输出:
c5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470
这些代码不应自称为 sha3。
让我们尽量避免使用术语 sha3 来指代旧行为。如果你需要描述旧行为,请使用类似 Keccak 的术语,这是其他项目用来减少混淆的术语。让我们使用术语 sha3 来指代与标准一致的行为。
我们希望使用术语 Keccak,因为我们不希望让使用标准 SHA-3 库的开发者感到困惑,为什么他们的 SHA-3 哈希值与由旧行为产生的“sha3”哈希值不匹配。
Keccak 团队的提案在 2007 年赢得了 NIST 的 SHA-3 竞赛。Keccak 这个名字来源于巴厘岛舞蹈 Kecak。[2, 3]
同样,请不要称呼某物为 sha3,除非你已经确认它确实是 SHA-3。如果你只是假设你编程语言中的“标准”sha3 库是 SHA-3,你可能是错误的。例如,在 Javascript 中,名为 sha3 的 NPM 包尚未符合标准。
另一个尚未更新的流行库是CryptoJS。不幸的是,Github 上的自述文件中没有提及,用户必须查看旧网站才能找到“NOTE: I made a mistake when I named this implementation SHA-3. It should be named Keccak.” 因此,任何使用 sha3 的 CryptoJS 的依赖项都使用了最好用类似 Keccak 的术语描述的旧代码。此外,注意在线的 sha3 计算器,因为其中一些尚未更新到 SHA-3。
关于正确的示例,请参见js-sha3。你可以看到 sha3 和旧行为之间的区别,以及其更新的测试。
+ var KECCAK_PADDING = [1, 256, 65536, 16777216];
+ var PADDING = [6, 1536, 393216, 100663296];
NIST 表示“SHA-3 测试正在开发中”,但幸运的是,他们有测试示例并确认空输入的 SHA3–256 是:
a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a
(令人失望的是,NIST 的 SSL 证书已经有近 2 年没有更新了。)
以上是对所有“sha3”库项目的呼吁,明确如果代码不是 SHA-3,以及更新到标准的计划。依赖项目也应考虑澄清其代码库,或更新到符合 SHA-3 的库。
致以太坊社区
以太坊使用与 SHA-3 相同的底层算法,因此受益于其安全性,但其协议使用的算法版本与 FIPS 202 略有不同。以太坊黄皮书特别注明“Keccak-256 哈希函数(根据 SHA-3 竞赛的获胜条目)。”
在我们的互动中,让我们更准确地描述我们所使用的内容。我们不想让使用标准 SHA-3 库的开发者感到困惑,为什么他们的 SHA-3 哈希值与以太坊的哈希值不匹配。当有人告诉我们他们使用“sha3”时,我们不想质疑他们是否真的指的是 SHA-3 还是 Keccak-256 —— 所以让我们同样更加准确地告诉他人。在 Solidity、web3.js、EVM 和文档中,我们应该考虑将“sha3”更名为/别名,如果“keccak”使用不便,也许可以使用“ksha3”等术语。
致所有人
如果你的代码不符合 SHA-3 标准,请明确说明它不是 SHA-3。随着密码学的普及,现在和未来的开发者将会感谢你减少了混淆。
Joseph Chow, ConsenSys
[1] “Warning Alert: Attention, use the wrong hash, lose all your cash!” 原始二战海报,John Parrot 绘
[3] 摘自“SHA3 is over. Long live SHA3!” http://blog.cryptographyengineering.com/2012/10/long-live-sha3.html
- 原文链接: medium.com/@Consensys/ar...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!