一分钟读书俱乐部:《区块链技术驱动金融》系列(二)哈希函数的碰撞阻力特性(1)

原文精选:加密的哈希函数的第一个特性是它要具有碰撞阻力。这里的碰撞指对于两个不同的输入,产生相同的输出。如果对于哈希函数H(·),没有人能够找到碰撞,我们则称该函数具有碰撞阻力(见图1.1)。即:


一分钟读书俱乐部:《区块链技术驱动金融》系列(二)哈希函数的碰撞阻力特性(1)_第1张图片

碰撞阻力 如果无法找到两个值,x和y,x≠y,而H(x)=H(y),则称哈希函数H具有碰撞阻力。


注意,我们说没人能找到碰撞,并不表示不存在碰撞。事实上,通过简单的计数论证(counting argument),我们可以证明碰撞的确存在。哈希函数的输入空间包含所有长度的任意字符串,但输出空间则只包含特定固定长度的字符串。因为输入空间比输出空间大(输入空间是无限的,而输出空间是有限的),一定会有输入字符串映射到相同的输出字符串。实际上,根据鸽巢原理(Pigeonhole Principle),我们可以得出,必然会有大量可能的输入被映射到任意特定输出(见图1.2)。


一分钟读书俱乐部:《区块链技术驱动金融》系列(二)哈希函数的碰撞阻力特性(1)_第2张图片


读书笔记:1,碰撞阻力的碰撞是指对于两个不同的输入,产生相同的输出(图1所示)。

2,如果找不到两个值能产生相同输出,则称哈希函数H具有碰撞阻力。

3,没人能找到碰撞,并不表示不存在碰撞。

4,输入的数量超过输出,则肯定有一个输出对应多个输入(图2所示)。


原文精选:而更糟糕的是,对于加密的哈希函数,我们虽然说应该找不到碰撞,但有些方法是能保证找到碰撞的。考虑以下对应于一个256位输出大小的哈希函数,选择2256+1个不同数值,计算每个数的哈希值,并检查是否有两个相等的输出。因为我们这里选择的输入多于输出,因此在应用哈希函数时,一些数对必将产生碰撞。


使用上述方法一定能找到碰撞。但如果我们随机性地选择输入,并计算哈希值,我们在检验第2256+1个输入之前便很可能找到碰撞。实际上,如果我们随机选择2130+1个输入值,找到至少两个等同哈希值的概率为99.8%。仅仅通过检验可能输出数量的平方根次数,便大体能找到碰撞,这一事实在概率学中被称为是生日悖论(birthday paradox)。


读书笔记:1,加密的哈希函数是有方法找到碰撞的

2,计算每个数的哈希值,并检查是否有两个相等的输出,那么在应用哈希函数时

一些数对必将产生碰撞。

3,生日悖论(birthday paradox):指如果一个房间里有23个或23个以上的人,

那么至少有两个人的生日相同的概率要大于50%。


一年有365天,但是只要有23个以上的人,那么这里面的23个人同一天出生的概率已经达到50.72%,数学是不是很神奇。


原文精选:这个碰撞检测算法对每个哈希函数都有效,但是它的问题是其计算需要花很长很长时间才能完成。对于一个256位输出的哈希函数来说,最坏的情况是你需要进行2256+1次哈希函数计算,平均次数为2128次,这简直是一个天文数字——如果一台电脑每秒计算10000个哈希值,计算2128个哈希值,需要花1027多年时间! 换个角度,我们可以说,如果人类制造的每台电脑在整个宇宙起源时便开始计算,到目前为止,它们找到碰撞的概率仍然无穷小,比下两秒钟地球将被大陨石摧毁的概率还要小得多。


因此,为了寻找一个任意的哈希函数的碰撞,我们只是有了一个一般,但并不实用的算法。一个更艰涩的问题是:有没有其他的方法,可以用于对于某一特定哈希函数找到碰撞? 也就是说,虽然一般的碰撞测试算法不适用,但仍可能有其他的算法,可以有效地找到某个哈希函数的碰撞。


读书笔记:1,用碰撞检测算法找到碰撞的概率,比下一秒钟地球将毁灭的概率还要小得多。

2,会有其它算法,来有效找到某个哈希函数的碰撞吗?


一叶之秋带你一分钟速读经典书籍,每天一分钟(只需阅读读书笔记部分),天天获新知


一叶之秋——非著名股票分析师

CCTV证券资讯频道特邀分析师

币乎,币问内测作者

金色财经,币世界专栏作家

《区块链编年史》 《区块链重塑未来》系列作者

量价时空战法体系,一分钟读书俱乐部创始人

公众号:区块链项目评测

007er

你可能感兴趣的:(一分钟读书俱乐部:《区块链技术驱动金融》系列(二)哈希函数的碰撞阻力特性(1))