【译】SNARKs讲解「第一部分」:同态隐藏

原文链接 https://electriccoin.co/blog/snark-explain/

构造zk-SNARKs,需要对它的几个组成部分进行仔细的组合。要完整理解这些组成部分如何协同工作,是需要些时间的。

如果我不得不在这些组成部分里选出最耀眼的一个,它可能就是将被我称为同态隐藏(也叫HH)的那个1。在本文里,我们将会讲解HH是什么,然后举一个例子,说明为什么HH很有用以及它是如何被构造出来的。

HH可以被看成一个函数 E ( x ) E(x) E(x),它满足下列特性:

  • 对大多数 x x x,很难通过给定的 E ( x ) E(x) E(x)来找出 x x x
  • 不同的输入,产生不同的输出。也就是如果 x      ≠ y x \;\; \neq y x̸=y, 那么 E ( x )      ≠ E ( y ) E(x) \;\; \neq E(y) E(x)̸=E(y)
  • 如果某人知道 E ( x ) E(x) E(x) E ( y ) E(y) E(y),他就可以生成含有 x x x y y y的算术表达式的HH。例如,他可以用 E ( x ) E(x) E(x) E ( y ) E(y) E(y),来计算出 E ( x + y ) E(x+y) E(x+y)

这里是一个很简单的例子,它表明HH对零知识证明是有用的:假设Alice想证明给Bob看,她知道数字 x x x y y y,且 x + y = 7 x + y = 7 x+y=7(当然,知道 x x x y y y并不是什么特别有趣的事,但是这个例子用来讲解概念还是挺好的)。

  1. Alice把 E ( x ) E(x) E(x) E ( y ) E(y) E(y)发送给Bob。
  2. Bob根据这些值计算出 E ( x + y ) E(x+y) E(x+y)。(这是因为E是一个HH)
  3. Bob还计算出 E ( 7 ) E(7) E(7),然后检查是否 E ( x + y ) = E ( 7 ) E(x+y)=E(7) E(x+y)=E(7)。如果相等,他就接受Alice的证明。

由于不同的输入被E映射到了不同的隐藏值,Bob实际上仅在Alice发送 x x x y y y的隐藏值,且 x + y = 7 x + y = 7 x+y=7 的情况下,才会接受这个证明。另一方面,Bob并不知道 x x x y y y是多少,因为他只能访问到隐藏值。2

现在我们来看一个如何构造隐藏函数的例子。我们实际上无法用常规的整数和常规加法来构造它们,我们需要看一下有限群(finite groups):

假设 n n n是某个整数。当我们写 A   m o d   n A \, mod \, n Amodn(其中 A A A是一个整数)的时候,我们的意思是取得 A A A除以 n n n后得到的余数。例如,

         9   m o d   7 = 2 9 \, mod \, 7 = 2 9mod7=2
         13   m o d   12 = 1 13 \, mod \, 12 = 1 13mod12=1

我们可以在数字集合 { 0 , . . . , n − 1 } \{0,...,n-1\} {0,...,n1} 上用 m o d   n mod \, n modn 操作来定义加法:在正常加法后再做一个 ( m o d   n ) (mod \, n) (modn) 运算,得到一个落在 { 0 , . . . , n − 1 } \{0,...,n-1\} {0,...,n1}这个范围内的数。我们有时把 ( m o d   n ) (mod \, n) (modn) 写在右边,以表明我们在用这类加法。例如,

         2 + 3 = 1   ( m o d   4 ) 2 + 3 = 1 \, (mod \, 4) 2+3=1(mod4)

我们把集合 { 0 , . . . , n − 1 } \{0,...,n-1\} {0,...,n1}跟这个加法合称为 Z n \textbf Z_n Zn群。(译者:群的概念是元素集合与在此集合上的二元操作的整体。这有些像面向对象程序设计中把数据跟方法封装在对象中一样,它们的共同存在才有意义。)

对于一个质数 p p p,我们可以用 m o d   p mod\,p modp 操作来定义一个在 { 1 , . . . , p − 1 } \{1,...,p-1\} {1,...,p1}范围上的乘法。这个乘法的结果也总是在 { 1 , . . . , p − 1 } \{1,...,p-1\} {1,...,p1}这个集合上。这个乘法先做一个常规的整数乘法,然后把结果做一次 m o d   p mod\,p modp 操作。3 例如,

         2 ⋅ 4 = 1   ( m o d   7 ) 2 ⋅ 4 = 1\,(mod\,7) 24=1(mod7)

这个元素集合跟这个乘法操作一起合称为 Z p ∗ \textbf Z_p^* Zp群。 Z p ∗ \textbf Z_p^* Zp有如下相当有用的特性:

  1. 它是个循环群;这意味着在 Z p ∗ \textbf Z_p^* Zp里有某些被称为发生器的元素g,使得 Z p ∗ \textbf Z_p^* Zp里所有的元素都能写成 g a g^a ga,其中 a a a是在 { 0 , . . . , p − 2 } \{0,...,p-2\} {0,...,p2} 中的某个数,并且我们定义 g 0 = 1 g^0 = 1 g0=1。(译者 :注意这里的 g a g^a ga 表示 a a a g g g 连续做该二元操作,也就是带 m o d   p mod \, p modp 的乘法。)
  2. 我们相信在 Z p ∗ \textbf Z_p^* Zp中的离散对数问题是很困难的。这意味着当 p p p很大的时候,给定 Z p ∗ \textbf Z_p^* Zp中一个元素 h h h,很难在 { 0 , . . . , p − 2 } \{0,...,p-2\} {0,...,p2}中找到一个整数 a a a使得 g a = h   ( m o d   p ) g^a = h \, (mod \, p) ga=h(modp)
  3. 由于“当元素相乘时指数相加”,对于在 { 0 , . . . , p − 2 } \{0,...,p-2\} {0,...,p2}中的 a a a b b b,我们有 g a g^a ga . g b g^b gb = g a + b   ( m o d   p − 1 ) = g^{a+b\,(mod\, p-1)} =ga+b(modp1)

使用这些特性,我们现在来构造一个支持“加法”的HH,也就是 E ( x + y ) E(x+y) E(x+y)可以从 E ( x ) E(x) E(x) E ( y ) E(y) E(y)中计算得来。我们假定 E E E的输入 x x x是从 Z p − 1 \textbf Z_{p-1} Zp1中来的,因此它在 { 0 , . . . , p − 2 } \{0,...,p-2\} {0,...,p2}这个范围里。我们对每个这样的 x x x定义 E ( x ) = g x E(x) = g^x E(x)=gx, 并且声明 E E E是一个HH:

  1. 第一个特性表明了 Z p − 1 \textbf Z_{p-1} Zp1中不同的 x x x被映射到了不同的输出。
  2. 第二个特性表明了给定一个 E ( x ) = g x E(x)=g^x E(x)=gx,很难找出 x x x
  3. 最后,用第三个特性,给定 E ( x ) E(x) E(x) E ( y ) E(y) E(y),我们可以计算出 E ( x + y ) E(x+y) E(x+y),因为

                 E ( x + y ) = g x + y   ( m o d   p − 1 ) E(x+y) = g^{x+y \, (mod \, p-1)} E(x+y)=gx+y(modp1) = g x ⋅ g y = E ( x ) ⋅ E ( y ) = g^x ⋅ g^y = E(x) ⋅ E(y) =gxgy=E(x)E(y)

>>> 第二部分


  1. 同态隐藏不是密码学里正式的术语,在本文中引入这个术语主要是为了方便指示的目的。它跟计算性隐藏承诺的概念相似,只是要弱一点。区别是HH是一个对输入的确定性函数,而承诺会用到额外的随机性。结果HH基本上“隐藏多数 x x x”,而承诺“隐藏所有 x x x“。 ↩︎

  2. Bob的确学到了关于 x x x y y y的一些信息。比如,他可以选择一个随机的x‘,然后计算 E ( x ′ ) E(x') E(x)并检查是否 x = x ′ x = x' x=x。由于这个原因,上面的协议并不是一个真正的零知识协议,只是在这里用作讲解目的。实际上,我们将在之后的文章里看到,HH最终会被用在snarks中去隐藏验证者的挑战(challenges),而不是隐藏证明者的秘密(secrets)。 ↩︎

  3. p p p不是一个质数的时候,这样定义乘法是有问题的。一个问题就是当两个参数都不是零的时候,乘法结果也可能会是零。例如当 p = 4 p=4 p=4的时候 ,我们可以得到 2 ∗ 2 = 0   ( m o d   4 ) 2 * 2 = 0 \, (mod \, 4) 22=0(mod4)↩︎

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值