链上可信设置仪式

这篇文章深入探讨了去中心化的可信设置仪式,介绍了如何通过智能合约在以太坊区块链上进行这一过程,以生成可用的密码学参数。文章还讨论了可信设置的历史、现有仪式的技巧与局限,并提供了治理仪式的思路和开源库,强调了在数字货币项目中保障安全性的重要性。

可信设置仪式是加密社区的痛苦 - 也是兴奋之一。仪式的目标是生成值得信赖的加密密钥,以保护加密钱包、区块链协议或零知识证明系统。这些(有时漂派)的程序通常是一个项目安全性的信任根源,因此将其做到正确极其重要。

区块链项目以多种创意方式进行仪式——涉及喷枪、放射性粉尘和飞机,但它们都有一个共同点:都涉及一个集中的协调者。通过这项工作,我们展示了如何将该过程去中心化,通过用智能合约替代中心化协调者。此外,我们还开源了一个库,允许任何人运行这样的仪式——被称为 Kate-Zaverucha-Goldberg (KZG) 或“tau的幂”仪式——在以太坊链上。任何人都可以通过支付交易费用参与其中!

我们的去中心化方案有局限性,但依然是有用的。由于当前链上数据的限制,加密参数的大小必须保持简短,即不超过 64 KB。但是参与者的数量没有上限,人们可以不断提交贡献。这些短参数的应用包括小型零知识 SNARK、数据可用性采样Verkle trees

可信设置仪式的历史和机制

在典型的可信设置仪式中,一组参与者将协作生成一组加密参数。每个参与方使用秘密信息(在本地生成)来生成数据,以帮助创建这些参数。正确的设置确保机密信息不泄露,机密信息仅根据协议的指定使用,并且这些机密在仪式结束时完全销毁。只要仪式中的至少一方表现诚实、未被破坏并销毁其本地机密,则整个设置可以被视为安全。(当然,这假设数学是正确的,代码没有错误。)

一些最突出的仪式是由 Zcash 进行的,这是一个以隐私为导向的区块链项目。这些仪式的参与者生成了公共参数,旨在允许 Zcash 用户构建和验证私密的加密交易。六位参与者在 2016 年进行了第一次 Zcash 仪式 Sprout。两年后,加密研究员 Ariel Gabizon(目前是 Aztec 的首席科学家)发现了 一个致命的漏洞,该漏洞源自一篇 基础研究论文。该漏洞可能使攻击者在不被检测的情况下创建无限的 Zcash 货币。Zcash 团队在七个月内秘密维护该漏洞,直到针对 90 位参与者的系统升级 Sapling 解决了这个问题。尽管基于该安全漏洞的攻击不会影响用户交易的隐私,但无限伪造的前景削弱了 Zcash 的安全前提。(理论上我们无法确定是否发生了攻击。)

另一个值得注意的可信设置示例是为 Semaphore 设计的 永久“tau的幂”仪式,这是一项在以太坊上用于匿名信号传递的隐私保护技术。该设置使用 BN254 椭圆曲线,到目前为止已有 71 位参与者。后来的其他杰出项目也利用该设置进行自己的仪式,包括 Tornado.Cash(近期已受到美国政府制裁)、Hermez 网络以及 LoopringAztec 在 BN254 曲线上协调了一次类似的仪式,以创建用于 PLONK zk-snarks 的通用公共参考字符串 (CRS)。作为一个“二层”以太坊扩展方案,zkSync 参与了该仪式,并使用该 CRS 来支撑其零知识汇总的安全性。去中心化数据存储协议 Filecoin 在第一次和第二次阶段分别进行了有 19 和 33 位参与者的仪式,该仪式分叉自原始仓库。区块链 Layer-1 项目 Celo 也为其轻客户端 Plumo 进行了一次仪式。

永久仪式的参与者数量没有上限。换句话说,与其信任他人进行可信设置仪式,任何人都可以根据自己的安全满意度参与其中。一个值得信赖的参与者可以确保所有生成参数的安全;链条的强度取决于它最强的环节。正如名字所暗示的,永久仪式可以一直进行,就像最初的 tau 的幂仪式的前提那样。尽管如此,项目通常会决定其仪式的具体开始和结束时间,这样他们可以将生成的参数嵌入到其协议中,而不必担心持续更新。

以太坊计划为即将到来的 ProtoDankShardingDankSharding 升级运行一场较小的可信设置仪式。这两项升级将增加以太坊链向客户端提供的存储数据量。这些数据的有效期为建议的 30 到 60 天。该仪式正在 积极开发中,并计划于明年初运行六周。(有关详细信息,请参见 kzg-ceremony-specs)。这将成为迄今为止区块链上运行的最大可信设置仪式。

在可信设置仪式方面,偏执是一种美德。如果机器的硬件或软件被破坏,那就可能削弱它生成的机密的安全性。狡猾的侧信道攻击泄露机密也难以排除。例如,手机可以通过 记录声波 来窃听计算机的操作,例如 CPU 振动的音波。实际上,由于消除所有可能的侧信道攻击(包括尚未发现或披露的攻击)是极其困难的,甚至有人提出将机器送往太空进行 仪式

目前,严肃仪式参与者的操作手册通常如下所示:购买一台新机器(无污染硬件)。通过移除所有网络卡将其与网络隔离(以防止本地机密离开机器)。在远程不公开的地点的法拉第笼中运行机器(以阻止窃听者)。用大量熵和硬复制数据填充伪随机秘密生成器,例如随机键击或视频文件(使机密难以破解)。最后,通过燃烧一切成为灰烬,摧毁机器及任何机密痕迹。😀

协调可信设置仪式

以下是来自一些之前可信设置仪式参与者的有趣引言:

  • …喷枪被用来系统地加热电子部件,直到每一个都变黑…” — Peter Todd 谈论物理销毁本地机密。
  • “我这里有一块布,上面有来自[切尔诺贝利]反应堆核心的石墨粉…你每四个脉冲(从连接到微控制器的计数器)计数一次,并比较第一个和第二个脉冲之间的时间间隔以及第三个和第四个脉冲之间的时间间隔,如果更大则得到零,如果更小则得到一。” “…我们即将乘坐这架飞机生成我们的随机数…”Ryan Pierce 和 Andrew Miller 讨论秘密生成。

Zcash powers-of-tau 仪式第 41 轮涉及了一架飞机。截屏:YouTube 视频

  • 销售员说他们有 13 台[计算机]。我问我们是否可以挑选其中一台。他问我是否特别想要哪一台(感到困惑,因为它们都是一样的),我说我只想随机挑选一台。他说他不能让我们进入后面的仓库。我问他是否可以把二台拿出来让我们挑一台。他让我们在手推车上拿出两台。杰瑞选择了这两台中的一台,我们把它拿到了收银台结账” — Peter Van Valkenburgh 讨论获得新机器的经历。
  • 仪式的头几个小时是在由铝箔和保鲜膜制成的临时法拉第笼中进行的。我把笔记本电脑从法拉第笼中移出来,因为它通风不良,变得很热” — Koh Wei Jie 谈论侧信道保护。
  • ..在没有邻居的山区进行仪式的一个部分.” — Micheal Lapinski 谈论侧信道保护。
  • 我选择使用周围的视频生成足够的熵” — Muhd Amrullah 谈论随机值的生成。

扎·威尔科克斯,Zcash 联合创始人 Zooko·威尔科克斯的弟弟,销毁 2016 年用于生成随机数的计算机。照片:Morgen Peck

所有这些仪式都依赖于一个集中协调者。协调者是一个个人、私人服务器或其他被信任的实体,负责登记和排序参与者,作为中继将信息从前一参与者转发给下一位,并保留所有通讯的集中日志以供审计之用。协调者通常还负责将该日志永久公开给公众;当然,使用集中系统,总有可能数据丢失或管理不当。(例如,perpetual-powers-of-tau 被存储在 Microsoft Azure 和 Github 上。)

我们觉得讽刺的是,当去中心化是加密理念的核心原则时,加密项目却必须依赖中心化的可信设置仪式。因此,我们决定示范直接在以太坊区块链上运行小型仪式的可行性!该设置完全去中心化、无需许可、抗审查,只要参与者中的任何一个诚实,它就是安全的[见 免责声明]。参与该仪式的成本仅为 292,600 到 17,760,000 gas(按当前价格约为 7 到 400 美元),具体取决于所需生成参数的大小(在本例中介于 8 和 1024 的 tau 幂)。 (有关具体成本,请参见下表——我们稍后会深入讨论这些计算。)

目前,我们建议不要将代码用于实验以外的任何用途!我们非常感谢任何发现代码问题的人向我们报告。我们希望收集有关我们方法的反馈和审核。

理解 KZG 或 'tau的幂'仪式

让我们探索最受欢迎的可信设置之一,称为 KZG 或“tau的幂”仪式。感谢以太坊联合创始人 Vitalik Buterin,他的 关于可信设置的博客文章 启发了我们在这一部分的想法。该设置生成 tau 的幂的编码,因此命名是因为 tau 恰好是用于表示参与者生成的机密的变量:

pp = [[𝜏]1, [𝜏2]1, [𝜏3]1, …, [𝜏n]1;    [𝜏]2, [𝜏2]2, …, [𝜏k]2]

对于一些应用(例如 Groth16, JIDS 斯基姆 由 Jens Groth 在 2016 年设计),此设置的第一阶段后面跟随第二阶段,即多方计算(MPC)仪式,该仪式为特定 SNARK 电路生成参数。然而,我们的工作仅关注第一阶段。这个第一阶段——tau的幂的生成——已经作为通用 SNARK 的基础构建块非常有用(例如 PLONK 和 SONIC),以及其他加密应用,如 KZG 承诺Verkle trees数据可用性采样 (DAS)。通常,通用 SNARK 参数应非常大,以便能够支持大型有用电路。包含更多门的电路通常更有用,因为它们可以捕捉大型计算;tau的幂的数量大约对应电路中的门数。因此,典型的设置大小为 |pp| = ~40 GB,能够支持 ~228 门的电路。鉴于以太坊目前的限制,把这样大型的参数放在链上都是不切实际的,但可以在链上合理地运行一个针对小型 SNARK 电路、Verkle trees 或 DAS 的较小的可信设置仪式。

以太坊基金会计划在 [中文] 运行多个较小的 仪式,以生成大小为 200 KB 到 1.5 MB 的 tau 的幂参数。虽然较大的仪式可能看起来更好,因为较大的参数可以创造更有用的 SNARK 电路,但实际上,越大并不一定越好。某些应用程序(如 DAS)特别需要较小的一个![这个原因非常技术性,但如果你有好奇的话,这是因为一个具有 n 的幂(在 G1 中)的设置仅启用 KZG 对多项式的承诺,最高度 ≤ n,这对于确保 KZG-承诺底下的多项式可以从任何 n 个评估中重建这个特性至关重要。 这种属性使得数据可用性采样成为可能:每次成功获得 (采样) 的多项式可能的 t 随机评估都会给予一个概率 t/n,来确保可以完全重建多项式。如果你想了解更多关于 DAS 的信息,可以查看 Buterin 在以太坊研究论坛上的 帖子]

我们设计了一个智能合约,可以在以太坊区块链上部署以运行可信设置仪式。该合约将公共参数(tau 的幂)完全存储在链上,并通过用户的交易收集参与。

一个新参与者首先读取这些参数:

pp0 = ([𝜏]1, [𝜏2]1, [𝜏3]1, …, [𝜏n]1;    [𝜏]2, [𝜏2]2, …, [𝜏k]2),

然后采样一个随机秘密 𝜏’ 并计算更新的参数:

pp1 = ([𝜏𝜏’]1, [(𝜏𝜏’)2]1, [(𝜏𝜏’)3]1, …, [(𝜏𝜏’)n]1;    [𝜏𝜏’]2, [(𝜏𝜏’)2]2, …, [(𝜏𝜏’)k]2),

并在线上发布证明,证明三个事情:

  1. 离散对数的知识:参与者知道 𝜏’。(证明最近对可信设置仪式的贡献所基于的所有前参与者的工作。)
  2. pp1 的良好格式: 元素确实编码增量的幂。(验证新参与者对仪式贡献的良好格式。)
  3. 更新没有消失:𝜏’ ≠ 0。(防止攻击者通过删除所有参与者的过去工作来削弱系统。)

智能合约验证该证明,如果验证正确,它会更新存储的公共参数。关于其数学和推理的更多细节请见 github repo

计算 gas 成本

在链上运行设置的主要挑战是使可信设置仪式尽可能节省 gas。理想情况下,提交一个贡献不应超过大约 $50。(大型项目可能能够为贡献者补贴 gas,这样每个参与者花费 100 美元更容易想象。)下面,我们提供关于设置中最昂贵部分的更多细节。降低 gas 成本将减少贡献的成本,并允许构建更长的参数(更多的 tau 的幂和更大的 SNARK 电路)!

我们的设置适用于椭圆曲线 BN254(也称为 BN256、BN128 和 alt_bn128),它在以太坊上支持以下预编译合约 EIP-1108

  • ECADD 允许两个椭圆曲线点相加,即从 [𝛼]1 和 [𝛽]1 计算 [𝛼+𝛽]1:gas 成本 150
  • ECMULT 允许椭圆曲线点乘以标量,即从 a 和 [𝛼]1 计算 [a*\𝛼]1:gas 成本 6,000
  • ECPAIR 允许检查椭圆曲线配对的乘积,即计算 e([𝛼1]1, [𝛽1]2)* … *e([𝛼1]1, [𝛽1]2) = 1,相当于检查 𝛼1*\𝛽1+ … + 𝛼k*𝛽k = 0:gas 成本 34,000 * k + 45,000

如果以太坊能够支持 BLS12_381 (如在 EIP-2537 中提议的),我们的设置合约也可以轻松适应这个其他曲线。

让我们估算将设置更新到([𝜏]1, [𝜏2]1, [𝜏3]1, …, [𝜏n]1;    [𝜏]2) 的 gas 成本:

  1. 验证证明的 gas 成本。每个参与者更新设置并提交带有三部分内容的证明,如上所述。证明的第 1 和第 3 部分——“离散对数的知识”和“更新不是消失的”——非常便宜验证。挑战在于在链上验证组件 2,“pp1 的良好格式”。它需要大型多标量乘法(MSM)和两个配对:

e(𝝆0[1]1 + 𝝆1[𝜏]1 + 𝝆2[𝜏2]1 + … + 𝝆n-1[𝜏n-2]1, [𝜏]2) = e([𝜏]1 + 𝝆1[𝜏2]1 + … + 𝝆n-1[𝜏n-1]1, [1]2),

其中 𝝆0,…,𝝆n-1 是伪随机抽样的标量。在预编译智能合约方面,需要:

(2n-4) x ECADD + (2n-4) x ECMULT + ECPAIRk=2 = (2n-4) x 6,150 + 113,000 gas。

  1. 存储数据的 gas 成本。每个参与者还将更新存储为 calldata (每字节 68 gas) 的数据存储在链上,合计为 n*64*68 gas。(对于熟悉椭圆曲线加密的人来说:存储压缩点将使解压缩占主导地位,正如我们对于 n=256 的测量。)

这使我们对以下表格估算 gas 成本,应该为未来的优化提供信息:我们正在探索降低 gas 成本的解决方案,请保持关注!

开源库:evm-powers-of-tau

我们已在 github.com/a16z/evm-powers-of-tau 上开源了基于 EVM 的 tau 的幂仪式库。使用我们的策略进行仪式操作简单透明:

  1. 部署存储和验证合约 (contracts/KZG.sol)
  2. 贡献者从之前交易的 calldata 中读取仪式参数
  3. 贡献者在本地生成一个秘密,计算更新的参数
  4. 贡献者生成他们的证明:pi1, pi2
  5. 贡献者通过 KZG.potUpdate() 将更新的参数提交到公共区块链上已部署的智能合约
  6. 智能合约将验证更新的有效性,如果提交格式错误将回退
  7. 多个贡献者可以不断在步骤 2-5 中参与,各自增加仪式的安全性
  8. 一旦开发者对提交的数量和质量充满信心,他们可以查询区块链以获取当前参数,并使用这些值作为他们的加密密钥

我们的库使用 arkworks-rs 来计算步骤两和三(rust 计算内容可见于 src/pot_update.rs),但用户可能希望自己编写。整个更新提交的端到端流程可以在 tests/integration_test.rs 的集成测试中找到。

请注意,我们选择使用 calldata 存储更新的 tau 的幂参数在链上,因为这是存储成本的几个数量级更便宜。针对这些数据的 ethers-rs 查询可以在 src/query.rs 中找到。

最后,证明和详细的方程可以在技术报告中找到:techreport/main.pdf

未来的工作

在这个可信设置仪式可以用于生产之前,我们建议首先对数学证明和样本实现进行全面审计。

在实现方面,更新仪式的交易成本随设置大小线性增长。对于大多数应用(SNARK、DAS),我们希望的设置是 n >= 256,目前每次更新成本为 73 美元。

我们可能能够通过 STARK 证明有效更新计算和对更新值的向量承诺,来实现次线性验证成本的增长。这一构造还将去除对以太坊 L1 BN254 预编译的依赖,从而启用使用更流行的 BLS12-381 曲线。

所有仪式策略都有权衡。我们认为这个构造是稳固的,并具有出色的可验证抗审查属性。但我们仍然建议在做更多工作验证我们方法的合理性之前,不要使用这种方法。

致谢

  • Dan Boneh – 在该工作早期阶段提供有用反馈
  • Joe Bonneau – 澄清早期版本的技术报告中的阐述
  • William Borgeaud – 讨论 BLS 在 TurboPlonk / Plonky2 中的内容
  • Mary Maller – 关于该方法机制的一般思考

编辑:Robert Hackett @rhhackett


  • 原文链接: a16zcrypto.com/posts/art...
  • 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
点赞 0
收藏 0
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
Valeria Nikolaenko
Valeria Nikolaenko
江湖只有他的大名,没有他的介绍。