区块链技术研习社

区块链记账原理

2018-05-17  本文已影响25人  真的稻城
区块链结构

区块链是由一个个区块构成的有序列表,每一个区块都记录了一系列交易,并且每一个区块都指向前一个区块从而形成一个链条。

区块链有以下几个特征:

区块链具有不可篡改的特性,是由哈希算法保证的。

什么是哈希算法/Hash:

MD5加密结果如下:

MD5("version1") = "966634ebf2fc135707d6753692bf4b1e";
MD5("version2") = "2e0e95285f08a07dea17e7ee111b21c8";

安全哈希算法的特点:

  1. 通过输入可以很容易的计算输出
  2. 通过输出无法反推输入,只能暴力穷举
  1. 如果X 不等于 y,而H(x) = H(y),则发生了碰撞。
  2. 因为输入数据的长度是不固定的,所以输入数据是一个无限集合,而输出数据的长度是固定的,所以是一个有限的集合。这样就必定会出现不同的输入导致相同的输出。当无限集合映射到有限集合时必定会出现碰撞。碰撞的概率和集合的大小有关,输出的hash位数越多,集合就越大,碰撞的概率就越低。

哈希算法的作用:
假设我们相信一个安全的哈希算法:如果H(x) = H(y),则x = y

常用的哈希算法:

算法 输出长度
MD5 128bit : 16bytes
RipeMD160 160bit : 20bytes
SHA-1 160bit : 20bytes
SHA-256 256bit : 32bytes
SHA-512 512bit : 64bytes

比特币使用两种哈希算法:

  1. hash256 = sha256(sha256(data))
  1. hash160 = ripemd160(sha256(data)) 区块头结构图.png

    Merkle Hash:记录了本区块所以的Hash。

假设这个区块有5笔交易,首先,对每一笔交易进行第一hash,也就是2次SHA-256的运算,得到5个哈希值,也就是a1、a2、a3、a4、a5,这五个哈希值也可以看做是数据,将a1和a2拼起来、a3和a4拼起来,再计算出2个哈希值b1和b2。那a5怎么办呢?答案是将a5复制一份在与a5拼起来进行哈希计算得到b3;继续将b1和b2拼起来进行哈希运算得到c1,同样的b3会被复制一份再与b3拼起来进行哈希运算得到c2;最后将c1和c2拼起来进行哈希运算得到最终的哈希值,这个哈希值就是Merkle Hash。

从Merkle Hash的计算方法可以得出结论:修改任意一笔交易,哪怕是一个字节,或者交换两个交易的顺序,都会导致Merkle Hash验证失败,也就会导致这个区块本身是无效的。所以Merkle Hash记录在头部,它的作用就是保证交易记录永远不能够被修改。

区块本身用Block Hash来标识:Block Hash是区块唯一标识。一个区块的hash并没有记录在区块头部,而是通过计算区块的hash得到的。

区块的Prev Hash记录了上一个区块的Hash,这样就可以通过Prev Hash追踪到上一个区块,由于下一个区块的Prev Hash又会指向当前区块,这样每一个区块的Prev Hash都指向上一个区块,这些区块串起来就形成了区块链。如果一个攻击者恶意攻击了某一个区块的交易记录,那么这个区块的Merkle Hash验证就不会通过,所以攻击者只能重新计算Merkle Hash,然后把区块头的Merkle Hash也修改了,但是这个区块本身的Hash已经改变,那么下一个区块指向该区块的链接也断掉了。由于比特币区块的hash必须满足一定的难度值,所以攻击者只能把后面所以区块全部重新计算,并且伪造出来,才能修改整个区块链。

修改一个区块的成本已经非常高了,如果要修改整个区块链,那么其成本非常非常的高昂。在比特币网络中,伪造区块链需要拥有超过51%的全网算力。所以比特币网络运行了6年,从来没有被攻破过。

上一篇下一篇

猜你喜欢

热点阅读