科普 | 哈希函数的过去、现在与未来( 二 )


科普 | 哈希函数的过去、现在与未来

文章插图
NSA (没错,就是美国国家安全保障局)是哈希算法标准的先驱 。安全哈希算法(,SHA1)是最早提出的标准,将输出值的长度固定在 160 位 。遗憾的是,SHA1 只是在 MD5 的基础上增加了输出值长度、单向操作的次数和复杂度,但是并没有作出能够抵御更强大机器攻击的根本性改进 。
我们如何才能做得更好?
SHA3 兴起
在 2006 年,美国国家标准技术研究所(NIST)举办了一场竞赛,旨在找到一个本质上不同于 SHA2 的替代标准 。因此,SHA3 应运而生,它是哈希算法的一种方案 。
虽然 SHA 3 在名称上与 SHA1 和 SHA2 一脉相承,但是在本质上差异很大,因为它采用了一种名为海绵结构( )的机制 。该机制使用随机排列来吸收并输出数据,同时为将来用于哈希算法的输入值提供随机性 。
科普 | 哈希函数的过去、现在与未来

文章插图
-海绵结构是如何进行输入操作的 -
SHA3 的内部状态相较于输出值拥有更多信息,突破了以往算法的局限性 。NIST 于 2015 年正式认可了 SHA3 标准 。
哈希计算和工作量证明
就整合进区块链协议的哈希算法而言,比较早的比特币选择了,而以太坊采用了改进后的 SHA3 ()作为工作量证明算法 。对于采用工作量证明的区块链来说,选择哈希函数的一大重要标准是哈希运算效率 。
使用一类名为专用集成电路(ASIC)的硬件,我们可以大幅提高比特币算法的哈希运算的效率 。有很多文章已经阐述了矿池是如何利用 ASIC 的,以及 ASIC 是如何让协议趋向于计算中心化的 。也就是说,工作量证明会激励计算效率较高的机器聚集成矿池,从而形成较大的哈希算力(算力大小的衡量标准就是矿机在每个时间间隔内可以完成多少次哈希运算) 。
以太坊选择的是改进后的 SHA3 算法(叫做) 。此外,以太坊的工作量证明算法 - 被设计成了内存密集型模式,计算硬件需要加大内存才能提高计算效率 。
科普 | 哈希函数的过去、现在与未来

文章插图
为什么比特币采用双重?
有趣的是,比特币协议(的工作量证明)需要重复运行两遍算法 。请注意,这不是为了抵御生日攻击,毕竟在 hash(x) = hash(y) 的情况下,hash(hash(x)) = hash(hash(y))。双重旨在抵御长度扩展攻击 。
从本质上来说,所谓的长度扩展攻击,指的是如果恶意攻击者知道了某个哈希输入的长度,就可以在哈希值上添加一个秘密的字符串、欺骗哈希函数从其内部状态的一个特定部分开始计算 。作为 SHA2 算法家族的一员,也存在这一缺陷 。因此,比特币采取执行两遍哈希计算的方式来解决这一缺陷 。
2.0 和 BLAKE
SHA3 并非哈希算法竞赛取得的唯一突破 。虽然最终胜出的是 SHA3,但是 BLAKE 算法紧随其后,位居第二 。对于以太坊 2.0 的分片实现来说,更高效的哈希算法可以说是一项功能性要求,研究团队对此非常重视 。哈希算法是 BLAKE 算法的高度升级版本 。与相比,哈希算法在保持高度安全性的同时,在提升效率方面也进行了深入探索 。
科普 | 哈希函数的过去、现在与未来

文章插图
使用一台现代 CPU 计算的速度比计算快了 3 倍 。
哈希算法的前景展望
这么看来,无论我们做了什么,无非就是(1)增加内部哈希操作的复杂度,或者(2)增加哈希输出值的长度,让攻击者的计算机无法足够快地有效计算出碰撞 。
我们依靠单向操作的原像模糊性来保护网络的安全性 。也就是说,哈希算法的安全性目标是在有无限多可能的冲突的情况下,让找出哈希碰撞的难度尽可能高 。