区块链记账原理

区块链:

-区块链就是一个不断增长的全网总账本

-每个完全节点都拥有完整的区块链

-节点总是信任最长的区块链

-伪造区块链需要拥有超过51%的全网算力

区块链为什么不可篡改?

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


如果我们观察一个区块,就会发现每个区块都有一个唯一的哈希标识(区块哈希);同时区块通过记录上一个区块的哈希,来指向上一个区块;

Merkle Hash用来确保该交易的所有交易记录无法被篡改;

区块的主要数据就是一系列交易,第一条交易是Conbase交易(矿工的挖矿奖励),后面的交易都是用户的交易。

区块链的不可篡改特性是怎么保证的?

是通过哈希算法(又称散列算法)

  -哈希算法是一个单向函数:h = H(x)

  -它把任意长度的输入数据转化为固定长度的输出

例如对“morning”和“bitcoin”进行某种哈希运算,得到的结果是固定长度的数字(通常用16进制表示哈希的输出)


哈希算法的特点:

       --单项函数:

通过输入可以很容易地计算输出

通过输出无法反推输入,只能暴力穷举

       --碰撞率低:

如果x ≠ y,而H(x) = H(y),则发生碰撞(输入数据不同,却计算出相同的哈希值)


因为输入数据的长度是不固定的,所以输入的数据是一个无限大的集合,而输出数据的长度是固定的,所以输出数据是一个有限的集合。把一个无限集合中的每一个元素变成到一个有限的集合中,就必然存在某些不同的输入好得到相同的输出。

      --输出无规律

输入数据任意一个bit的改动,会导致输出完全不同

哈希算法的作用:

假设我们相信一个安全的哈希算法:如果H(x)=H(y),则x = y,如果两个文件或数据的hash相同,说明文件相同,没有被改动过。

比特币使用哈希算法来保证所有交易的不可篡改,就是计算并且记录交易的哈希,如果交易被篡改那么哈希验证将不能通过,说明这个区块是无效的。

常用的哈希算法:


比特币使用的哈希算法有两种:SHA-256和RipeMD160


Merkle Hash:本区块的交易的hash

Merkle Hash:本区块的交易的hash

Merkle Hash字段,他记录了本区块所有交易的Merkle Hash。

Merkle Hash是一系列数据的哈希,通过一个简单算法,变成一个汇总的哈希


如果交易的数量不恰好是4个,如只有三个时,三笔交易计算出a1,a2,a3,a1和a2可计算出b1,a3和谁组合计算?没关系再把a3复制一份即可,a3和a3计算出b2。总之,在每层的计算中,如果存在单数,就把最后一份数据复制在计算。

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

区块本身用Block Hash来标识,block hash并没有记录在区块头部,而是计算区块头部所记录的所有哈希得到的。


Block Hash 区块唯一标示

区块头部的Prev Hash记录了上一个区块的哈希,这样就可以追踪到上一个区块,这样每个prev hash都指向上一个区块,这样串起来就形成了区块链。

如果一个攻击者修改了区块中的某个交易,这样这个区块的Merkle hash就不会验证通过,所以攻击者只能重新计算和修改区块头部的Merkle hash,这时候区块本身的hash就变了,所以下一个区块指向它的链接就断掉了,由于比特币区块的哈希值要满足一个难度值,因此攻击者必须重新计算这个区块的哈希,然后把后续所有区块全部重新计算并且伪造出来,才能伪造整个区块链。

修改一个区块的成本就已经非常非常高了,伪造区块链需要拥有超过51%以上的全网算力才行,所以修改区块链的难度是非常非常大的,并且区块链在不断的增长,修改它的难度会随着时间的推移而不断的增加。

得出结论:

--区块链依靠安全的哈希算法保证所有区块数据不可更改

--工作量证明机制保证修改区块链的难度非常巨大从而无法实现

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 在聊区块链记账原理之前我们先来了解几个知识点,随后再慢慢说明: 区块链就是一个不断增长的全网总账本 每个完全节点都...
    Origheart阅读 7,918评论 0 1
  • 参加一次青海湖的轮滑比赛 去日本看樱花 跑一次马拉松 跳伞一次
    想你itiswritten阅读 1,189评论 0 0