|EthWorks:零知识证明与区块链扩展( 三 )


通过二层扩展方案生成的零知识证明首先需要遵守一组预定义规则 。 如果是交易系统 , 这组规则可能类似区块链的共识规则 , 例如 , 每个交易必需署上正确的签名 , 或者用户不得透支等 。 二层系统将规则转化成了一连串数学表达式(电路和多项式) , 然后使用这些数学表达式来创建零知识证明生成过程所必需的两个计算机程序:证明者与验证者 。
|EthWorks:零知识证明与区块链扩展
本文插图

只要有了证明者和验证者 , 我们就可以使用该系统生成并验证交易 。 假设 Alice 的钱包里有 3 ETH, 她想向 Bob 转一笔账 。 她签署了交易 , 交易数据被提交到了证明者手里 。 证明者使用该数据生成了一个零知识证明 , 然后发送给验证者 。 现在让我们考虑以下两个场景 。
2.3.1 生成一个有效的零知识证明
【|EthWorks:零知识证明与区块链扩展】验证者可以在完全不知道交易信息的情况下验证 Alice 是否按照预定义规则执行了交易 。 其中一条规则是 Alice 不能透支 , 因此如果她想转账 2 ETH, 验证者会同意该交易 。
|EthWorks:零知识证明与区块链扩展
本文插图

2.3.2 生成一个虚假的零知识证明
现在 , 假设 Alice 想要发送 5 ETH。 按理说 , 该交易在证明者阶段就会遭到拒绝 。 即使证明者作恶 , 该交易也得不到许可 , 通不过验证者的验证 , 因为它没有按照规定执行 。
|EthWorks:零知识证明与区块链扩展
本文插图

(安比按:读者应该注意到了 , 2.3.1 章节和 2.3.2 章节分别就是零知识证明属性中的 “完备性” 和 “可靠性”:正确的证明必定能够通过验证;错误的证明必定不能通过验证 。 这里并没有用到零知识证明的 “零知识性” 。 因此 , 若不需要满足隐私要求 , 仅仅是为了提高可扩展性 , 则任何满足完备性、可靠性、简洁性(证明体积小)、验证速度快的证明系统 , 实际上都能用作同样的用途 。 因此 , Vitalik 就曾提议 “以 snarks 替换掉 ZK rollup 的 ZK 前缀” , 或者更细致的命名比如 “Validium” , 因为这些方案实际上都没有用到零知识属性 。 包括 StakWare 也一直在强调自己是在利用证明系统(proof system)实现计算完整性(computational integrity)证明 。 但在 “ZK rollup” 深入人心的情况下 , AZTEC 使用零知识证明(提供隐私性)的 rollup 方案 , 只好命名为 “ZK-ZK-rollup” 。 令人唏嘘)
2.4 SNARK vs. STARK
目前为止 , 已经有很多基于零知识证明的密码学证明兴起 , 其中最知名的莫过于 SNARK 和 STARK。 它们之间有着非常重要的联系 。 SNARK 代表的是:

  • 简明性(succinct):该证明远小于其所代表的数据 , 并且可以迅速验证 。
  • 非交互式(non-interactive):证明者只会发送一组信息给验证者 , 因此二者之间不需要来回交互 。
  • 知识论证(argument ofknowledge):从计算层面来说 , 我们认为该证明是完备的 —— 恶意证明者无法欺骗系统 , 除非 TA 确实掌握该知识的具体内容 , 以此支持 TA 提出的证明 。
(安比按:密码学中对 proof(证明方案)和 auguement(论证方案)还有区分 。 方案的可靠性(soundness)要能达到对抗具备无限大计算资源的证明者 , 才能称为 proof;而 arguement 只需能抵御计算能力为多项式的恶意证明者即可 , 不需要能抵御计算能力无穷大的恶意证明者 。 )
可扩展性解决方案所使用的 SNARK 需要在证明者和验证者之间构建可信初始化(trusted setup) 。可信初始化是一组类似游戏规则的初始公共参数 , 由一群志愿参与者在指定时间执行联合计算 , 即 , 所谓的可信初始化仪式(trusted setup ceremony) , 来生成 。 只要有至少一位参与者是诚实的 , 就能安全地生成参数 。 因此 , 参与者人数越多 , 机制的可信度就越高 。


推荐阅读