首页
下载应用
提交文章
关于我们
🔥 热搜 🔥
1
百度
2
今日热点
3
微信公众平台
4
贴吧
5
opgg
6
dnf私服
7
百度贴吧
8
知乎
9
dnf公益服
10
百度傻逼
分类
社会
娱乐
国际
人权
科技
经济
其它
首页
下载应用
提交文章
关于我们
🔥
热搜
🔥
1
上海
2
习近平
3
新疆
4
鄂州父女瓜
5
乌鲁木齐
6
疫情
7
H工口小学生赛高
8
习明泽
9
芊川一笑图包
10
印尼排华
分类
社会
娱乐
国际
人权
科技
经济
其它
李尚福、魏凤和双双被拿下,与美国一份报告是否有关?
有的人走了,却永远活着
圈内疯传某谣言
不要放过这些人渣
最大“独立日烟花秀”存恐怖威胁 纽约市警全力部署
生成图片,分享到微信朋友圈
2023年1月30日
2023年2月21日
2023年2月22日
2023年2月22日
2023年2月23日
2023年2月23日
2023年2月24日
2023年2月24日
2023年2月25日
2023年2月25日
2023年2月26日
2023年2月26日
2023年2月27日
2023年2月27日
2023年2月28日
查看原文
其他
【连载】比特币史话 | 哈希(4)
Original
刘教链
刘教链
2023-01-30
收录于合集 #史话
102个
(V神,以太坊创始人。图片来源于网络)
本篇看点:
中本聪为何在比特币中使用双层哈希?又一次料事如神?V神的以太坊又用了怎样的哈希函数?
前情回顾:
【连载】比特币史话 | 量子霸权(3)
【连载】比特币史话 | 哈希(1)
【连载】比特币史话 | 哈希(2)
【连载】比特币史话 | 哈希(3)
正文:
20世纪80年代,欧盟启动了“RACE(欧洲先进通信技术研发)计划”,并于1992年启动了“RIPE项目”。其中项目名“RIPE”的具体含义是“RACE完整性原语求值”(RACE Integrity Primitives Evaluation)。从这个名字我们就能读出“哈希”的味道,因为对给定内容求哈希值这一计算机指令(术语叫“原语”)正好可以用来验证内容的完整性,也就是没有被篡改。如果发生了篡改,即使再微小,也会导致哈希值的剧烈变化,从而很容易被发现。在“RIPE项目”的执行过程中,一个哈希算法被设计出来了,它的名字叫做RIPEMD(RIPE消息摘要, RIPE Message Digest)。[1]
[公众号:刘教链]
RIPEMD家族也有一系列所求摘要长度不等的哈希函数。其中摘要长度小于160比特的,被认为安全性不够,而摘要长度大于160比特的,其实际安全强度也就只有160比特,超出的部分只是为了凑够长度。所以,就余下一个RIPEMD-160不长不短刚刚好。根据我们对哈希算法命名的了解,RIPEMD-160计算出来的哈希值长度为160比特币,这个长度和SHA-1是一样的,都比SHA-256要短。中本聪说,“为了让比特币地址更短,它们是公钥的哈希,而不是(椭圆曲线电子签名算法的)公钥”[2]。事实上,中本聪不是用了一个哈希函数,而是两个。他先对公钥做了SHA-256哈希,然后把结果又做了一次RIPEMD-160哈希,得到了比特币地址。这种双层哈希的设计,是中本聪的一个独特手法。在比特币区块挖矿中,也是这样的双层哈希结构,只不过换成了两层SHA-256。[2]
[公众号:刘教链]
中本聪没有解释过如此设计的原因。今天的我们已经知道,MD5、SHA-1、SHA-2这一系列的哈希算法,当然也就包括中本聪选用的SHA-256哈希算法,由于都使用了一种称之为“默克尔-丹加德”构造(Merkle–Damgård construction)的方法,而对一种称之为“长度扩展攻击”(length extension attack)的攻击方法敏感[4]。通过使用这种攻击方法,攻击者可以在无需知道原文、只需知道原文长度的情况下,向原文后附加攻击文本并计算出正确的哈希值。今天我们能够查到的最早有关该攻击方法的文献,只能追溯到2012年。至于中本聪在2008年前后设计比特币时,是如何觉察到单层哈希可能会对某种特别的攻击方法敏感,从而在使用时小心翼翼的加了一层,形成双层哈希设计,我们就不得而知了。也许,他是受到了NIST(美国国家标准技术局)在2006年举办的哈希函数设计大赛的启发吗?
[公众号:刘教链]
2006年,NIST举办了一场后来旷日持久的哈希函数设计大赛,赛题是设计一种不使用“默克尔-丹加德”构造的崭新的哈希函数,称之为SHA-3。彼时,SHA-3的设计目标并非为了取代SHA-2,因为后者并未被攻破。但是因为MD5和SHA-1在2005年被王小云教授团队成功攻破了,NIST感觉需要未雨绸缪,于是希望提早着手,为SHA-2准备“备胎”。这个大赛,可以称之为SHA-2的“备胎计划”。[5]
[公众号:刘教链]
这个“备胎计划”的推进一波三折。2010年12月,一个称之为keccak-256的哈希函数最终胜出。NIST希望在标准化时对其设计进行微调和修订,却被2013年突发的“棱镜门”事件和斯诺登的“吹哨”打乱了节奏。公众失去了对NIST的信任,对NIST修订哈希函数的提案进行了强烈抵制。就这样一直僵持到2015年,NIST才最终完成了修订并发布了FIPS 202标准。另外一个由俄裔加拿大程序员维塔利克·布特林(Vitalik Buterin,人称“V神”,时年仅19岁)于2013年发起的知名公链项目,以太坊(Ethereum),大量使用了keccak-256哈希函数,但是,他们使用的是重写的原始版keccak算法,而不是NIST的修订版算法。由于keccak算法没有使用“默克尔-丹加德”构造,而是使用了另外一种称之为“海绵构造”(sponge construction)的新方法,所以对“长度扩展攻击”免疫。也因为此,以太坊的地址就是单层哈希结构,只对公钥做了一次keccak-256哈希(并截取了后20位以缩短长度)。[6]
[公众号:刘教链]
【未完待续】(公众号:刘教链)
您可能也对以下帖子感兴趣
{{{title}}}
文章有问题?点此查看未经处理的缓存