美文网首页nervos
第四章 区块链的共识机制:从拜占庭共识谈起

第四章 区块链的共识机制:从拜占庭共识谈起

作者: 007胡明 | 来源:发表于2018-02-10 22:39 被阅读584次

    如果说区块链是比特币运行的躯干

    那共识机制就是灵魂

    区块链哲学三问

    区块链被确认有以下三个基本特征:

    1.区块链是一个分布式数据库(系统);

    2.区块链采用密码学,保证你有数据不被篡改;

    3.区块链采用共识算法来对于新增的数据达成共识。

    这三点可以简单的从哲学上理解为:我是谁?我来自哪里?我要去哪里?

    我是谁?我是一个分布式的数据库;

    我来自哪里?密码学告诉我过往的记忆;

    我要去哪里?共识算法告诉我应该怎么往前走。

    区块链技术的伟大之处就是它的共识机制,在去中心化的思想上解决了节点间互相信任的问题。区块链拥有众多节点并达到一种平衡状态是因为共识机制。尽管密码学占据了区块链的半壁江山,但是共识机制才是让区块链系统不断运行下去的关键。所以,要深入谈及区块链的共识机制,就避不开一个问题,拜占庭问题。

    关于拜占庭问题及其分析(前方烧脑)

    拜占庭问题是容错计算中的一个老问题,有莱斯特兰伯特等人在1982年提出。拜占廷帝国为5-15世纪的东罗马帝国,拜占庭城邦拥有巨大的财富,令他的十个邻邦垂涎已久,但是拜占庭高墙耸立,固若金汤,没有任何一个单独的邻邦能够成功入侵,任何单个城邦的入侵行动都会失败,而入侵者的军队也会被歼灭,使得其自身反而容易遭到其它九个城邦的入侵。这十个城邦之间也互相觊觎对方的财富并经常爆发战争。

    拜占庭的防御能力如此之强,非大多数人一起不能攻破。而且只要其中一个城邦背叛盟军,那么所有进攻军队都会被歼灭,并随后被其他邻邦所劫掠。因此这是一个互不信任的各个邻邦构成的分布式网络。每一方都小心行事,因为稍有不慎就会给自己带来灾难。为了获取拜占庭的巨额财富,这些邻邦分散在拜占庭的周围,依靠士兵传递消息来协商进攻目的及进攻时间,这些邻邦将军想要攻克拜占庭,但面临的一个困扰,邻邦将军不确定他们之中是否有叛徒,叛徒是否擅自变更进攻意向或者进攻时间?在这种状态下,将军们能否找到一种分布式协议来进行远程协商达成他们的共识,进而赢取拜占庭城邦的财富呢?

    在拜占庭将军问题模型中,对于将军们有两个公认的假设:

    假设一、所有忠诚的将军受到相同的命令后,执行这条命令,得到的结果一定是相同的,它的含义是所有节点对命令的解析和执行是一样的,这个命令必须是一个确定性的命令,不能存在随机性,也不能依赖节点自身的状态,也就是说这个秘密不能是心情好,就攻击敌人,心情不好就原地休息;

    假设二、如果命令是正确的,那么所有忠诚的将军必须执行这条命令,换句话说,忠诚的将军需要判断,接收到的命令是不是正确的。

    对于将军们的通讯过程,在“拜占庭将军问题”中也是有默认假设的:点对点通信是没有问题的,也就是说在这里,我们假设A将军要给B将军一条命令X,那么派出去的传令兵一定会准确的把命令X传给B将军。

    但问题在于,如果每个城邦向其他九个城邦派出一名信使,那么就是这十个城邦,每一个都派出了九名信使,也就是在任何一个时间有总计90次的信息传输,并且每个城市分别收到九条信息,可能每一条都写着不同的进攻时间,除此以外,信息传输过程中,如果叛徒想要破坏原有的约定时间,就会自己修改相关信息,然后发给其他城邦以混淆试听,这样的结果是,部分城邦收到错误信息后,会遵循一个或者多个城邦已经修改过的攻击时间相关信息,从而背叛发起人的本意。这样一来,遵循错误信息的城邦(包含叛徒),将重新广播超过一条信息的信息链,整个信息链会随着他们所发送的错误信息,迅速变成不可信的信息和攻击时间,变成一个相互矛盾的纠结体。

    针对这个问题,人们主要提出了两种解决方法,一个是口头协议算法;另一个是书面协议算法。

    口头协议算法的核心思想:要求每一个被发送的消息都能被正确投递,信息接收者明确知道消息发送者的身份,并且信息接收者知道信息中是否缺少信息。采用口头协议算法,若叛徒数少于1/3时,则拜占庭将军问题可以很容易解决。但是口头协议算法存在着明显的缺点,那就是消息不能溯源。

    为解决该问题,提出了书面协议算法。该算法要求签名,不可伪造,一旦被篡改即可发现,同时任何人都可以验证签名的可靠性。

    就算是书面协议算法,也不能完全解决拜占庭将军问题,因为该算法没有考虑信息传输延迟、签名体系难以实现的问题。且签名消息记录的保存,也难以摆脱中心化机构。

    以比特币为例的区块链共识机制解决方案

    中本聪所创建的比特币,通过对这个系统,做出一个简单的变化解决了这个问题。它为发送信息加入成本,这降低了信息传递的速率,并加入了一个随机元素,以保证在一个时间只有一个城邦,可以进行广播。

    中本聪加入的成本是“工作量证明”——挖矿,并且工作量证明是基于计算一个随机哈希算法。哈希算法唯一做的事情就是获得一些输入,然后进行计算,并得到一串64位的随机数字和字母的字符串。

    在比特币的世界中,输入数据,包括了到当前时间点的整个总帐。尽管单个哈希值用现在的计算机几乎可以及时的计算出来,但是比特币系统接受的工作量证明,是无数个64位哈希值中唯一的哈希值,而且这个哈希值前13个字符均为0,这样一个哈希值是极其罕见,不可能被破解的,并且在当前却要花费整个比特币网络,总算力约十分钟的时间才能找到一个。

    在一台网络机器随机的找到一个有效哈希值之前,上十亿个的无效值会被计算出来,计算哈希值就需要花费大量时间,增加了发送信息的时间间隔,造成信息传递速率减慢,而这就是使得整个系统可用的“工作量证明”。

    而那台发现下一个有效哈希值的机器,能将所有之前的信息放到一起,附上他自己的辨识信息,以及它的签名/印章诸如此类,向网络中的其他机器广播出去。只要其他网络中的机器接收到并验证通过了,这个有效的哈希值和附着在上面的签名信息,他们就会停止他们当下的计算,使用新的信息更新他们的总账拷贝,然后把新更新的总账作为哈希算法的输入,再次开始计算哈希值。

    哈希计算竞赛,从一个新的开始点重新开始,如此这般,网络持续同步着,所以网络上的电脑都使用着同一版本的总账,与此同时,每一次成功找到有效哈希值以及区块链更新的间隔,大概是十分钟,在那十分钟以内,网络上的参与者发送信息并完成交易,并且因为网络上的每一个机器都是使用同一个总账,所有的这些交易和信息都会进入每一份遍布全网的总账拷贝。当区块链更新,并在全网同步之后,在之前十分钟内进入区块链的所有交易也被更新并同步。因此分散的交易记录,是在所有的参与者之间进行对账和同步的。

    最后在用户向网络输入一笔交易的时候,他们使用内嵌在比特币客户端的标准公钥加密工具来加密,同时用他们的私钥以及接收者的公钥为这笔交易签名,这对应于拜占庭将军问题中,他们用来签名和验证消息时使用的“印章”。因此,哈希计算速率的限制,加上公钥加密,使得一个不可信网络变成一个可信的网络,所有参与者可以在某些事情上达成一致(比如说攻击时间、或者一系列的交易域名记录,政治投票系统,或者任何其他的需要分布式协议的地方)。

    将比特币的共识机制引入拜占庭问题,就形成了这样一种情况,城邦A向其他九个城邦发送进攻相关信息,是直接将相关信息及其当时发送的时间,附加在通过哈希算法加密的信息中,并且加上独属于自己的数字签名传递给其他城邦。等其他城邦中相应的机器已经收到,并验证通过这个有效哈希值和附加在上面的签名信息,他们就会停止他们当下的计算,使用新的信息更新他们的总的进攻信息拷贝,然后把新更新的信息区块链作为哈希算法的输入,再发给其他城邦。其他城邦接受消息后,重复此流程直至所有城邦都收到消息。如此这般,网络持续同步着,所有网络上的电脑都使用着同一版本的总账。

    如果叛徒想要修改进攻信息来误导其他城邦时,其他城邦的机器会立刻识别到异常信息,同步的虚假信息将不被认可,依旧会同步其他大部分共同的信息,这样叛徒就失败了,他无法破坏十个城邦当中的大多数节点,也就是至少六个节点,这样信息的一致性就得到了保证,完美解决了拜占庭问题。

    这就是区块链共识机制为何如此特别的关键,他为一个算法上的难题提供了解决方案,区块链的共识机制,通过不断同步各个节点的信息,使得各分布式节点之间达到一种平衡,保证了绝大多数节点的一致性,即达成了共识。

    区块链共识机制的发展变迁

    区块链的共识机制发展到现在,也出现了很多种,这里列举一些比较典型的共识机制:

    1.POW(Proof of Work) 工作量证明

    依赖机器进行数学运算来获取记账权,资源消耗相比其他共识机多、可监管性弱,同时每一次达成共识,需要全网共同参与,运算性能效率比较低,容错性方面允许全网50%节点出错,优点是完全去中心化,节点自由进出。当然现在由于POW算力的中心化,使得很多人对POW机制中的中心化问题出了怀疑,其中被质疑最多的就是算力中心化问题。

    2.POS(Proof of Stake) 权益证明

    总体来说,就是存在一个持币人的集合,他们把手中的代币放入POS机制中,这样他们就变成验证者。假设很多验证者,在区块链最前面发现了一个新区块,这是POS算法在这些验证者中随机选取一个,给他们权利产生下一个区块,选择验证者的权重,依据他们投入的代币多少而定,与POW一样,以最长的链为准,如果在一定时间内,这个验证者没有产生出一个新区块,POS会继续选出第二个验证者,代替原来被选中的验证者来产生新的区块。

    和POW算法相比,选择POS算法有什么好处呢?

    简单来说,不再需要为了安全产生区块,而大量消耗电能。由于不再需要大量能耗,通过发行新币以激励参与者继续参与网络的压力会下降,理论上负总发行量甚至成为可能,由于一部分交易费被烧掉,因此货币供应会随着时间减少,从“合作博弈论”观点来看,POS算法可以减少因自私挖矿而造成系统被攻击的弱点。随着规模经济的消失(指扩大生产规模引起经济效益增加的现象),中心化所带来的风险就会减小,价值1000万美元的代币带来的回报是10万美元,即作恶所付出的成本需要价值1000万美元的代币,而收益只能得到价值10万美元的代币,这样一来,因为作恶获得与付出不成正比,人们不会去攻击整个区块链。

    同样,POS也存在很多问题,比如POS相当于是大股东说了算,但如果大股东作恶怎么办,这也一直存在争议。

    3.DPOS(Delegate Proof of Stake)股份授权证明

    BitShares社区首先提出了DPOS机制。DPOS与POS的主要区别,在于其节点选取若干代理人。由代理人验证和记账,其合规监管、性能、资源消耗和容错性与POS相似。类似于董事会投票,持币者投出一定数量的节点,代理他们进行验证和记账。

    DPOS的工作原理:51%的股东投票的结果,将是不可逆且有约束力的,其运作方式是通过及时而高效的方式,采用51%以上份额的股东投票来决定方案。为达到这个目标,每个股东可以将其投票权授予一名代表。网络延迟有可能使某些代表没能力及时广播他们的区块,而这将导致区块链分叉。然而,这不太可能发生,因为制造区块的代表可以与制造前后区块的代表建立直接连接,而建立这种与你之后的代表的直接连接,是为了确保你能得到报酬。该模式可以每30秒产生一个新区块,并且在正常的网络条件下,区块链分叉的可能性极小,即使发生也可以在几分钟内得到解决,这样就可以大幅缩小参与验证和计算节点的数量,达到秒级的共识验证。

    4.Ripple Consensus:瑞波共识机制

    它的算法主要是:使一组节点,能够基于特殊节点列表达成共识,初始特殊节点列表,就像一个俱乐部要接纳一个新成员,必须由当前该俱乐部中51%以上的会员投票通过。共识遵循这个核心成员的51%权利,外部人员则没有影响力。与比特币和点点币一样,瑞波系统将股东们与其投票权隔开,并因此比其他系统更中心化。

    5.Pool验证池

    这是一种基于传统的分布式一致性技术,加上数据验证的机制,是目前行业链大范围在使用的共识机制。

    优点是不需要代币也可以工作,在成熟的分布式一致性算法基础上,实现秒级共识验证。而缺点是去中心化程度不如比特币,更适合多方参与的多中心商业模式。

    除此之外,还有很多的共识机制,现在主流的共识机制是POW共识机制,POS共识机制和DPOS共识机制。

    但是目前这些主流共识机制都还存在着一定不足,比特币已经吸引全球大部分的算力,其它在用POW共识机制的区块链应用,很难获得相同的算力来保障自身的安全,同时挖矿也会造成资源大量浪费,共识达成的周期较长等问题。POW之外出现最早的也是最重要的算法是POS,它的原则是一个节点,持有的币越多,越有机会产生下一个区块,也就是如果想要造假,需要持有大量的币,而既然造假者持有了那么多币,破坏网络的可信度,就会造成资产的大量损失,这个损失极有可能是超过造假的收益。

    POS相比POW节约了大量的电力资源,但是它的缺点也显而易见:会造成富者越富,穷者越穷,然后用户会流失,新用户不愿意加入。而且还是需要挖矿,本质上并没有解决商业应用的痛点,所有的确认都只是一个概率上的表达,而不是一个确定性的事件,理论上很有可能存在其它攻击影响。而DPOS共识机制还是依赖于代币,很多商业应用是不需要代币存在的。

    结语

    基于以上所说,现在看来,没有一种共识机制是完美无缺的,同时也意味着没有一种共识机制,是适合所有应用场景的,所以区块链的共识机制也都还在不断的进步与发展。

    虽然目前主流的区块链共识机制中绝大多数都是去中心化的公有链,但本身仍存在一些缺点。并且还有少部分机构采用了半中性化或者中心化的共识机制,而半中性化甚至中心化的共识机制,是明显有违区块链的一致性的,会使权力掌握在少数人手里,出现很多问题,信用机器也将因此崩溃。

    如今世界还在等待一种新的共识机制,一种能让所有人都信服的共识机制。

    但这可能是一个哲学问题,世界上永远没有完美的共识机制。

    相关文章

      网友评论

      本文标题:第四章 区块链的共识机制:从拜占庭共识谈起

      本文链接:https://www.haomeiwen.com/subject/walhtftx.html