参与证明能防御什么
参与证明在设计时针对的是一个强大的攻击者:它可以运行任意数量的节点和账户,能看到网络上的每一条消息,会利用逻辑中的任何缺陷,而且财力充足。设计只假设攻击者无法伪造签名、无法找到哈希碰撞、无法买下所有代币。面对这样的攻击者,参与证明旨在防止四件事:盗窃、审查、改写历史和扰乱链的运行。本页逐一介绍主要攻击以及应对它们的规则。
购买出块权
在工作量证明中,权力跟随硬件;在权益证明中,权力跟随币。两者都可以很快买到。在参与证明中,每个未被暂停的已注册席位被抽中产出下一个区块的机会都相同,与其余额或硬件无关(见 抽签)。仅靠币和机器什么也买不到:权力需要席位。
席位只能通过队列获得,节奏由协议设定。第一个新成员在创世 7 天后加入。此后,每次准入都会设定下一次的等待时间:600 天除以该新成员加入之前的计入席位数,并限制在 7 到 90 天之间。创世席位最多按 11 个计算,被暂停的席位不计入。有 11 个席位时,等待时间约为 54.5 天,因此第二个新成员大约在第 61.5 天到来。队列按质押乘以等待时间排序,因此攻击者还必须出价压过诚实的申请者。
女巫身份
女巫攻击者通过创建大量身份来获取影响力。在参与证明中,一个身份就是一个注册表席位,而每个席位都有实实在在的成本:
- 资金。 锁定的质押至少达到队列最低额,该最低额起始为 100 ZBC(席位可以投票把它设定在一个原子单位到 250 ZBC 之间,而在入队时,排队质押中位数的一半可能将其抬高)。其中 10% 面临风险。
- 时间。 在按质押 × 等待时间排序的队列中占一个位置,以及有节奏的准入:新成员之间相隔数周或数月。
- 工作。 新席位的参与分数从 20% 起步,在成熟之前没有任何收入:成熟条件是准入后积累 4 个分数单位,再加上自己产出的一个区块,在节点少于 2,880 个时为 2 天。之后它必须持续完成自己的轮次并转发。
陷入沉默的席位被计为缺席,没有收入,分数下降;分数降到零时被除名,其锁定金额的 10% 归入长效池。在缺席或被暂停期间退出,或者退出队列,同样会损失这 10%。状态良好时退出,则在 7 天冷却期后退还全部锁定金额。见 错过轮次、暂停与除名 和 退出注册表。
多数席位
假设攻击者确实控制了一半以上的席位。它会产出大部分区块,并能构建最重的分支,这正是在任何以最重链为准的设计中多数所能买到的东西。它可以:
- 通过把交易排除在自己的区块之外,来延迟或审查交易;
- 通过构建更重的分支,在回滚上限之内替换近期区块。
它无法伪造任何东西。每个节点都会检查每个区块:每笔交易的签名、每个区块的种子证明、每张回执以及每笔 coinbase 金额。多数派无法花费它不持有密钥的账户的 ZBC,无法给自己支付超过固定 coinbase 发放计划的金额,也无法改写早于 720 个区块(3 小时)或位于最近脊链检查点以下的历史(见 最终性与回滚)。在跳过的轮次之后产出的区块权重也更轻,闲置的席位会失去收入和分数。
操纵种子
驱动每次抽签的种子是可验证随机函数的输出:出块者无法在多个值中挑选它。出块者唯一的手段是扣下自己的区块,这会让它付出一次错过轮次以及收入和分数的代价,而且只是把种子交给下一个被抽中的节点(见 区块种子(VRF))。
从久远的过去改写历史
长程攻击从遥远的过去开始构建一段不同的历史,例如使用早已退出注册表的节点的旧密钥。以下每一项防御都能单独阻止它:
- 运行中的节点回滚从不超过 720 个区块;
- 任何节点都不会在脊链上最近联署的检查点以下进行重组;
- 新节点跟随脊链,而脊链区块需要三分之二席位的签名,且脊链记录了哪些节点密钥加入、哪些退出,因此早已退出的密钥不在其签名者名单上;
- 新节点安装的发布版本可以携带一个版本锚点,因此伪造的脊链历史会在启动时被拒绝。
密钥不会过期,也没有人手工审查分支。
日蚀攻击
在日蚀攻击中,攻击者用自己的对等节点包围一个节点,使该节点只能看到攻击者的链。对已注册节点来说,这很难做到。它的指派的对等节点(mainnet 上为 12 个)由一个周期区块的种子抽取,并每 40 个区块(约 10 分钟)重新抽取一次,因此攻击者无法选择它们(见 回执与网络拓扑)。对等节点在签名握手中证明自己的节点密钥,握手中还包含该链的创世哈希。而且一个诚实的对等节点就足够了:分叉选择以权重为准,所以只要有一个连接报告了更重的分支,节点就能获取它并逐块检查。链顶已经陈旧的节点会跟随已注册对等节点样本中三分之二所报告的链顶。
对等节点之间的流量以明文 gRPC 传输,不加密:保护来自签名和验证,而不是来自保密。
其他攻击
- 对区块双签会被 EquivocationReport 证实,并按一次错过轮次记罚(见 双签(equivocation))。
- 在另一条 ZooBC 链上重放已签名的交易会失败,因为每个签名都覆盖该链的创世哈希(见 链绑定签名)。
- 伪造的快照会被联署脊链中指定的哈希,以及与已注册对等节点核对的样本识破(见 快照与快速同步)。