0%

Knowledge-of-Exponent Assumption 简介

假设有这样一个场景,我们在解决一个值得获得图灵奖的一个问题,在最后的关头,需要大量的计算来支持我们的理论,但是由于经费问题,我们本身是无法去完成这样庞大的计算的,所以我们准备和别的实验室合作,借用对方的机器来完成这些计算,但是我们肯定是不希望把这些计算暴露出来,但是我又希望对方没有篡改我输入的数据,怎么办?这就引出了这篇文章所要讲的 KEA ,即 Knowledge-of-Exponent Assumption 。

KEA

假设 q 是一个质数,可推出 2q+1 也是一个质数,而 g 是 的阶为 q 的子集的椭圆曲线的生成元。

KEA1

假设我们现在输入 而想要从对面返回一个配对 (C,Y) ,其中 。最简单的一个方法就是对面选取 ,让 。但是 c 这个数我们这边是没有办法知道的。而 KEA1 希望能有一个提取器,能够在相同的输入中返回 c 使得

KEA2

假设我们现在输入 而想要从对面返回一个配对 (C,Y) ,其中 。一种方法就是对面选取 ,让 ;而另一种方法就是选取 ,让 。但是 c 这个数我们这边是没有办法知道的。而 KEA1 希望能有一个提取器,能够在相同的输入中返回 c 使得

α-变换

假设这样一个场景,Alice 有一个值 a,她想要 Bob 对其进行任意指数的求幂(这里 a 是一个有限域群的生成器),唯一的要求是只能对 a 进行求幂,为了保证这一点,她要:

  • 选择一个随机数 α
  • 计算
  • 提供一个元组 (a, a’) 给 Bob, 然后让他对这两个值执行任意的求幂运算,返回结果元组 (b, b’),这里的指数 “-变换” 依然保持不变,即

因为 Bob 无法从元组 (a, a’) 中提取 的值,通过暴力破解也难以实现,那就可以推断 Bob 生成有效元组的唯一方法就是执行下面的步骤:

  • 选择一个值 c
  • 计算
  • 回复 (b,b’)

有了回复的元组和 α,Alice 就可以验证等式:

结论是:

  • Bob 在元组的两个值的计算上都用了同一个指数(即 c
  • Bob 只能用 Alice 原本的元组来保持 α 关系
  • Bob 知道指数 c,因为构造验证值 (b,b′) 的唯一方式是用同一个指数
  • Alice 并不知道 c,这和 Bob 不知道 α 的原因一样
  • 虽然 c 是被加密的,但它的可能取值范围并不足够大到保持其零知识的性质。

最后这个协议提供了一个证明给 Alice ,Bob 确实是用他知道的某个值对 a 进行求幂的,而且他也不能做别的任何操作,例如:乘法,加法,因为这样就会破坏 α-变换关系。

KEA 在 zk-SNARKs 中的使用

我们知道,对于一个多项式而言,其知识就是系数的知识,假设我们有一个简单的多项式

  • verifier 选择随机数 ,然后提供当 x=s 时通过 α-变换后的配对:

  • prover 代入系数 c 进行计算:

  • verifier 进行验证:

这个结构“限制” prover 只能用 verifier 提供的加密的 s 进行计算,因而 prover 只能将系数 c 赋给 verifier 提供的多项式。现在我们可以扩展这种单项式上的方法到多项式上,因为计算是先将每项的分配分开计算然后再 “同态地” 相加在一起的。所以如果给定 prover 一个指数为 s 的幂以及它们的变换的加密值,他就可以计算原始的和变换后的多项式,这里也必须要满足同样的校验。对于阶数为 d 的多项式:

  • verifier 提供加密值

  • prover 计算给定的带有 s 的幂的加密多项式

以及带有 s 的幂的转换的加密“转换”多项式:

然后将计算结果 发送给 verifier

  • verifier校验:

Reference

The Knowledge-of-Exponent Assumptions and 3-Round Zero-Knowledge Protocols

Towards practical public key systems secure against chosen ciphertext attacks

从零开始学习 zk-SNARK(二)——多项式的非交互式零知识证明