异步拜占庭 asynchronous byzantine agreement (ABA)
前置知识
拜占庭共识协议主要以下3种网络假设:
- 同步 存在一个已知的有限时间界限∆,对于发送的任何消息,对手最多可以延迟∆传递
- 异步 对于发送的任何消息,对手可以延迟任何有限时间后传递,但每个消息最终都必须到达
- 半同步 假设存在一个已知的优先时间界限∆和一个GST(Global Stabilization Time)的特殊事件,系统在GST之前异步运行,在GST之后同步运行
FLP不可能性
在异步通信场景中,即使只有一个进程失败,也没有任何算法能保证非失败进程达到一致性
Reliable boradcast(RBC)
PBFT在每一轮共识时,需要leader把block分发给所有followers,假设共识组由100个node,block大小为10M。那么leader这一步消耗的带宽为100*10M = 1G。leader的带宽成了整个系统的瓶颈。RBC解决了这个问题。
Leader要把v发给follower,先把v拆成n份:{v1,...,vn},其中n为共识组的节点数。把这个n个小块分别发给其他n个follower,每个follower收到一块后,在广播给其他follower,这样每个节点都会有一个完整的块。follower的带宽为原来的1/n。本质上是利用所有节点的带宽来平衡了Leader的带宽消耗
如果需要增加RBC的容错性,可以使用纠删码。使用n=m+f的纠删码,令f=1/3*m(BFT),只需任意m个小块就可以得到完整的块
阈值签名/门限加密
阈值签名是由多个签名者组成阈值组,群组成员独立对消息进行签名,当达到阈值条件合并创建组签名。任意达到阈值的组的子集都可以产生相同的签名
基本的数学原理为m个变量的多项式方程在m组参数下可以。且有n组参数且n>m,任选m组参数都可以得到一个唯一确定的解。
群组签名特征:
- 一个由公钥识别的阈值组仅可在给定的种子数据上产生单个唯一有效的签名输出。
- 这个组具有容错能力,任何大于等于阈值的子集可以将组签名分片合成组签名
- 所得到的阈值签名可以由任何具有该组的公钥与种子数据的人来验证
- 这个签名是确定性产生的随机数
- 给定阈值组的公钥和种子数据,验证者就可以在无需执行共识协议的情况下立即就随机数达成一致
具体流程为:
选举一个可信第三方节点为每个节点生成公/私钥,使用一把主私钥加密原交易信息得到一份密文,然后每个节点分别使用其私钥SKi和这份密文得到完整解码密钥的一部分øi。
当节点拿到超出阈值数量的øi,配合公钥就可以解密密文。
介绍
当去中心化网络具有拜占庭容错能力时,就能够保证网络中的诚实节点数量n ≥ 3m + 1(m是拜占庭节点)就可以达成共识。这就是网络的“容错性”,意味着网络可以容忍最多1/3的节点的恶意行为,而正确的达成共识。
许多形式的bft假设在达成共识时存在消息延迟的最大阈值∆,但异步拜占庭容错网络消除了这种假设,并允许某些消息丢失或无限期延迟,并且假设在某个时候诚实节点的消息最终会通过。这种情况更好的反应了现实世界中的网络可靠性且大大简化了工程工作。
在现实网络环境下部署异步BFT在很多情况下可取甚至必要。但是在以前异步BFT通常是低效的。例如,通信复杂度很高,可以达到O(n2)甚至O(n3)。
HoneyBadgerBFT做了优化使得异步BFT可以在现实环境下使用了。DumboBFT优化了HB-BFT。
HB-BFT
简介
HB-BFT使用了两个方法来提升共识效率
- 使用RBC分割交易来缓解单节点带宽瓶颈
- 使用ACS提升交易吞吐量
网络模型
HB-BFT系统假定每两个节点之间都有可靠的信道连接。
且总节点数为N,拜占庭节点数为f。N ≥ 3f + 1
- 任何诚实的节点确认了一笔交易TX,那么其他所有的诚实节点也会确认这个交易
- 消息确认的时间顺序是确定的
- 任何大于2/3的诚实节点确认一笔交易后,最终所有诚实节点都会确认这笔交易
Asynchronous Common Subset (ACS)
有n个节点,每个节点的数据集合分别是U1,U2,...,Un,每个节点上用RBC将自己对应的Ui发给所有其他人,然后用asynchronous binary Byzantine agreement(ABA),共识得到一个01序列b={b1,b2,...,bn}, bi ∈ [0,1], bi的值表示Ui是否被包含在最终的结果U里面
假如网络中有10个node,每个node维护了一个交易池,每个区块包含B=100个交易。
- 每个node从本地交易池中随机选取10个交易作为自己的提案
- 通过阈值签名将自己的提案加密
- 每个节点将加密后提案作为ACS模块的输入,输出就得到了一个“名单”,记录了网络共识的结果0/1组,当不能达成共识使用common coin得到随机值0/1来作为共识
- 通过一系列的解密操作就得到了最终确认的区块
Dumbo
HB-BFT耗时(node数量很多时,其他阶段几乎可以忽略)主要在ABA阶段(也就是上述流程的阶段3,就每个node的输出所有节点达成0/1共识),在node数量增加后ABA耗时成指数级别增长。
Dumbo1
为了降低二元共识的数量,让投票阶段变得更有效率一些。
选举出一个委员会,每位委员给出一个输入向量,所有参与者就这些向量进行ABA,所以ABA时间仅依赖与委员会的数量,而与网络大小无关。
Dumbo2
使委员会数量降低为常数。。。未完待续
参考文献
https://zhuanlan.zhihu.com/p/28172716
https://segmentfault.com/a/1190000040239464