2018年2月5日
Zilliqa博客发布,Rita译
Nakamoto共识协议(或PoW)不理想以及为什么Zilliqa需要一个不同的共识协议。Zilliqa使用的共识协议被称为实用拜占庭容错(PracticalByzantine Fault Tolerance),简称pBFT,该协议具有计算成本低、在低能耗的情况下即可赋予交易最终性、提出下个区块无需确认等多个优点。
然而,卡斯特罗和利斯科夫(Castroand Liskov)在其论文(链接https://dl.acm.org/citation.cfm?id=296824)中设计的经典pBFT 只有在共识组(在Zilliqa中指一个分片)较小时,例如少于50个节点,才具有较高的通信效率。当共识组变大,节点之间的通信成本将骤升从而成为效率的障碍。而我们此前的文章提到,Zilliqa中任何分片都必须有至少600个节点才能确保其中拜占庭节点(即恶意节点)的比例低于三分之一的概率非常低。
本文是此系列文章的终篇,我们将讨论经典pBFT协议对通信的要求有多高以及我们如何使用多重签名的方法来降低这个要求。
在本文中,我们将用n来表示共识组的大小, Zilliqa中n假设等于600。
pBFT的通信成本
在此前提到的论文中,经典pBFT要求每个节点与所有其他节点通信共享协议消息,从而对系统状态达成一致。这意味着每个节点都必须发送n条消息,因此总的通信数量为n2,这一通讯成本是很高的。
认证消息的成本
此外,在拜占庭网络中仅仅发送消息是不够的。特别是在一个公开的拜占庭网络中,当节点A接收到来自节点B的消息时,A必须确定该消息确实由B发送,且该消息在传输过程中未被修改,没有这种保证,节点就很难确保消息的真实性,因为黑客可以在中间环节修改消息并给节点提供不正确的信息。
一种验证消息传输的解决方案是在A和B之间生成保密的密钥,然后可以使用该密钥为每个传出的消息生成“标签”。由于只有A和B知道密钥,所以标签只能由A或B生成,从而他们可以验证消息的来源。
消息认证码(MessageAuthentication Code,简称 MAC)是可以生成这种标签的加密方法。构建MAC的一种可能方式是使用加密散列函数(cryptographichash function),该函数将密钥和消息作为输入并生成标签作为输出。
下图显示了发送者和接收者使用MAC的方式。发送者用消息和密钥通过MAC生成标签,并将其与消息一起发送给接收者。接收者再次计算MAC得到一个标签,将之与收到的信息进行比对