今天聊一聊区块链、比特币的核心的一个技术,哈希算法,以及它的防碰撞性质。
这算法的特点是它就像是一个方程组。而方程组的解是一个一个试出来。这种方程非常的复杂,比如说你知道了x,你把这个x带进去就可以求出y。但是如果你知道这个y,却不能够反着求解出x来。当然实际的算法比这个要复杂很多。
这个算法就是说不管你输的只有多么大,也可以是无穷多。他的输出值呢就是一段固定长度的数字。而且他有一个很核心的性质,那就是防止碰撞。
啥意思呢?就是说很少会出现你输入两个不一样的数字,最后获得了一个一样的数字。尽管这种情况在逻辑上是可能的。因为你的输入要远远大于你的输出可能性。
比如说你在输入这边儿打一个,“你们好”。然后你又输入一个,“你们好吗”。这俩出来的哈希值就应该是不一样的。或者说你想人为制造一个一样的哈希值,结果是基本不可能的。
那这种算法特性能不能被证明出来?答案是不能。这个东西只能这样试出来,你无法进行数学证明。所以其实比较搞笑的是这个性质是大家试出来的,或者是靠经验总结出来,也就是说我就说他对,你没办法证明他不对。但是这种防止碰撞的特性却有很大的用处。
具体来说,他可以看你的数据是不是被人给改了。
比如说吧,你写了一篇非常好的文章。然后呢你把它存到你朋友那儿去。或者说你存到网络上去。但是呢这个文章字数特别多,有可能就被人给改了。那你很长时间以后取回来怎么判断是不是被人给改了?
很简单,你提前把文章的所有内容进行一个哈希运算得到一个值。等你再把它取回来的时候呢,你再把这个内容再进行哈希运算,看和原来一样不。如果一样那就没改,如果不一样,那说明被改了。注意,哪怕他就改了一点点,改了一个逗号,一个句号。那出来哈西值也是不一样的,从理论上来说是这样,神奇不神奇?
那这个性质跟区块链又有什么关系?这个意义就大了。我记得我之前写过,比如说你在区块头保存的这个哈希值,实际上是把上一个区块的内容与上一个区块头的哈希值进行一起运算,运算出来的。
这就相当于第二个区块保存了第一个区块的基因。第三个区块保存了第二个区块的基因。同时第三个区块儿也包含了第一个圈儿的基因。这就是所谓区块链的链字的含义。这就加强了区块链的不可篡改性。
因为你如果要篡改某一个区块里的内容,或者整条区块链上的内容,你就需要抢到这个区块的出块权。抢到之后呢你还得改上一个,再抢到上一个的出块权,然后再抢到上一个的上一个出块儿权。如果你的算力没有那么大,那相当于你就做不到。所以比特币的系统中有一个规定,那就是六个区块儿就基本可以确认信息不可篡改。
这就是哈希函数的所谓防止碰撞的特性。当然他还有别的性质,我们后面再慢慢说。我还是希望大家能一点儿一点儿的理解他的底层的原理,逻辑与技术,而不是天天去争论他是不是骗局。
原创文章,发布者:首码对接项目,转载请注明出处:https://www.biyungu.com/12500.html