哈希
在区块链世界里,我们常常听到这样的说法:“哈希一次”。
我们来看看“哈希一次”究竟会发生什么。我们拿30万字的《百年孤独》为例,“哈希一次”就是指通过哈希函数的算法,将这30万字压缩成几个字节的长度,具体长度则取决于不同的哈希算法。
30万字就是输入值,几个字节是输出值,通俗地理解,这种“压缩”的过程就是“哈希一次”,压缩而成的输出值被称为“哈希值”。
“哈希一次”最重要的特征在于不可逆推,也就是你无法通过输出值反推出输入值是什么,这是为什么呢?这个问题就相当于为什么我们无法通过几个字节逆推出压缩以前的《百年孤独》的原文是怎样的。
这是因为在压缩过程中,我们已经损失了《百年孤独》绝大部分的细节,通过短短的几个字节不可能反推出原文是一本什么样的书,甚至无从得知这是不是一本书。这就是不可能通过输出值逆推出输入值的原因。
举个例子,你天天用的手机指纹识别技术就是运用了哈希的原理。
你的指腹上包含了大量皮肤凹凸纹路的信息,可以想象,手机在第一次采集你的指纹时,要完整记录这些信息,显然是一项不可能任务。
所以手机采集指纹时,其实是通过“哈希一次”,将你的海量指纹信息压缩到了比较小的数据单位记录下来,你最终录入手机的指纹相当于压缩之后的哈希值。
通过“哈希一次”,很少的信息量就可以代表你的指纹,因为无法逆推,所以原始的完整信息也可以得到保护。
不过,这种哈希并不是完美的。现实世界中并不存在完全一样的两枚指纹,即使DNA相同的同卵双胞胎,也因为后天环境和发展的不同而使皮肤凹凸纹路不尽相同,每一点“凹凸”都可以视作一种主人专属的身份信息。
但因为哈希算法抛弃了绝大多数指纹的“凹凸”信息没有记录,所以存在着两个人录入手机的指纹ID完全一致的情况。
比如按照Apple公开的说法,指纹ID重合的概率达到了1/50000,也就是说,每50000人中有一个人可以解开你的手机指纹。听起来有点可怕对不对?但因为共有指纹ID的人之间偶然发生关联的概率极低,所以基本还是保证了现在指纹识别技术的可靠性。这种哈希值重合的情况,就被称为“碰撞”。
现在,让我们回到区块链的世界。区块链可以理解成环环相扣的数据链,每一个区块头都记录了上一个区块的摘要信息,也就是上一个区块的哈希值。
只要原始数据稍微改动一点点,得到的哈希值就会完全不同。