作者:Valeria Nikolaenko和Sam Ragsdale
可信度的设置仪式是加密货币社区的痛点,也是兴奋点之一。该仪式的目标是生成一个可信的加密密钥,以确保加密货币钱包、区块链协议或零知识证明系统的安全性。这些(有时是浮夸的)程序往往是特定项目安全的信任基础,因此正确处理它们非常重要。
区块链项目以许多创造性的方式举行,涉及喷灯、放射性尘埃和飞机,但它们都有一个共同点:它们都涉及一个集中的协调者。通过这项工作,我们展示了如何通过用智能契约代替集中式协调器来分散这个过程。此外,我们正在开放一个图书馆,允许任何人在以太坊链上运行这样的仪式(被加密货币从业者称为Kate-Zaverucha-Goldberg —— kzg)或“power-of-tau”仪式。任何人只要交交易费就可以参与!
我们的去中心化方法有局限性,但还是有用的。由于当前链中数据的限制,加密参数的大小必须保持较短,即不超过64KB。但是参与人数没有上限,人们可以永久地继续提交贡献。这些短参数的应用包括小的零知识SNARKs、数据可用性抽样和Verkle树。
可信设置仪式的历史和机制在典型的可信设置仪式中,一组参与者将合作生成一组加密参数。每个参与者使用本地生成的秘密信息来生成有助于创建这些参数的数据。正确的设置可以确保秘密不被泄露,秘密只在协议规定的范围内使用,并且这些秘密在仪式结束时被完全销毁。只要仪式中至少有一方诚实行事,没有被破坏,并且破坏了它的局部秘密,整个设置就可以被认为是安全的。(当然,这是假设数学是正确的,并且代码中没有错误)。
一些最著名的仪式由Zcash举办,这是一个注重隐私的区块链项目。这些仪式的参与者产生了公共参数,这些参数是为Zcash用户建立和验证私人加密货币交易而设计的。六名参与者在2016年举行了第一次Zcash仪式,Sprout。两年后,加密货币研究人员Ariel Gabizon(现为阿兹特克首席科学家)在仪式的设计中发现了一个毁灭性的缺陷,该缺陷是从一篇基础研究论文中继承下来的。此漏洞可让攻击者在不被发现的情况下创建无限的Zcash硬币。Zcash团队将这个漏洞保密了7个月,直到系统升级,Sapling(其仪式有90人参与)才解决了问题。虽然基于安全漏洞的攻击不会影响用户的交易隐私,但无限欺诈的前景破坏了Zcash的安全前提。(理论上不可能知道是否发生了攻击)。
可信设置的另一个值得注意的例子是主要为Semaphore设计的永久“power-of-tau”仪式,Semaphore是以太坊中用于匿名信件的隐私保护技术。此设置使用BN254椭圆曲线。迄今为止,共有71名参与者。其他著名的项目后来也用这个设置在上面运行他们自己的仪式,包括龙卷风。Cash(最近被美国政府制裁)、Hermez Network和Loopring。Aztec在BLS12_381的椭圆曲线上为zkSync运行了一个类似的仪式,有176个参与者,这是一个“第二层”以太坊扩展解决方案,使用零知识rollups。Filecoin,一个去中心化的数据存储协议,第一阶段和第二阶段分别有19个和33个参与者,有一个分叉原始回购的仪式。一线区块链Celo也为他们的轻客户端Plumo举行了仪式。
参加永久仪式的人数没有限制。换句话说,任何人都可以参与其中,以满足他们任何程度的安全,而不是信任其他人来运行一个可信的设置仪式。可信的参与者确保所有结果参数的安全性;这条链子的强度取决于它最强的一环。顾名思义,永久仪式可以永久运行,就像最初的“头权仪式”的前提一样。也就是说,项目通常决定他们的仪式有一个特定的开始和结束时间,这样他们可以将生成的参数嵌入到他们的协议中,而不用担心不断更新它们。
以太坊计划为即将到来的ProtoDankSharding和DankSharding升级运行一个小型的可信设置仪式。这两次升级将增加以太坊链提供给客户的存储数据量。这些数据的建议有效期为30至60天。仪式正在积极筹备中,计划在明年年初进行六周。(更多细节见KZG-仪仗-规格:https://github.com/ethereum/kzg-ceremony-specs/)这将是迄今为止最大的区块链托管设置仪式。
说到可信的设置仪式,偏执是一种美德。如果机器的硬件或软件被破坏,其生成的秘密的安全性也将被破坏。也很难排除泄露秘密的偷偷摸摸的侧门攻击。比如手机可以通过记录CPU振动的声波来监控电脑的运行情况。在实践中,由于很难排除所有可能的侧信道攻击,包括那些尚未被发现或披露的攻击,一些人甚至提议将机器飞向太空,并在那里举行仪式。
目前,严肃仪式参与者的游戏规则通常如下。买一台新机器(无污染的硬件)。通过移除所有网卡来实现空气隔离(防止本地机密离开机器)。在一个偏远的秘密地点,在法拉第笼中运行机器(以挫败潜在的窥探)。使用大量熵和难以复制的数据(如随机密钥或视频文件)作为伪随机秘密生成器的种子(使秘密难以破解)。最后,摧毁机器(连同任何秘密痕迹),将一切烧成灰烬。
协调可信设置仪式以下是之前可信设置仪式参与者的一些有趣语录:
\”.用喷灯有条不紊地把电子产品一块一块地加热,直到所有东西都被烧成黑色……——彼得托德从肉体上摧毁了当地机密。“我这里有一块布,上面有切尔诺贝利反应堆核心的石墨粉.每四个脉冲计数一次(从连接到微控制器的盖革计数器),比较脉冲1和2之间以及脉冲3和4之间的时间间隔。如果它更大,你得到一个零,如果它更小,你得到一个一”。\”.我们即将登上这架飞机,生成我们的随机数……”——瑞安皮尔斯和安德鲁米勒谈论秘密一代。第41轮Zcash的头权仪式包括一架飞机。
“销售人员说他们有13台电脑。我问我们是否可以从这13个电台中选择一个。他问我是不是在找什么特别的东西(因为都一样所以很混乱),我说我只是想随便挑一个。他说他不能让我们进后面的仓库。我问他能不能拿出两个,让我们选一个。他用手推车运出了两套。杰瑞从这两台电脑中选了一台,我们把它拿到收银台结账。—Peter Van Valkenburgh谈论购买新机器。“仪式的最初几个小时是在一个由铝箔和塑料包装制成的临时法拉第笼中进行的。我把笔记本电脑搬出了法拉第笼,因为它通风不良,感觉非常热”。——Koh韦杰谈侧通道保护。\”.部分仪式在山上举行,没有邻居”。——Micheal Lapinski谈论侧信道保护。\”我选择使用周围的视频来产生足够的熵.\”——Muhd Amrullah讲随机值的生成。Zcash的联合创始人佐科威尔科克斯(Zooko Wilcox)的弟弟扎威尔科克斯(Za Wilcox)在2016年破坏了一台用于为可信的仪式生成随机数的计算机。
所有这些仪式都依赖于一个集中的协调者。协调者是个人或私人服务器或一些其他实体。他们被委托登记和安排参与者,作为中继,将前一个参与者的信息转发给下一个参与者,并为可审计目的保存所有通信的集中日志。通常,协调者还负责永久地向公众提供日志;当然,在集中式系统中,总是存在数据丢失或管理不当的可能性。(例如,Perpetual-power-of-tau存储在微软Azure和Github上)。
我们发现具有讽刺意味的是,当去中心化是加密货币精神的核心原则时,加密货币项目必须依赖于集中和可信的设置仪式。因此,我们决定证明在以太坊区块链直接举行小型永久力量仪式的可行性。这种设置是完全分散的、未经授权的、反审查的,只要任何参与者是诚实的,它就是安全的(见免责声明)。参加仪式的费用仅为292,600至17.76天然气(按目前价格计算约为7至400美元),取决于所需结果参数的大小(在这种情况下为8至1,024次方)。(具体费用见下表3354。我们将在文章的后面更详细地介绍这些计算方法)。
目前,我们建议不要将代码用于实验目的以外的其他目的。如果任何人发现代码中有任何问题,请向我们报告,我们将非常感谢。我们希望收集反馈并审核我们的方法。
了解KZG或“头的力量”仪式
让我们来探索最流行的信任设置之一,即所谓的KZG(tau的力量)仪式。感谢以太坊的联合创始人Vitalik Buterin,他关于可信设置的博文为我们这一节的思考提供了参考。这个设置生成了tau的幂的编程,之所以命名为“tau”是因为“tau”恰好是一个用来表示参与者生成的秘密的变量。
pp=[[]1,[2]1,[3]1,[n]1;[]2, [2]2,[k]2]
对于某些应用(例如Groth16,Jens Groth在2016年设计的一个流行的zkSNARK证明方案),第一阶段的设置后面是第二阶段,即多方计算(MPC)仪式,它为特定的SNARK电路生成参数。然而,我们的工作只集中在第一阶段。第一级——tau 3354的产生已经被用作通用SNARK(例如PLONK和SONIC)和其他密码应用(例如KZG承诺、Verkle树和数据可用性)的非常有用的采样(d as)。一般来说,通用SNARK参数应该非常大,这样才能支持大而有用的电路。包含更多门的电路通常更有用,因为它们可以捕获大量的计算;的数量大致对应于电路中门的数量。因此,典型的设置大小为|pp|=~40 GB,可以支持~228门的电路。鉴于以太坊目前的局限性,将如此大的参数放在链上是不可行的,但对小型SNARK电路、Verkle树或DAS有用的较小的可信设置仪式可以在链上运行。
以太坊基金会计划为200 KB到1.5 MB的tau幂举行几个较小的仪式。虽然更大的仪式可能看起来更好,考虑到更大的参数可以创建更多有用的SNARK电路,但事实上,更大的并不总是更好。有些应用,比如DAS,特别需要一个更小的应用!【原因很技术性,但如果你好奇的话,是因为n次方的设置(在G1)只能使KZG-commitments对多项式的次数 n,这对于保证KZG- Commitments以下的多项式可以由任意n次求值重构是必不可少的。这个特性使得样本数据可用性成为可能:每次成功获得(sample) T个多项式的随机评价,就可以保证多项式以T/N的概率完全重构,如果想了解DAS的更多内容,请查看以太坊研究论坛上Buterin的这篇帖子:https://ethresearch . ch/T/2d-data-avail ability-with-Kate-comments/8081。
我们设计了一个智能合同,可以部署在以太坊区块链运行一个可信的设置仪式。在这个契约中,公共参数(tower-of-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).
并公布在外链上,并提供证明证明三件事:
离散逻辑知识:参与者知道。(证明可信设置仪式的最新贡献是基于之前所有参与者的工作)。Pp1的形式很好:该元素可编程递增功率。(验证了新参与者对仪式贡献的形式善)。更新没有减少:\’0。(这是为了防止攻击者试图通过删除所有参与者过去的工作来破坏系统。)智能合约验证证明,如果正确,它将更新其存储的公共参数。你可以在《回购》中找到更多关于数学的细节及其背后的推理。
计算汽油成本在链条上运行设置的主要挑战是使一个可信的设置仪式尽可能地节省汽油。理想情况下,提交稿件的费用不超过50美元。(大型项目可能会补贴贡献者的燃气。在这种情况下,更容易想象数百名参与者每人将花费100美元)。下面,我们将详细介绍设置中最昂贵的部分。更低的气体成本将降低贡献成本,并允许构建更长的参数(更多的tau功率和更大的SNARK电路)!
我们的设置适用于椭圆曲线BN254(也称为BN256、BN128和alt_bn128),它支持以太坊上的以下预编译契约:
ECADD允许添加两个椭圆曲线点,即[]1:从[]1和[]1计算燃气成本。150ECMULT允许椭圆曲线点乘以标量,即[a *] 1: gas cost由A和[] 1算出为6000。ECPAIR允许检查椭圆曲线对的乘积,即计算e ([1] 1,[1] 2) *.* e ([1] 1,[1] 2)=1,相当于检查1*1.k*k=0:如果以太坊启用了BLL,汽油费用为34,000 * 45,000。
我们来估算一下更新套气的成本([]1,[2]1,[3]1,[n]1;[]2):
核实天然气成本。每个参与者更新设置并提交具有上述三个组成部分的证书。证明的第一部分和第三部分——“离散日志的知识”和“更新不减少”验证起来非常便宜。挑战在于如何在链中验证第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 .
存储数据的气体成本。每个参与者还将更新后的数据存储在链中作为calldata(每字节68 gas),占n*64*68 gas。(熟悉椭圆曲线密码学的人可以注意到:存储压缩这个点会让解压缩在整个开销中占主导地位,就像我们对n=256的度量一样)。
这给我们带来了下面的气体成本估算表,它应该为将来的优化提供参考:
我们正在探索降低天然气成本的解决方案,敬请关注。
开源库:evm-powers-of-tau
我们已经在github.com/a16z/evm-power-of-tau.发布了我们的EVM仪式回购协议,我们的战略是简单透明的仪式:
部署和验证合同(contract /KZG.sol)。贡献者从以前的事务调用数据中读取仪式参数。贡献者在本地生成秘密并计算更新的参数。贡献者生成自己的证明:pi1、pi2贡献者通过KZG.potUpdate()将更新后的参数提交给部署在公共区块链上的智能合约。智能合约将验证更新的有效性,如果提交的参数不符合要求,将恢复原始状态。多个贡献者可以永久执行步骤2-5,每个人都会增加仪式的安全性。只要开发人员对提交内容的数量和质量有信心,他们就可以查询区块链上的当前参数,并将这些值用作加密密钥。我们的回购使用arkworks-rs计算第二步和第三步(rust计算可以在src/pot_update.rs中找到),但是用户可能想自己写。更新提交的整个端到端流程可以在test/integration _ test.rs的集成测试中找到。
请注意,我们选择使用calldata来存储链上更新的幂参数,因为它比存储便宜几个数量级。您可以在src/query.rs中找到基于ethers-rs的数据查询
最后,证明和详细的方程式可以在techreport/main.pdf的技术报告中找到
未来工作在这个可信的设置仪式可以用于生产之前,我们建议首先全面审核数学证明和样本实现。
在实施过程中,更新仪式的交易成本随着设置规模的增加而线性增加。对于大多数应用(SNARKs、DAS),我们希望设置n=256。目前,每次更新的成本是73美元。
我们可以通过有效地更新计算出的STARK证明和向量承诺到更新值来实现次线性验证成本增加。这种构造还将消除对以太坊L1 BN254预编译的依赖,使其能够使用更流行的BLS12-381曲线。
所有的仪式策略都有取舍。我们认为这种结构是牢固的,并且具有很大的可验证的反审查特征。但是,我们仍然要提醒您,在有更多的工作来验证我们方法的合理性之前,不要使用这种方法。
感谢Dan Boneh -在这项工作的早期阶段提供了有用的反馈。Joe Bonneau-澄清了早期版本的技术报告中的讨论。William Borgeaud-感谢TurboPlonk/Plonky2中关于BLS的讨论。Mary Maller——关于这个方法的一般机制的想法