简介
加密数字货币的成功使得 BFT 共识协议不断的被应用在那些重要的领域尤其是金融行业。传统的 PBFT 是一种弱同步性质的共识协议,因为它的可靠性对网络中的时间处理延时依赖非常大。也就是说,网络的活性 Liveness 很大程度上会受到网络条件的影响。
HoneyBadgerBFT 作为一种异步的 BFT 共识协议,号称不依赖网络中的对时间条件的依赖。对比与传统的 PBFT 共识协议,它的效率都有显著提高。
应用场景
可以满足下面两个应用场景
1)由多个金融机构组成的金融财团共同基于 Byzantine agreement protocol 协作运行的联盟链,这样,就能保证快速、稳定的处理交易。
2)在无许可(permissionless)的公链中依然可以提供可以接受的(acceptable)的吞吐量和延迟。
网络模型
HoneyBadgerBFT 系统假定每两个节点之间都有可靠的通信管道连接,消息的最终投递状态完全取决于敌方(adversary),但是诚实节点之间的消息最终一定会被投递。在整个网络中的总节点数必须大于三分之一的敌方节点,也就是 N ≥ 3F+1。
网络中的交易还依赖于一个全局顺序。
一个成功的网络,最后状态应该是这样的:
- 任何诚实的节点确认了一笔交易 TX,那么其他所有的诚实节点也会确认这笔交易
- 任何诚实的节点确认了一笔交易 TX,其序号是 s1,而另一个诚实节点确认了另一笔交易 TX,其序号是 s2,那么要么 s1 发生在 s2 之前,要么之后。也就是说,其时间顺序是确定的。
- 如果一笔交易被发送到 N - F 个诚实节点了,那么最终每个诚实节点都会确认这笔交易。这就是可审查特性。
实现
HoneyBadgerBFT 使用了两个方法来提升共识效率。
1、通过分割交易来缓解单节点带宽瓶颈
2、通过在批量交易中选择随机交易块,并配合门限加密来提升交易吞吐量。
下面就分别来详细解释这两种方法的原理
1)交易分割传输
在网络中,批量的交易(总数为 n)需要打包传输给其他节点,作为共识发起方,一个节点需要把打包的交易发送 N - 1 份给其它节点。 如下:
改进的方案是,把总数为 n 的交易分割成 N - 1 分,也就是说,每份包含 n / N - 1 条交易。 如图,把交易分成三个小块,每块发给不同的节点。这样原来一共需要发 3 * n 份交易数据就变成了只需要发送 n 分即可。
其他节点收到了分块的交易之后,分别再从其他节点收取缺失的交易块,这样,节点 A、B、C 之间的带宽就被充分利用了,而减少了 P 作为发起节点的瓶颈,整个系统的性能不会完全受限于 P 节点。
2)随机块的选择以及门限加密
由于 HoneyBadge BFT 是一种异步共识协议,节点之间收到交易是非同步的,随机的。也就是说,每个节点收到来自客户端的交易可以是不同的,交易到达各个节点的时间顺序也是不定的。
各节点收到交易信息之后,会把该交易放入它自身的 Input Buffer 中,后续收到的交易也依次按顺序放入其 Input Buffer。HoneyBadger 网络中是依靠 epochs 来作为时间间隔进行交易打包处理的,在一个 epoch 中,每个节点会从自身的 Input Buffer 中选一批交易,并广播给其它所有节点。最终,每个节点都会有形成一个有相同交易集的交易池,它们是这些节点广播出来的所有交易的并集,也就是 BatchA U BatchB U BatchC U ...。
显然,这个交易池中可能存在重复的、无效的交易,需要剔除。
最终确认哪些交易还需要一个叫做 Binary Byzantine Agreement 的过程,简单来说就是,在所有节点之间进行一轮共识,得到一个最终确认的二进制数值,由这个二进制的对应的位来决定哪个交易会被最终确认。
在进行 Binary Byzanting Agreement 完成之后,会得到一个确定的 Value,根据这个 Value 来确定交易集合。在剔除无效交易和重复交易之后,每个节点就可以立刻确认剩余的交易集(Asynchronous Common Subset )。
需要注意的是,各节点广播时的交易都是按照顺序从自己的 Input Buffer 中取出的,为了防止这种策略被 adversary 节点监控到,从而对诚实节点进行网络干扰阻碍交易的发布和共识,Honey Badger 采用了一种 Random Selective 的优化方式随机选取一批交易。
就是,每个节点从自己的 Input Buffer 中随机选区一批交易,这样的好处有两个,一是可以防止 adversary 了解策略进行干扰或者攻击,二是随机选取一批交易可以很大程度上避免各节点提交的交易出现大量重复。原因是各节点虽然收到的交易顺序不一定一致,但在网络条件差不多的情况下,大部分交易顺序可能是相同的,随机选取而不是都按顺序选取可以避免大量的重复。
门限加密 Threshold Encrytion
因为 Adversary 的存在可能干扰 Binary Byzantine Agreement 的结果。因此,Honey Badger 提出了门限加密的方式来避免最终的交易集受到攻击。
门限加密的原理是允许任何节点使用一把主公钥来加密一条信息,但是解密则需要网络中所有节点来共同合作,只有当 f + 1 个诚实节点共同合作才能获得解密秘钥,从而得到消息原文。在这之前,任何攻击者都无法解密获得消息的原文。
具体过程如下:
由一个第三方的可信节点为每个节点生成公/私钥,使用一把主公钥(master public key)加密原交易信息得到一份 ciphertext,然后每个节点分别使用其私钥 SKi 和这份 ciphertext 得到完整解码秘钥的一个部分σi。
当节点拿到 f + 1 份 σi 时,配合 PK 就可以解密 ciphertext。
性能测试
以下性能测试结果来源于其官方论文截图(本人暂未测试)
官方论文:
https://eprint.iacr.org/2016/199.pdf