比特币基于的是区块链,而区块链是运行在因特网上的,而且涉及金融,就可能存在有人作恶的情况,而普通的拜占庭的问题,PBFT算法可能防止坏人作恶,但是这个防备有上限的

如果坏人不断的增加节点,打破了 (n-1)/3的限制

区块链如何改进的呢?就是POW算法

POW算法,简称Proof Of Work,可以认为是一份证明,证明做过一定量的工作,比如,就是大学的毕业证书,证明通过4年努力完成了相关课程学习

简单来说,就是做一定有难度的工作,得到一个结果,验证方检查客户端是否做了对应的工作

图片

请求方做了一些运算,解决了某些问题,然后将运算结果发送给验证

请求方和验证方是不对称的,就是请求方需要大量运算,而验证方只需要简单的手段就能验证

如何进行证明自己做了一定量的工作呢?

通过哈希运算,区域链通过哈希运算,然后利用这个计算后的结果,证明自己做过了相关工作,

哈希运算就是一种散列函数,我们可以通过对任意长度的字符串进行SHA256哈希运算,得到一个32字节的哈希值

那么我们就利用这个哈希值来证明工作量

基于一个基本的字符,并且在字符串后面添加一个整数,比如 hello0000,计算后得到一个哈希值,如果得到的哈希值为0000开头的,就验证通过,不通过,就将后面的整数不断的加一,进行一个一个的运算

我们就通过35024次计算,得到了前面为0的哈希值

“geektime0” => 01f28c5df06ef0a575fd0e529be9a6f73b1290794762de014ec84182081e118e

“geektime1” => a2567c06fdb5775cb1e3ce17b72754cf146fcc6da75c8f1d87d7ab6a1b8c4523

“geektime35022” =>

8afc85049a9e92fe0b6c98b02b27c09fb869fbfe273d0ab84ad8c5ac17b8627e

“geektime35023” =>

0000ec5927ba10ea45a6822dcc205050ae74ae1ad2d9d41e978e1ec9762dc404

工作量证明就是通过哈希运算,经过一定时间的计算,得到符合条件的哈希值

这个规则,不是固定的,实际场景中,根据场景特点,指定不同的规则,比如分别找到前3位为0和前5位为0的哈希值

区域链如何融合的POW算法的?

区域链是通过SHA256来执行哈希运算,POW基于区块链中的区块信息,运算的

区块链中的区块,区块头主要是由上一个区块的哈希值,区块体的哈希值,和随机数组成的

区块提,区块包含的交易数据,其中第一笔是Coinbase交易,用于激励矿工的特殊交易

图片

而且区块链中的区块头,就用于区块链工作证明的哈希运算中,作为输入字符串,通过双重SHA256哈希运算进行计算出的哈希值,必须小于一定的值,才能判定为有效,不然是无效的

然后算出符合条件的哈希值,矿工就会将这个信息广播到集群中所有其他节点,其他的节点验证后,将这个区域加入到自己的区块链中,形成一串的区块链

图片

算力越强,系统会更加大概率的计算出这个哈希值,如果坏人掌握了51%的算力,就可以发动51算力攻击,实现双花 Double Spending,同一分钱花2次

简单来解释这个问题,就是攻击者掌握了较多的算力,能挖掘出一条比原链更长的攻击链,并且将攻击链向全网广播,这时候,更长的链会被节点接收,导致原链被丢弃

这种问题,就是攻击者可以先进行向原链消费,然后在利用新链进行消费,打一个时间差

图片

但是,会存在一种问题,就是攻击者可能算力很大,也存在着半天无法算出一个区块的哈希值的可能性,避免了攻击成功,即时算力小,运气好也可能成功,这是有着一种概率性的,只不过算力越强概率越大

这样,我们主要了解了POW算法的原理,和51%攻击

比特币的区块链,POW算法,是通过SHA256进行哈希计算的,计算出符合条件的哈希值,证明工作量

51%攻击,就是利用了区块链的最长链胜出机制,来利用优势算力,实现对最长链的争夺

但是区块链和有着挖矿得币的奖励机制,保证了系统的稳定

但是由于区块链使用了Raft算法,那么恶意节点当选了领导者后,可以不断的告诉其他的节点,比特币是我的,按照Raft的约定,其他的节点也只能接收这些情况,谁让恶意节点是领导者呢?

我们通过计算得到了0000开头的哈希值,来做实现工作

那么约定更多的0开头的哈希值,比如000000,工作量是在增加了还是减少了?

理论上是增加了,因为000000包含了0000,所以理应更加难以计算

发表评论

邮箱地址不会被公开。 必填项已用*标注