以太坊拜占庭协议 Casper FFG 的安全性分析 | Sperax 专栏

作者:王永革教授,著名华裔密码学家,北卡罗来纳大学夏洛特分校 (UNC, Charlotte) 计算机系终身教授,德国海德堡大学获得博士学位。
今天我们来探讨以太坊拜占庭协议 Casper FFG 的安全性问题。我们的分析是基于以下论文中的 Casper FFG 协议:

● V. Buterin and V. Griffith. Casper the friendly finality gadget. arXiv preprint arXiv:1710.09437v4, 2019. https://arxiv.org/pdf/1710.09437.pdf

传统的拜占庭协议主要用于复制状态机(state machine replications SMR)环境。区块链的环境不同于复制状态机的环境。所以我们可以给区块链设计比较简化的拜占庭协议。Buterin and Griffith 在如上文章中尝试着设计一种简化的拜占庭协议作为区块最终确定性的小挂件。特别的,Buterin and Griffith 设计了拜占庭协议 Casper the Friendly Finality Gadget (Casper FFG)。在 Casper FFG 中,PoW 系统产生的区块需要得到一些参与者(区块验证者)的投票确认。这样可以防止区块链的分叉。为了简化我们的讨论,我们假定系统里有 n = 3t + 1 个等权重的区块验证者。为了减轻验证的工作量,我们先构造一个检查点树。检查点树的节点仅包括区块链上高度为 100 ∗ k 的区块节点。假定 s 和 t 是检查点树上的两个节点,并且 s 是 t 的祖先。如果一个区块验证者 Pi 认为 s 到 t 的区块可以被确认,Pi 对所有的验证者广播一个签名了的投票 ⟨Pi : s, t⟩。对两个检查点 a 和 b,如果我们收到 2t + 1 个投票⟨P : s, t⟩,那么我们说 a → b 有一个绝对多数的连接。如果我们有一个从根节点 a0 开始的绝对多数的连接链 a0 → a1 → · · · → a,那我们说检查点 a 是合乎情理的。如果我们有一个从根节点 a0 开始的绝对多数的连接链 a0 → a1 → ··· → ai → a 并且 a 是 ai 的亲生子,那我们说检查点 a 是被确认的。

对一个检查点 s,我们用 h(s) 表示检查点 s 在检查点树上的高度。在 Casper FFG 中,一个诚实的区块验证者 Pi 不应公布两个满足以下条件的不同的投票⟨Pi : s1,t1⟩和⟨Pi : s2,t2⟩:

    「h(t1) = h(t2)」或者「h(s1) < h(s2) < h(t2) < h(t1)」

● 如果一个区块验证者 Pi 被发现投出了满足以上条件的两票,那他的押金将被没收。Buterin and Griffith 证明了 Casper FFG 的如下特性: 

● 在 Casper FFG 中,两个相互矛盾的检查点是不可能被同时确认的。所以我们达到了系统的安全性

如果底层的区块链构造机制总能够产生出被确认了的检查点的后代,那么绝对多数的连接链可以总是被延长从而产生新的被确认的检查点。换句话说,系统具有合理活性

为了保证系统的活性,Buterin and Griffith 推荐底层的区块链构造机制使用「correct by construction」的分叉机制:总是去延长最长的合乎情理的检查点。

Buterin and Griffith 的分析认为:如果用户总是定期(比如至少一月一次)的登入系统来获取系统更新,并且从不回复到确认了的区块之前,那么 Casper FFG 可以防止 long-range revision 攻击。Buterin and Griffith 也建议,如果一个区块验证者长期不投票,那么他的押金将逐渐的被没收。这样可以防止机毁人亡的悲剧(比如,由于网络分块,t+1 个区块验证者不能投票)。虽然 Casper FFG 可以解决很多以太坊所面临的问题,Buterin and Griffith 承认网络分块攻击仍然是一个未解决的问题。

在 Buterin and Griffith 的文章中,作者没有讨论他们的网络模型。在同步网络中,Casper FFG 的安全性应该能够得到保证。但是在异步网络中,有些消息可能被推迟到 GST 后才到达,并且有些消息可能会丢失。所以 Casper FFG 在异步网络里的安全性问题需要进行仔细的分析。在以下的段落里,我们给出几个异步网络的情景。在这些情景下,Casper FFG 很可能是无法具有活性的(也就是说 Casper FFG 也可能会处于死机状态)。

1. 假定在时刻 T,检查点 a 被确认 (有一个从 a 到其亲生子 b 的绝对多数连接) 并且还没有区块验证者给 b 的后代检查点投过票。如果一个诚实的节点 Pi 的投票 ⟨Pi : b, c⟩ 被系统丢失了并且所有的 t 个不诚实节点都不给 b 的后代投票。那么没有节点可以得到足够多的投票。这种情形类似于 Casper FFG 所分析的机毁人亡的情景(但是有点不同)。

2. Buterin and Griffith 在他们的文章中,并没有仔细的分析达到其合理活性特征所必备的条件。Buterin and Griffith 只是说 Casper FFG 可以用于大部分 PoW 区块链之上。但是如果我们不给 PoW 机制加入特别的条件,Casper FFG 是可以进入死机状态的(从而达不到其合理活性)。假定在时刻 T,检查点 a 被确认 (有一个从 a 到其亲生子 b 的绝对多数连接) 并且还没有区块验证者给 b 的后代检查点投过票。现在假定底层的区块链构造机制从区块 b 开始分叉。换句话说,b 有两个检查点后代 c 和 d。如果 t 个诚实的区块验证者投票给 c,t+1 个诚实的区块验证者投票给 d,t 个不诚实的区块验证者随机投票。那么从 b 节点起,没有检查点可以被确认。从而产生死机状态。因为所有的区块验证者都在投票,Buterin and Griffith 所建议的防止机毁人亡的机制没发解决这儿的问题。我们的分析指出,在理论上,Casper FFG 并无法防止系统死机状态。也就是说,Casper FFG 不具有活性。但是在实际中,如果检查节点树的构造是以 100 个基本节点为一个单位,并且节点的生成速度足够慢,那么发起以上攻击的可能性比较低(可能性仍然是存在的)。

区块律动 BlockBeats 提醒,根据银保监会等五部门于 2018 年 8 月发布《关于防范以「虚拟货币」「区块链」名义进行非法集资的风险提示》的文件,请广大公众理性看待区块链,不要盲目相信天花乱坠的承诺,树立正确的货币观念和投资理念,切实提高风险意识;对发现的违法犯罪线索,可积极向有关部门举报反映。