2022 3月 14查看所有帖子


必要的背景:椭圆曲线和椭圆曲线配对。另见:Dankrad Feist关于KZG多项式承诺的文章

特别感谢Justin Drake,Dankrad Feist和Chih-Cheng Liang的反馈和评论。

许多加密协议,特别是在数据可用性采样和 ZK-SNARK 领域,都依赖于受信任的设置。受信任的安装仪式是一个过程,只需执行一次即可生成一段数据,然后每次运行某些加密协议时都必须使用该数据。生成此数据需要一些秘密信息;“信任”来自这样一个事实,即某个人或某群人必须生成这些秘密,使用它们来生成数据,然后发布数据并忘记秘密。但是,一旦数据被生成,秘密被遗忘,仪式的创造者就不需要进一步的参与。

有许多类型的受信任设置。在主要协议中使用可信设置的最早实例是2016年的原始Zcash仪式。这个仪式非常复杂,需要多轮交流,所以只能有六个参与者。当时使用Zcash的每个人都有效地相信六个参与者中至少有一个是诚实的。更现代的协议通常使用tau的幂设置,它具有1-of-N信任模型N通常在数百个。也就是说,数百人一起参与生成数据,其中只有一个人需要诚实,不公布他们的秘密才能确保最终输出的安全。在实践中,像这样的执行良好的设置通常被认为是“足够接近不可信”。

本文将解释 KZG 设置的工作原理、工作原理以及可信安装协议的未来。任何精通代码的人也应该随意遵循这个代码实现:https://github.com/ethereum/research/blob/master/trusted_setup/trusted_setup.py

tau的幂设置是什么样的?

tau 的幂设置由两系列椭圆曲线点组成,如下所示:

[G1,G1∗s,G1∗s2.。。G1∗sn1−1]  

[G2,G2∗s,G2∗s2.。。G2∗sn2−1]

G1G2是两个椭圆曲线组的标准化生成器点;在 BLS12-381 中,G1点(以压缩形式)长度为 48 个字节,并且G2点的长度为 96 个字节。n1n2是的长度G1G2设置的侧面。某些协议需要n2=2,其他需要n1n2两者都很大,有些在中间(例如。以太坊当前形式的数据可用性抽样需要n1=4096n2=16).s是用来生成积分的秘密,需要忘记。

对多项式做出 KZG 承诺P(x)=∑icixi,我们简单地取一个线性组合∑iciSi哪里Si=G1∗si(可信设置中的椭圆曲线点)。这G2设置中的点用于验证我们承诺的多项式的评估;我不会在这里更详细地进行验证,尽管Dankrad在他的帖子中确实如此

直观地说,可信设置提供了什么价值?

值得了解的是,这里发生了什么哲学上的事情,以及为什么可信设置提供了价值。多项式承诺承诺在一块大小上 -N具有大小的数据O(1)对象(单个椭圆曲线点)。我们可以通过一个普通的Pedersen承诺来做到这一点:只需设置Si要成为的值N彼此之间没有已知关系的随机椭圆曲线点,并提交多项式∑iciSi如故。事实上,这正是IPA评估证明所做的。

但是,任何基于IPA的证明都需要O(N)是时候验证了,并且有一个不可避免的原因:对多项式的承诺P(x)使用基点[S0,S1.。。Si.。。Sn−1]如果我们使用基点,将提交到不同的多项式[S0,S1.。。(Si∗2).。。Sn−1].

 

对多项式的有效承诺3x3+8x2+2x+6在一组基点下是有效的承诺3x3+4x2+2x+6在一组不同的基点下。

如果我们想为某些陈述做一个基于IPA的证明(比如说,这个多项式的计算在x=10等于3826),证明应随第一组基点通过,在第二组基点时失败。因此,无论证明验证程序是什么,都无法避免以某种方式考虑每一个Si值,因此它不可避免地需要O(N)时间。

但是,使用可信设置时,点之间存在隐藏的数学关系。保证Si+1=s∗Si具有相同的因子s在任意两个相邻点之间。如果[S0,S1.。。Si.。。Sn−1]是有效的设置,即“已编辑的设置”[S0,S1.。。(Si∗2).。。Sn−1] 也不能是有效的设置因此,我们不需要O(n)计算;相反,我们利用这种数学关系来验证我们需要在恒定时间内验证的任何内容。

但是,数学关系必须保密:如果s是已知的,那么任何人都可以提出一个代表许多不同多项式的承诺:如果C提交到P(x),它还承诺P(x)∗xsP(x)−x+s,或许多其他事情。这将完全打破多项式承诺的所有应用。因此,虽然有些秘密s必须曾经存在过,以使Si实现高效验证的值,s一定也被遗忘了。

多参与者设置如何工作?

很容易看出一个参与者如何生成设置:只需随机选择一个s,并生成椭圆曲线点s.但是,单参与者信任设置是不安全的:您必须信任一个特定的人!

解决这个问题的方法是多参与者信任设置,其中“多”是指很多参与者:超过100是正常的,对于较小的设置,有可能超过1000。以下是多参与者 tau 幂设置的工作原理。

采用现有设置(请注意,您不知道s,你只知道要点):

[G1,G1∗s,G1∗s2.。。G1∗sn1−1]  

[G2,G2∗s,G2∗s2.。。G2∗sn2−1]

现在,选择你自己的随机秘密t.计算:

[G1,(G1∗s)∗t,(G1∗s2)∗t2.。。(G1∗sn1−1)∗tn2−1]  

[G2,(G2∗s)∗t,(G2∗s2)∗t2.。。(G2∗sn2−1)∗tn2−1]

请注意,这等效于:

[G1,G1∗(s t),G1∗(s t)2.。。G1∗(s t)n1−1]  

[G2,G2∗(s t),G2∗(s t)2.。。G2∗(s t)n2−1]

也就是说,您已经使用密钥创建了一个有效的设置s∗t!你从不给你t给以前的参与者,以前的参与者永远不会给你他们的秘密s.只要任何一个参与者是诚实的,并且不透露他们的秘密部分,组合的秘密就不会被揭示出来。特别是,有限域具有这样的性质:如果你知道,就知道s但不是tt是安全随机生成的,那么您对s∗t!

验证设置

为了验证每个参与者是否实际参与,每个参与者都可以提供一个证明,该证明包括(i)G1∗秒他们收到的观点和(ii)G2∗t哪里t是他们介绍的秘密。这些证明的列表可用于验证最终设置是否将所有秘密组合在一起(例如,最后一个参与者只是忘记了以前的值并输出仅包含他们自己的秘密的设置,他们保留这些秘密,以便他们可以在任何使用该设置的协议中作弊)。

 

s1是第一个参与者的秘密,s2是第二个参与者的秘密,等等。每个步骤的配对检查证明,每个步骤的设置实际上来自上一步的设置和该步骤中参与者已知的新秘密的组合。

每个参与者都应该在一些可公开验证的媒体(例如个人网站,从他们的.eth地址进行交易,Twitter)上展示他们的证明。请注意,这种机制并不能阻止某人声称自己参与了其他人参与的某个索引(假设其他人已经透露了他们的证据),但通常认为这并不重要:如果有人愿意谎称自己参与了,他们也愿意谎称已经删除了他们的秘密。只要公开声称参与的人中至少有一个是诚实的,设置是安全的。

除了上述检查之外,我们还想验证设置中的所有权力是否正确构造(即它们是同一秘密的权力)。为此,我们可以进行一系列配对检查,验证e(Si+1,G2)=e(Si,T1)(其中T1G2∗秒设置中的值)对于每个.这验证了每个之间的因子SiSi+1与之间的因子相同T1G2.然后,我们可以在G2边。

但这是很多配对,而且很昂贵。相反,我们采用随机线性组合L1=∑i=0n1−2riSi,并且相同的线性组合偏移了 1:L2=∑i=0n1−2riSi+1.我们使用单个配对检查来验证它们是否匹配:e(L2,G2)=e(L1,T1).

我们甚至可以将流程组合在一起G1侧面和G2侧在一起:除了计算L1L2如上所述,我们还计算L3=∑i=0n2−2qiTi (qi是另一组随机系数)和L4=∑i=0n2−2qiTi+1,然后检查e(L2,L3)=e(L1,L4).

拉格朗日形式的设置

在许多用例中,您不希望以系数形式使用多项式(例如。P(x)=3x3+8x2+2x+6),您想以求值形式处理多项式(例如。P(x)是计算结果为[19,146,9,187]在域上[1,189,336,148]模337)。求值形式有许多优点(例如,您可以将多项式相乘,有时甚至可以将多项式除以O(N)时间),你甚至可以用它来评估于O(N)时间.特别是,数据可用性抽样要求 Blob 采用评估形式。

要处理这些案例,通常可以方便地将受信任的设置转换为评估表单。这将允许您进行评估([19,146,9,187]在上面的示例中),并使用它们直接计算承诺。

这最容易通过快速傅里叶变换(FFT)完成,但将曲线点作为输入而不是数字传递。我将避免在这里重复FFT的完整详细解释,但这是一个实现;其实没那么难。

可信设置的未来

Powers-of-tau并不是唯一一种值得信赖的设置。其他一些值得注意的(实际或潜在的)可信设置包括:

  • 较旧的ZK-SNARK协议中更复杂的设置(例如,请参阅此处),有时仍在使用(特别是Groth16),因为验证比PLONK便宜。
  • 一些加密协议(例如。黑暗)依赖于隐藏顺序组,这些组不知道元素可以乘以多少个数字来获得零元素。存在完全不受信任的版本(请参阅:类组),但到目前为止,最有效的版本使用RSA组(幂x国防部n=pq哪里pq未知)。为此,可以使用1-of-n信任假设进行可信设置仪式,但实现起来非常复杂。
  • 如果/当不可区分性混淆变得可行时,许多依赖于它的协议将涉及有人创建和发布一个混淆的程序,该程序使用隐藏的内部秘密做一些事情。这是一个受信任的设置:创建者需要拥有密钥才能创建程序,之后需要将其删除。

密码学仍然是一个快速发展的领域,可信设置的重要性很容易改变。使用IPA和Halo风格的想法的技术可能会改进到KZG变得过时和不必要的地步,或者量子计算机将在十年后使基于椭圆曲线的任何东西变得不可行,我们将坚持使用基于可信设置的基于哈希的协议。我们用KZG做的事情也有可能得到更快的改进,或者一个新的密码学领域将会出现,这取决于不同类型的可信设置。

如果可信设置仪式是必要的,重要的是要记住,并非所有可信设置都是平等的176名参与者比6名好,2000名参与者会更好。一个足够小的仪式,可以在浏览器或手机应用程序中运行(例如,ZKopru设置是基于Web的),可以吸引比需要运行复杂软件包的参与者更多的参与者。理想情况下,每个仪式都应该让参与者运行多个独立构建的软件实现,并运行不同的操作系统和环境,以降低共模故障风险。每个参与者只需要一轮交互的仪式(如tau的幂)远远优于多轮仪式,这既是因为能够支持更多的参与者,也是因为编写多个实现更容易。理想情况下,仪式应该是通用的(一个仪式的输出能够支持广泛的协议)。这些都是我们可以并且应该继续努力的事情,以确保受信任的设置可以尽可能安全且受信任。