区块链与密码学全民课堂:区块链基础技术大剖析之共识算法(一)

【本课堂内容全部选编自PlatON首席密码学家、武汉大学国家网络安全学院教授、博士生导师何德彪教授的《区块链与密码学》授课讲义、教材及互联网,版权归属其原作者所有,如有侵权请立即与我们联系,我们将及时处理。】
2.4.4 共识算法
新一期图学院来啦!在上一期我们讲到数字签名,这一期我们将细说区块链的“灵魂”——共识算法,顾名思义,共识算法的作用就是用算法产生共识。
要熟悉共识算法,首先我们要了解区块链为什么需要共识?
之前的课堂中讲到比特村通过村民记账来解决信任问题,但是所有节点都参与记录数据,那么最终以谁的记录为准?或者说,怎么保证所有节点最终都记录一份相同的正确数据,即达成共识?
在传统的中心化系统中,因为有权威的中心节点背书,因此可以以中心节点记录的数据为准,其他节点仅简单复制中心节点的数据即可,很容易达成共识。比如现实生活中的行业老大哥和政府部门都具有权威话语权,他们的数据大家都认可,具有一言九鼎之功效。
然而在区块链这样的去中心化系统中,并不存在中心权威节点,所有节点对等地参与到共识过程之中。大家都一样,我凭啥听你的?有可能谁也不服谁。
由于参与的各个节点的自身状态和所处网络环境不尽相同,而交易信息的传递又需要时间,并且消息传递本身不可靠,因此,每个节点接收到的需要记录的交易内容和顺序也难以保持一致。
就如同大家都在一个场地开会,但大家的身份、想法、使用的手机型号都不一样,全部达成统一的概率很小,但区块链每一次记账必须达成共识。
更不用说,由于区块链中参与的节点的身份难以控制,还可能会出现恶意节点故意阻碍消息传递或者发送不一致的信息给不同节点,以干扰整个区块链系统的记账一致性,从而从中获利的情况。
因此,区块链系统的记账一致性问题,或者说共识问题,是一个十分关键的问题,它关系着整个区块链系统的正确性和安全性。
既然区块链需要共识算法作为统一大家意见的灵魂歌手,那么共识算法都有哪些呢?
当前区块链系统的共识算法有许多种,主要可以归类为如下四大类:
· 工作量证明(Proof of Work,PoW)类的共识算法
· Po*的凭证类共识算法
· 拜占庭容错(ByzantineFault Tolerance,BFT)类算法
· 结合可信执行环境的共识算法
接下来本节将分别对这前两类算法进行简要的介绍。之后的一讲我们再聊后两类算法。
PoW类共识算法
PoW类的共识算法主要包括区块链鼻祖比特币所采用的PoW共识及一些类似项目(如莱特币等)的变种PoW,即为大家所熟知的“挖矿”类算法。
这类共识算法的核心思想实际是所有节点竞争记账权,而对于每一批次的记账(或者说,挖出一个区块)都赋予一“难题”,要求只有能够解出这个难题的节点挖出的区块才是有效的。
同时,所有节点都不断地通过试图解决难题来产生自己的区块并将自己的区块追加在现有的区块链之后,但全网络中只有最长的链才被认为是合法且正确的。
比特币系统设计了以每个节点的计算能力即“算力”来竞争记账权的机制.在比特币系统中,大约每10分钟进行一轮算力竞赛,竞赛的胜利者,就获得一次记账的权力,并向其他节点同步新增账本信息。
在一个去中心化的系统中,谁有权判定竞争的结果呢?比特币系统是通过一个称为“工作量证明”( Proof of Work, PoW)的机制完成的。
简单地说,PoW就是一份确认工作端做过一定量工作的证明。PoW系统的主要特征是计算的不对称性。工作端需要做一定难度的工作得出一个结果,验证方却很容易通过结果来检查工作端是不是做了相应的工作。
举个例子,给定字符串“bockchain”,我们给出的工作量要求是,可以在这个字符串后面连接一个称为”你真好看(nonce)“的整数值串,对连接后的字符串进行”乾坤大挪移(SHA256)“哈希运算,如果得到的哈希结果(以十六进制的形式表示)是以若干个0开头的,则验证通过,为了达到这个工作量证明的目标,我们需要不停地递增”你真好看(nonce)”值,对得到的新字符串进行”乾坤大挪移(SHA256)“哈希运算。
PoW背后的基本概念很简单:工程端提交已知难于计算但易于验证的计算结果,而其他任何人都能通过验证这个答案就确信工作端为了求的结果已经完成了量相当大的计算工作.但PoW机制存在明显的弊端。
一方面,PoW的前提是节点和算力是均匀分布的,但随着人们将CPU挖矿逐渐升级到GPU,FPGA,ASIC矿机挖矿,算力越来越集中。
另一方面, PoW太浪费资源了。比特币网络每秒可完成数百万亿次SHA256计算,但这些计算除了使恶意攻击者不能轻易地伪装成几百万个节点和打垮比特币网络,并没有任何实际或科学价值。
Po*的凭证类共识算法
有鉴于此,人们引入“凭证”的概念,提出Po*类算法,其中*表示算法使用凭证的类比,权益证明( Proof of Stake, PoS)就是其中的一种方法。就像是股票也是一种凭证,我买了股票就享有公司的投票和分红权。
权益证明要求用户证明拥有某些数量的货币(即对货币的权益),点点( Peercoin)是首先采用权益证明的Token,尽管它依然使用工作量证明挖矿。
点点在SHA256的哈希运算的难度方面引入了币龄的概念,使得难度与交易输入的币龄成反比.在点点中,币龄被定义为币的数量与币所拥有的天数的乘积,使得币龄能够反映交易时刻用户所拥有的货币数量。
点点的权益证明机制结合了随机化与币龄的概念,未使用至少30天的币可以参与竞争下一区块,越久和越大的币集有更大的可能去签名下一区块。
其它算法:Algorand、Quroboros等都是目前热门的PoS类共识算法。以太坊2.0也会使用PoS类共识算法。
Po*类算法缺点
提高了算法的中心化程度,但违背了区块链“去中心化”的思想。
矿工激励不够明确,节点缺乏参与动力
有关于共识算法1的课程就讲到这里啦,下节课我们将继续解析区块链基础技术之共识算法2,细说非常有意思的拜占庭将军问题。敬请期待~