HoneyBadgerBFT算法是2016年提出的针对异步网络设计的BFT共识算法。HoneyBadgerBFT算法论文的下载地址:https://eprint.iacr.org/2016/199.pdf。本文介绍HoneyBadgerBFT算法的流程,复杂度推导,以及论文实验结果。
1)算法流程
整体的算法分为三个步骤:1)每个节点交易随机选择一些交易,所有节点的总交易个数是B。 每个节点的交易进行加密生成x。2)通过ACS协议将每个节点加密的交易进行广播,以及形成统一交易序列。 3)解密交易生成区块。整体的算法流程如下:
2)TPKE加解密算法
TPKE,threshold public key encryption,加解密算法,一个公钥,多份私钥。通过TPKE加密后的数据需要多份子秘钥才能解密。
TPKE.Setup创建公钥PK和若干个子秘钥SKi。TPKE.Enc用PK对m进行加密,加密结果是C。TPKE.DecShare用单个子秘钥解密得到中间结果。TPKE.Dec用若干个中间结果解密得到m。
3)ACS协议
ACS - Asynchronous Common Subset。ACS协议又由两个协议组成:RBC协议和BA协议。ACS协议的主要功能是通过RBC协议广播交易,再通过BA协议形成一致的列表。网络节点间的数据共识的基础是RBC协议。
4)RBC协议
RBC,reliable broadcast协议。RBC协议通过纠删码算法降低节点间的数据传输。两次广播(ECHO以及READY消息)后,网络节点间可以形成共识。RBC的算法如下:
RBC算法的精髓是充分利用所有节点间的网络带宽。广播发起者P,将需要广播的数据(区块),通过纠删码算法分割成N份(其中有2f份是冗余),分发给N个节点。节点之间利用它们自己的网络带宽,广播这些分割后数据。这样做的好处是降低了广播发起者P的网络带宽,充分利用所有节点的网络带宽,示意如下图:
上图中,广播发起者先向三个网络节点A,B和C广播纠删码算法生成的分割后的小区块。网络节点A,B和C在接收到小区块数据后,广播给其他节点。任何节点只要收到超过一定数量的小区块就可以恢复出原始区块。
5)复杂度以及实验数据
论文指出HoneyBadgerBFT算法的总的数据传输的复杂度:
其中,v是单节点上最大数据大小。推导方法如下图所示:
因为一次传输实现B个交易(N^N*LogN),一个交易的传输量的复杂度可以近似为O(N)。论文在Amazon集群上模拟节点,对比了HoneyBadgerBFT和PBFT的性能,如下图:
简单的说,在网络节点少的情况下(比如,8节点),HoneyBadgerBFT性能稍逊PBFT算法。但是在网络节点变多的情况下,HoneyBadgerBFT算法的性能几乎不变,而PBFT算法的性能显著下降。