安全与架构
ZooBC 的安全建立在签名和哈希之上,而不是建立在消耗的能源之上。每个区块、交易、回执和种子证明都有签名,每个节点都会检查它所接受的一切,因此没有节点需要轻信其他节点的任何说法。在这一核心之外,架构还加上了几条牢固的界限:已定案的历史无法改写,新节点能够自行找到真正的链,签名只在一条链上有效。
ZooBC 所设想的攻击者
设计假设攻击者可以运行任意数量的节点和账户,能看到每一条消息,会利用任何逻辑缺陷,并且财力雄厚,但无法伪造签名、无法找到哈希碰撞,也无法买下所有代币。它的目标可能是盗窃、审查、改写历史或扰乱链的运行。参与证明能防御什么 逐一介绍了每种攻击及其应对。
每个节点中的两条链
每个节点都维护两条链。主链每 15 秒产出一个区块,承载交易;其区块由抽签选出的已注册节点产出(见 参与证明)。脊链在 mainnet 上每天产出一个区块,不承载交易:每个区块都是主链的一个检查点、一份加入或退出的节点密钥记录,以及最新状态快照的清单,由三分之二的席位联署。
防御层次
| 层次 | 它保证什么 | 文章 |
|---|---|---|
| 每个节点都验证 | 区块只有在被抽中的出块者签名、且其种子证明、交易和回执都核对无误时才算数 | 参与证明 |
| 平等且有节奏的席位 | 权力无法快速买到:每个席位一份相同的机会,每个周期准入一个 | 参与证明能防御什么 |
| 有上限的回滚 | 任何节点的回滚都不超过 720 个区块(3 小时) | 最终性与回滚 |
| 脊链检查点 | 任何节点都不会在三分之二席位联署的检查点以下进行重组 | 脊链 |
| 经过核对的快速同步 | 新节点加载脊链所指定的状态,检查每个哈希,并向对等节点抽样核对 | 快照与快速同步 |
| 版本锚点 | 新安装会拒绝与其发布版本相矛盾的脊链历史 | 版本锚点 |
| 链绑定签名 | 为一条链签署的交易在其他每条链上都会被拒绝 | 链绑定签名 |
| 三分之二决策 | 检查点、跨链桥转账、预言机事实和发布版本否决需要三分之二的席位 | 三分之二规则 |
| 不可预测的种子 | 任何出块者都无法选择用于挑选下一个出块者的随机性 | 区块种子(VRF) |
| 双签举报 | 在同一父区块上签署两个区块的出块者会被证实并记罚 | 双签(equivocation) |
各层防御相互重叠。例如,从一年前开始改写历史的企图,会在多个层次上各自独立地失败:回滚上限、检查点底线、脊链的联署签名和版本锚点。
多数派能做什么、不能做什么
即使攻击者持有超过一半的席位,它也只能延迟或审查交易,并在 3 小时上限之内替换近期区块。它无法伪造签名、花费他人的币、铸造超出 coinbase 发放计划的币,也无法退到脊链检查点以下,因为每个节点都会自行检查每个区块。
ZooBC 的安全不依赖什么
- 保密。 对等节点之间的流量是明文 gRPC;保护来自签名和验证。
- 能源或硬件。 不需要解任何谜题,也没有哪台机器能带来优势。
- 可信第三方。 没有任何基金会为区块副署,没有任何网站为快照背书,只需一个诚实的对等节点就足以得知最重的链。
另见
本主题下的文章
- 三分之二规则
哪些 ZooBC 决策需要三分之二的已注册席位(脊链区块、跨链桥转账、预言机事实、发布版本否决、规则升级),被暂停的席位如何计算,以及哪些事项无需投票。 - 参与证明能防御什么
ZooBC 在设计上要抵御的攻击者,以及参与证明如何应对每种攻击:购买权力、女巫席位、多数席位、操纵种子、长程改写和日蚀攻击。 - 快照与快速同步
新的 ZooBC 节点如何在不重放每个区块的情况下追上当前状态:脊链中指定的每月状态快照,逐个分块核对,并与对等节点核对。 - 最终性与回滚
ZooBC 节点为了跟随更重的分支最多回滚多远(720 个区块,3 小时),为什么它从不回滚到脊链检查点以下,以及滞留的节点如何重建自身。 - 版本锚点
ZooBC 发布版本可以附带的锚点:一行公开内容,以高度和哈希指定一个脊链区块;节点在启动时检查它,从而绝不在伪造的脊链历史上运行。 - 脊链
每个 ZooBC 节点都维护的、较慢的第二条链:每天一个区块,由三分之二的席位联署,记录主链检查点、节点密钥变更和快照清单。 - 链绑定签名
为什么为一条 ZooBC 链签署的交易无法在另一条链上重放:每个签名都覆盖该链的创世哈希,而创世哈希是 ZooBC 链唯一的身份标识。