以太坊的加密哈希函数 - Keccak-256

以太坊在许多地方使用_Keccak-256_加密哈希函数。Keccak-256被设计为于2007年举行的SHA-3密码哈希函数竞赛的候选者。Keccak是获胜的算法,在2015年被标准化为 FIPS(联邦信息处理标准)202。

然而,在以太坊开发期间,NIST标准化工作正在完成。在标准过程完成后,NIST调整了Keccak的一些参数,据称可以提高效率。这与英雄告密者爱德华斯诺登透露的文件暗示NIST可能受到国家安全局的不当影响同时发生,故意削弱Dual_EC_DRBG随机数生成器标准,有效地在标准随机数生成器中放置一个后门。这场争论的结果是对所提议修改的反对以及SHA-3标准化的严重拖延。当时,以太坊基金会决定实施最初的Keccak算法。

Warning

虽然你可能在Ethereum文档和代码中看到“SHA3”,但很多(如果不是全部)这些实例实际上是指Keccak-256,而不是最终确定的FIPS-202 SHA-3标准。实现差异很小,与填充参数有关,但它们的重要性在于Keccak-256在给定相同输入的情况下产生与FIPS-202 SHA-3不同的哈希输出。

由于Ethereum中使用的哈希函数(Keccak-256)与最终标准(FIP-202 SHA-3)之间的差异造成了混淆,因此正在努力将代码中所有的 sha3 的所有实例,操作码和库重新命名为 keccak256。详情请参阅https://github.com/ethereum/EIPs/issues/59[ERC-59]。