区块链技术在密码学中应用最多的就是哈希和非对称加密。那么今天我们就来说说什么是哈希。
举个生活中最简单的例子:身份证号码。无论你是北京人、上海人、男人、女人或者胖子、瘦子,每个人的身份证号码都是18位而且全国唯一。同理,哈希是一种压缩映射,它可以把任意长度的输入变换成固定长度的输出。无论你身高是1米8还是1米6,无论你是超过200斤还是不到100斤,扔到哈希算法中输出的都是固定长度的18位数字。(需要注意,身份证号码生成的规则涉及到户口地区和出生日期,是一种拼凑算法并不是哈希算法)
由于哈希函数是将任意长度的消息压缩到某一固定长度,所以也称为消息摘要函数。
了解完哈希的概念后,我们再了解一个概念:哈希碰撞。所谓碰撞,顾名思义就是莫名其妙地撞到一起去了。正常来说,每个人的身份证号是要求互不相同的,但是把两个不同的人作为输入扔进去得到了两个相同的输出,这就出现了碰撞。从公式上可以简单理解为:假定HASH为一种哈希函数,在x不等于y的情况下出现了HASH(x)=HASH(y),即发生了哈希碰撞。
现存的任何一种哈希算法在数学上都是无法证明不会发生碰撞的,那么唯一能避免发生碰撞的方法就是扩大输出空间,形如:全国身份证号码不再是18位,改成58位。
为什么要避免哈希碰撞?因为在区块链的世界中,任何一笔交易或者账户的地址都是完全依托于哈希算法生成的,其设计目的就是为了保证该交易或者账户地址在全网络的唯一性。无论我这笔转账转了多少钱或转给了多少个人或转给了谁,在账本中是唯一存在的。如果发生了哈希碰撞,试想一下两笔转账都生成了同样的哈希值,那当记账者或者是用户再用这个交易的哈希值来查询该交易时究竟要查到哪个呢?
所以在区块链世界中,哈希是用来保证目标物唯一性的,并且无法避免产生碰撞。唯一能做的是扩大输出空间,降低产生哈希碰撞的几率。
网友评论