《THE SWIRLDS HASHGRAPH CONSENSUS ALGORITHM: FAIR, FAST, BYZANTINE FAULT TOLERANCE》笔记

      THE SWIRLDS HASHGRAPH CONSENSUS ALGORITHM:

               FAIR, FAST, BYZANTINE FAULT TOLERANCE

出版时间:May 31, 2016

出处:Swirlds技术报告

下载:https://www.swirlds.com/downloads/SWIRLDS-TR-2016-01.pdf

Abstract

Swirlds哈希图共识算法是为复制状态机提出了,并确保拜占庭容错。它基于gossip协议,但不是广播(gossip)交易,而是gossip for gossip(谣言算法),它给所有gossip事件建立哈希图。他通过virtual voting(虚拟投票)实现拜占庭协议。

Introduction

复制状态机是要求去中心化数据库是拜占庭容错的,但大部分是在弱拜占庭场景,即假设攻击者不会串通,或者通信是弱异步的。在该论文中,使用原始拜占庭概念:超过1/3的成员是攻击者,并且他们可以串通,可以在诚实成员中删除和延迟消息传递,并且延迟没有限制

根据FLP不可能定理,没有确定性的拜占庭算法可以是完全异步的,没有无限的消息延迟,并且仍可以保证共识(即网络可靠且存在节点失效的异步分布式系统中,不存在一个可以解决一致性问题的确定性算法)。但对于不确定系统可实现共识,在该论文中哈希图共识算法是完全异步、不确定性、实现了拜占庭协议。对于一些系统Paxos、Raft,因为存在一个领导者,所以当攻击者给leader实施DOS攻击时会使系统发生大的延迟,因此哈希图共识算法中没有leader、可以抵抗对成员中小部分的DOS攻击。对于基于POW的如Bitcoin系统,它可以避免DOS攻击等问题,但这样的系统不是拜占庭式的,因为成员不确定何时实现共识。

哈希图共识算法等同于一个区块链,这个“链”不断扩展、不会被修改、没有块会失效、矿工每秒可以挖许多新的区块、不使用POW、效率是100%。

Core Concepts

哈希图共识算法是基于以下想法的:

(1)Transactions(交易):成员创建签名交易,所有的成员都可以得到他的副本,社区根据交易顺序实现拜占庭协议。

(2)Fairness(公平):一部分攻击者不公平的影响由共识算法选择的交易顺序是困难的。

(3)Gossip(谣言):每个成员重复的随机选择另外一个成员,并将他所知道的全部信息传播出去。

(4)Hashgraph(哈希图):用于记录谁向谁传播、顺序是什么的一种数据结构。

(5)Gossip about gossip(谣言算法):通过gossip协议传播哈希图。传播的消息是gossip历史本身,而不传播交易信息,这是为了减少带宽。Hashgraph 共识的机制和 hashgraph 结构的构建是通过 Gossip 过程来完成的

(6)Virtual voting(虚拟投票):每个成员都有哈希图的副本。(5)中的谣言算法说的是节点之间如何通信,但要达成共识还要虚拟投票技术。为什么是虚拟投票,因为通过执行谣言算法后所有节点都是全节点,都存储了完整的网络历史,在需要对某一提案达成共识时并不需要大规模的消息通信,每个节点独立执行投票算法,并且所有节点一定会得出相同的共识结果。

(7)Famous witnesses(知名见证人):见证人就是事件(哈希图中的顶点),一旦知名见证人集合实现了拜占庭协议,从哈希图中得到所有事件的公平排序是很容易的。

(8)Strongly seeing(强可见):如果事件B找到事件A的所有路径中跨越了绝对多数的节点,那么事件B强可见事件A。经过数学论证可以保证两个强可见的节点在虚拟投票时能获得一致的结果。

Gossip about gossip: the hashgraph

哈希图共识使用gossip协议,gossip协议简单来说就是,节点A随机选择一个可以连接的邻节点,向其发送一条信息,A节点重复这一过程。这样一个节点获得新消息,很快就会扩散到整个网络,让每个节点都知道。Gossip协议的历史信息可以通过有向图的方式表示,如图所示:

在一些gossip协议中,没有像这样的图实际存储在内存中,但在哈希图共识中,这样的图是一个实际的数据结构,每个事件(节点)作为字节存储在内存中。

Gossip about gossip中,当Bob gossip to Alice,Bob会将所有他知道而Alice不知道的事件传输给Alice。一个新交易会存放在一个事件的载荷中,这样可以很快让所有成员知道这个事件(即交易)。使用该协议是为了减少通信开销,当传输(gossip)交易时,需要确定的带宽,但如果传输哈希图,每个事件包含至少一个交易(可以有很多),它的通信开销是最小的。

Consensus algorithm

大部分没有领导者的拜占庭容错协议都依赖与成员之间互相投票。但这样的话消息的复杂度会增加。在哈希图共识中不要求发送投票信息。因为如果Alice和Bob都有相同的哈希图,他们就能根据哈希图函数计算出事件的整个排序,他们可以得到相同的答案,实现共识。如果他们没有相同的哈希图,他们会匹配以前的事件,此时就可能出现一些问题,如也许每个事件的顺序不一定是可见的、可能产生一个新事件覆盖以前的事件等,因此哈希图共识中采用虚拟投票的机制。虚拟投票中存在欺骗攻击,假如Bob是一个骗子,如图所示:

哈希图共识算法中为阻止这种攻击,使用可见(seeing)和强可见(strongly seeing)他人的概念。

可见(seeing):当事件B可以沿着哈希指针找到事件A,那么事件B就可见事件A。

强可见(strongly seeing):如果有n个成员,如果事件w能通过不同成员看到超过2n/3个事件,并且每个都可以看见x,则称w是强可见x的。

哈希图共识算法:

1、哈希图共识算法

2、divideRounds算法

    该算法是确定每个事件的轮次数。

    每个事件都被分配了一个轮次数,在这里有两个概念:

    创建轮(Creation Round),就是当一个事件被创建时,它所在的轮次。通常,一个事件被创建时,它会被立即赋予一个轮次号,跟其父事件是在同一个轮次。

接收轮(Receive Round),当某个事件强可见(strongly seeing)超过 2/3 节点的本轮或者上一轮的事件时,这个事件就达到了一个新的轮次,这个轮次就是他的接收轮。如图所示:

divideRounds算法如图所示:

3、decideFame算法

该算法用来确定每个见证人(witness)是否知名(famous)。两个概念:

见证人(witness),每一轮创建的第一个事件

知名见证人(famous witness),如果下一轮的多数(超过2/3)见证人都能看见,则说明这个见证人是知名的。算法如图所示:

知名见证人判断过程:

4、findOrder算法

一旦给定轮次内见证人是否知名达成共识,确定旧事件共识时间戳和共识总顺序就会非常容易。有计算接收轮次roundReceive和接收时间consensusTimestamp的方法,如图为算法示意:

Proof of Byzantine fault tolerance

主要对该论文中用到的一些定义和证明进行介绍。

定义5.1: 如果x是y,或x是y的父级,或y的父级的父级,依此类推,那么事件x定义为事件y的祖先。如果x是y,或x是y的自父亲,或者是y的自父亲的自父亲,以此类推,那么x是y的自祖先。

定义5.2:事件x的创建轮次数定义为r+i,r是事件x的父亲的最大轮次数(如果没有父亲则是1),i=1,如果x在r轮可以强可见超过2n/3的见证人,否则i=0。

定义5.3:事件x的接受轮次数定义为所有独特著名见证人都是x的后代的第一轮。(如果R轮(创建轮次)中的所有知名见证人可见某一普通事件,则该事件的接受轮次就是R轮,如果某普通事件没有被R轮所有知名见证人可见,则它的接受轮次一定晚于R轮)。

定义5.4:事件(x,y)是分叉,如果x,y有相同的创造者,但两个都不是另外一个的祖先。

定义5.5:诚实的成员会不断的和其他成员同步,并在同步之后创建一个有效的事件。

定义5.6:事件x可见y,如果y是x的祖先,并且x的祖先不是y创建者的一个分叉。

定义5.7:事件x强可见y,如果x可见y,并且有一个超过2/3成员的事件集合S,x可见S中的每个事件,S集合中的每个事件可见y。

定义5.8:见证人是成员在一轮中创建的第一个事件。

定义5.9:知名见证人是一个通过社区判断是否知名的见证人。判断算法:是否有很多成员能在下一轮开始可以看见他。独特知名见证人是在相同轮下,和其他知名见证人没有相同创建者的知名见证人。

定义5.10:哈希图A和哈希图B是一致的,意味着这两个哈希图包含任何事件x,他们也包含相同的x的祖先集合,并且在这些祖先之间有相同的父和自父变。

 

引理5.11:所有的成员都有一致的哈希图。

证明:通过归纳法进行证明

 

强可见定义的目的是为了使下面这个引理成立,该引理是整个证明的基础,因为他允许一致性投票,并保证即使使用虚拟投票,不同的成员之间也不可能计算出不一致的结果。

引理5.12(强可见引理):如果事件(x,y)分叉,在哈希图A中的事件z强可见事件x,那么在哈希图B中事件y不可能被任何事件强可见(A与B一致)。

证明:通过反证法进行证明。

两个哈希图一致,这将使的他们在事件x的每个属性上都达成一致。包括它的创建轮次、它是否是见证人、它可见的事件、它强可见的事件、它在每次选举中如何投票等。以下引理是用来证明它的创建轮次数证明

引理5.13:如果哈希图A和B一致,并且都包含事件x,则他们将分配相同的创建轮次给事件x。

证明:用归纳法证明

 

如果在r轮的见证人x强可见r-1轮的见证人y,在选举中就说y投票给x,或说x从y得到一个投票。对于两个一致的哈希图,在相同轮次有不同的投票是不可能的

引理5.14:如果哈希图A和B一致,在哈希图A中,对于一个给定选举,成员m0的r轮见证人发送投票va给成员m1在r+1轮的见证人,在哈希图B中,成员m0在r轮见证人发送投票vb给成员m1在r+1轮的见证人,则va=vb.

证明:根据5.12引理可知,对于一致的哈希图,两个事件是分叉的,且都强可见,这是不可能的。因此两个投票一定来自相同的事件x。事件的投票是根据其祖先计算的,因此两个哈希图都同意这个投票,且va=vb。

 

通过多轮虚拟投票,可以解决拜占庭协议在YES/NO的问题。以下引理证明了:如果一些人决定了Yes/No问题,之后每个人都会立刻达成拜占庭共识。

引理5.15:如果哈希图A和B一致,A在r轮使用投票结果v决定了拜占庭协议选举,而B在r轮之前没有决定,那么B将在r+2轮或之前决定。

 

以下定理说明对于一些单个Yes/No问题,拜占庭容错都可以解决。

定理5.16:对于单个Yes/No问题,最终都可以以概率1实现共识。

证明:根据引理5.15,如果任意成员确定了问题,那么所有的成员将在2轮之内也做相同的决定,因此共识失败的唯一方法就是没有成员做决定。

 

在哈希图共识算法中,拜占庭协议用于决定在给定轮中见证人是否是知名的。通过以下引理可以确定每一轮至少有一个见证人是知名的。

引理5.17:对于任意轮次数r,任意哈希图在r+3轮至少有一个事件,在r轮,通过共识算法可以决定至少有一个见证人是知名的,这个会被r+3轮或更前的见证人决定。

 

引理5.18:如果哈希图A不包括事件x,但是包括x的所有父事件,哈希图B是把x添加到A的结果,并且x是在r轮创建的见证人,并且A中在r轮至少有一个见证人是知名的,那么x在B中就不是知名见证人。

 

已存在轮次中的所有知名见证人的集合都不会改变,及时有更多的事件添加到哈希图中。知名见证人集合将作为一个法官,去决定所有已到达事件的整体顺序,对于每个事件的时间戳等。

 

定理5.19(拜占庭容错定理):诚实成员创建的每个事件x,最终会以概率1在事件的总体排序中分配一个共识位置。

 

扩展

女巫攻击(Sybil attack):在对等网络中,单一节点具有多个身份标识,通过控制系统的大部分节点来削弱冗余备份的作用。

解决女巫攻击:一种方法是工作量证明机制,另一种方法是身份认证(相对于PoW协议,女巫攻击是基于BFT拜占庭使用容错协议的Blockchain需要考虑的问题,需要采用相应的身份认证机制)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值