零知识证明|1.什么是同态隐藏?

Posted TurkeyCock

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了零知识证明|1.什么是同态隐藏?相关的知识,希望对你有一定的参考价值。

所谓零知识证明,指的是在不泄露秘密的前提下,证明我知道这个秘密

举个简单例子,假设我一个月工资2000,我老婆一个月工资3000。我不会把这两个数字透露给你,但是我可以告诉你,我俩每个月的工资加起来是5000。你可以通过某种方式验证我俩的工资加起来确实是5000,但是你没办法反推出来我每个月的工资是多少,我老婆每个月工资是多少。

要做到这一点,需要引入一个概念,叫做同态隐藏。这需要一些数论的知识,不过别担心,我也没有学过数论,所以我会尽可能用简单的语言来解释这个概念。

我们把上面那个问题用数学语言描述一下:已知两个数 x x x y y y,需要在不泄漏这两个数的前提下,证明 x + y = 5 x+y=5 x+y=5

要实现这一点,我们需要引入一个同态隐藏函数 E ( x ) E(x) E(x),该函数满足下面3个条件:

  • 知道 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),就可以算出 E ( x + y ) E(x+y) E(x+y)。举个例子: E ( x + y ) = E ( x ) ⋅ E ( y ) E(x+y)=E(x) \\cdot E(y) E(x+y)=E(x)E(y)

如果找到了这个同态隐藏函数,问题就简单了:我把 E ( x ) E(x) E(x) E ( y ) E(y) E(y)的值告诉你,你用它们算出 E ( x + y ) E(x+y) E(x+y),然后判断一下是不是等于 E ( 5 ) E(5) E(5)就行了。也就是说,把验证 x + y = 5 x+y=5 x+y=5转化成了验证 E ( x + y ) = E ( 5 ) E(x+y)=E(5) E(x+y)=E(5)

这个同态隐藏函数,用普通的加减乘除运算是没法实现的,我们需要引入2个新的运算。

1.模p加法

p可以是任意整数,不过为了获得一些特殊性质,p一般取一个素数,比如7。

所谓模p加法,就是加完之后对p取模(除以p取余数)。比如下面的例子:

x x x0123456
( x + 1 ) ∥ m o d 7 (x+1)\\|_mod7 (x+1)mod71234560

我们把集合 0 , 1 , … , p − 1 \\0, 1, …, p-1\\ 0,1,,p1跟模p加法运算一起称为一个有限群

集合的元素个数称为有限群的,所以上面是一个7阶有限群。

2.模p乘法

和模p加法类似,模p乘法就是相乘之再对p取模。比如下面的例子:

x x x0123456
( x ⋅ 2 ) ∥ m o d 7 (x \\cdot 2)\\|_mod7 (x2)mod70246135

显然,这也是一个7阶有限群。

另外还有一个有趣的现象,如果让集合 1 , p − 1 \\1,p-1\\ 1,p1中的每个元素对自身不断地做模p乘法(即乘方),观察我标红的那两行:

x x x012345
1 x ∥ m o d 7 1^x\\|_mod7 1xmod7111111
2 x ∥ m o d 7 2^x\\|_mod7 2xmod7124124
3 x ∥ m o d 7 3^x\\|_mod7 3xmod7132645
4 x ∥ m o d 7 4^x\\|_mod7 4xmod7142142
5 x ∥ m o d 7 5^x\\|_mod7 5xmod7154623
6 x ∥ m o d 7 6^x\\|_mod7 6xmod7161616

有没有发现,集合 1 , p − 1 \\1,p-1\\ 1,p1中的每个元素都可以被生成出来(只不过顺序被打乱了)?这种群被称为循环群,元素3或者5称为一个生成元。实际上,所有素数阶的有限群都是循环群。

3.同态隐藏函数

有了上面这些背景知识,我们就可以来寻找同态隐藏函数 E ( x ) E(x) E(x)了。

在上面的例子里,生成元 g ∈ 3 , 5 g\\in\\3,5\\ g3,5。假设我们取3,定义 E ( x ) = g x ∣ m o d p = 3 x ∣ m o d 7 E(x) = g^x|_modp = 3^x|_mod7 E(x)=gxmodp=3xmod7

这个 E ( x ) E(x) E(x)函数是不是真的满足之前提到的3个条件呢?我们来确认一下:

  • 由于生成的元素的顺序是乱的,所以没法根据 E ( x ) E(x) E(x)反推出 x x x。你可能会说,根据上面那张表不就能反推出来了吗?在实际应用中,p通常是一个很大的素数,比如 2 256 2^256 2256量级的数,所以以目前计算机的计算能力,是没有办法算出完整的表的(术语叫离散对数难题)
  • 如果 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)可以算出 E ( x + y ) E(x+y) E(x+y)。在这个例子里, E ( x + y ) = E ( x ) ⋅ E ( y ) E(x+y)=E(x) \\cdot E(y) E(x+y)=E(x)E(y)。注意这里 x x x y y y的取值范围是 0 , p − 2 \\0,p-2\\ 0,p2,所以这里的的加法是模p-1加法,为了公式简洁没有显式指明。我们来证明一下,根据指数运算法则: E ( x + y ) = g ( x + y ) ∣ m o d ( p − 1 ) = g x ⋅ g y ∣ m o d p = E ( x ) ⋅ E ( y ) E(x+y) = g^(x+y)|_mod(p-1) = g^x \\cdot g^y|_modp = E(x) \\cdot E(y) E(x+y)=g(x+y)mod(p1)=gxgymodp=E(x)E(y)

好了,现在我们有同态隐藏函数了,接下来通过实际的例子加深理解。

我们要保护的秘密是 x = 2 , y = 3

以上是关于零知识证明|1.什么是同态隐藏?的主要内容,如果未能解决你的问题,请参考以下文章

安全多方计算 同态密文计算 零知识证明 是什么对比优缺点

fabric 零知识证明和同态加密

fabric gnark 零知识证明和同态加密

区块链中的密码学之默克尔树(十五)

零知识证明|2.什么是多项式盲计算?

零知识证明|2.什么是多项式盲计算?