联盟链共识算法说明
对于区块链应用场景,需要共识算法具有如下特性:
- Throughput吞吐量:transaction per second 意味着区块链系统每秒能处理的交易笔数,为了能够满足全球用户,交易处理速度必须足够大,否则会造成交易积压,并导致回复时间长。比如 bitcoin 的交易拥堵和以太坊因为 crytokitties 造成的网络拥堵。
- Latency交易延时:交易从提交到回复成功与否的时间。在 PoW 网络中,因为有分叉可能,一般要等待几个块后确定。在 BFT 共识系统中,因为正确节点都在共识结束后就确定性有相同结果,所以在交易不拥堵的情况下,响应速度与共识时间相同。
- Scalability:区块链系统参与的节点数。对基于 PoW 共识的系统,安全度与参与的诚实算力相关。对于基于 BFT 共识的系统,参与节点数越多,能容纳的恶意节点越多,恶意节点少于 1/3。但是对于 BFT 系统,节点越多,通信和计算开销越大。Algorand 提出利用 Verifiable Random Function 随机选出一部分节点形成 committee参与共识,保证了无论总节点数多大,最后的 committee 数目一定,共识速度就不变。
- Security:对于 BFT 共识,安全度包含 consistence,liveness 和 fairness。Consistence 是系统内所有诚实节点要最终达到相同的状态。Liveness 需要系统在任意情况下都能收敛到确定状态,并且能持续接受交易,产生正确的共识结果。Fairness 在于对于系统的用户,任意合法的交易都不会被拒绝。
对于传统的 PBFT 系统,需要假设网络处于弱同步状态,通过超时和换主来保证 liveness。但是因为换主是确定性地换到预先设定的下一个节点,而且每次换主导致的节点消息同步耗时长,主节点会被连续不断的网络攻击导致瘫痪,最终系统持续换主,永远无法共识交易,相当于停滞状态。
对此,Tendermint 提出由 Voting Power 值决定,从而避免了一直由主节点提交请求,一定程度上避免了攻击的薄弱点。但是这依然无法避免Leader节点的可预测性,导致被依次攻击,系统每轮共识无法完成。
Honey Badger 提出了基于 RBC(Reliable Broadcast)和 BA(Binary Agreement)的协议。核心在于任意节点都可以提出共识消息,通过 RBC 可靠传播到所有节点,并且为了减小广播带宽,通过 erasure code 分割消息为多份。同时所有节点都通过 BA 协议共识所有消息,BA 协议的执行会在任意情况下快速收敛到 1 或者 0,表示对共识消息的接受与否。该协议相当于每一轮,所有节点并行地提出交易、共识,最终得到交易的子集作为共识结果。所以对任意一个节点的攻击,都不会造成整个网络的崩溃,只会影响网络部分性能。而且能充分利用带宽,适合全球部署。该协议的缺点在于交易响应延时比较高,因为每轮要共识多个节点的交易。同时协议需要预先确定节点的集合,不能动态添加节点,不能支持大规模节点。
为了解决节点添加和扩充节点的问题,Algorand 提出将 VRF(Verifiable Random Function)和 BA 结合起来。无论节点数目多少,通过 VRF 和持有的代币数随机选出特定数目节点,然后节点通过 BA 相互发送交易,并对优先级最高(VRF 随机数最小)的节点发出的交易共识。为了提高安全性,共识的每一步都通过 VRF 选出新一轮共识节点,从而让攻击者无法预测下一个攻击目标。该协议的主要有点在响应时间短,缺点在于无法做到高吞吐量和窄带宽。
Dfinity 主要是通过 threshold 签名来保证 VRF 的每一轮都能确定性地收到 signature。结合Random Beacon 和 Notaries 来使每一轮的成员都随机选择,并且提交的块按照本轮随机数进行排名。但是一个潜在的经济学博弈问题是,threshold 签名可以通过多个成员的合谋的方法来预测,合谋的成员可以协同计算出群私钥,快速预测出下一轮的随机数。通过作恶 DoS 攻击下一轮的成员的目的,合谋者可以破坏网络的公平性。因为这种攻击是不容易被发现的,所以可以做到零成本收益,因而在现实世界必然会出现。