Filecoin技术文档学习7-zk-SNARKs系列知识6 椭圆曲线

在上一节中,我们通过匹诺曹协议,可以做到验证者无需了解证明者多项式具体参数的情况下,通过在特定域抽样并隐藏抽样数据的方式,验证了证明者提供的证明,但是在这个过程中还存在两个遗留问题,第一个就是验证函数最后是H(s)*T(s),这个是一个乘法操作,我们之前的文章中阐述的都是加法的同态隐藏,并没有给出乘法的同态隐藏证明。第二个问题就是这个协议需要证明者和验证者多次交互才能做到验证的目的,而我们希望做到少交互甚至无交互,毕竟我们这个算法的名称就是无交互的零知识验证协议。

问题一:同时支持乘法和加法同态隐藏的群。

Filecoin技术文档学习7-zk-SNARKs系列知识6 椭圆曲线_第1张图片

公式1是我们上一节使用的验证公式,验证者需要乘法的同态隐藏属性。

为了找到能够同时支持乘法和加法的同态隐藏属性的群,我们引入了椭圆曲线,在椭圆曲线上的点存在一些有趣的属性,使得由这些点组成的群,能够满足我们特定的需求,对于点P(x,y)属于曲线C,且x,y

属于域Fp。在此曲线上我们可以找出一些特殊的点:1,O这个点用途有点类似于整数域的0;2,G这个点的用途类似1.他们的属性定义通过公式3来定义。

公式4,5,6分别定义了新的群,他们有自己的特性,这些特性决定了我们可以利用他们实现加法和乘法的同态隐藏,我会单独开一个系列讲解椭圆曲线函数。在这里大家只要明白我们通过他可以解决上一节遗留的问题一,

需要重点解释一下的是一个新的域:Fp^12。我们在讲解这个扩展域之前,可以回顾一下高中学到的复数,复数实际上是对实数的扩展,其中i^2+1

=

0是对新引入的复数单位的定义,复数域有很多特性,如果我们将一个复数的实数和复数部分的值限定在域Fp中,那么我会得到一个新的群。在公式5中,我们使用w这个单位作为新扩展的域的单位,他的定义与复数不同:w^12-18*w^6+82=0

问题二:非交互性:

Filecoin技术文档学习7-zk-SNARKs系列知识6 椭圆曲线_第2张图片

在前几节设计的协议中,我们用来验证Alice的多项式时,Bob会选择多项式上的点s以及线性倍数阿尔法,然后将隐藏后的s和阿尔法发送给Alice,这个过程是一种交互过程,新的协议中,Bob需要发送的随机消息提前在系统生成,我们把它称作CRS,这是第一步。

第二步,对于Alice这个证明着来说,他可以无需每次从Bob哪里获取这个CRS,只要通过setup过程,就可以的到a=E1(P(s))和b=E2(阿尔法*P(s))。这个a,b结果是Alice必须发送出来的,这个a,b允许任何一个像Bob一样的验证者来证明其准确性。

第三步,Bob可以在无需提供阿尔法的情况下,通过setup阶段的E2(阿尔法)和第二个阶段Alice发出的a来计算E(阿尔法*x)。这样做的好处就是Bob无需每次检查前,都需要生成一个消息发送给Alice,然后再验证Alice结果的正确性。

关于第一个阶段的setup,如果随机数s和阿尔法一旦泄露,那么整个系统的验证逻辑就可以被伪造,因此这个随机数的生成还有很多故事。据说有人为了生成随机数,从废弃的核电站找到放射性物质,然后在空中测量放射物质的辐射值来生成随机数,有兴趣的同学可以自行搜索一下。

关于zk-SNARKs的介绍就告一段落,其中最后的椭圆函数部分只讲结论,并未给出证明,在此节之前的章节,理论上根据基本的群论和线性代数的基本知识就可以理解。接下来我会单独学习并讲解椭圆函数,并作为一个单独的系列,并且结合Filecoin白皮书中对zk-SNARKs的使用,来解释前面几节中用到的数学知识。

你可能感兴趣的:(Filecoin技术文档学习7-zk-SNARKs系列知识6 椭圆曲线)