如果攻击者控制了足够多的节点,并发动了 liveness attack,那么它有能力进行如下攻击:
(假设 100 个节点,生效要求 34 个签名,坏人控制 40 个节点)
commitQC
60 个好人签名。commitQC
60 个好人签名与自己的 40个签名合并发布。这个攻击类似于 Replay attack, 攻击者通过重放一个古老的签名,来造成 PoW 链上的麻烦。
早在 2018 年 3 月,设计 DAG 共识协议的时候,我们已经通过无数的失败尝试证明:
<aside> ⚠️ PoW 节点无法在出块的时候,对给定 message 是否 timeout 做出一致的判断。
</aside>
也就是说,如果上述攻击行为发生,是没有办法让 PoW
区块们一致地对卡住的 commitQC
撤销的。
所以,摆在我们面前的,只有两种选择:
我并不喜欢方案 2,因为我们为了解决 GHOST 的 balance attack, 已经让协议很复杂了。方案 2 一方面要考虑 GHAST 协议的 feature, 另一方面要应对 balance attack, 无疑是一个大坑。我拒绝刨这个坑。