查看原文
其他

深入浅出零知识证明(三):零知识证明的过程和基于RSA的零知识证明

杨赟博 隐私计算研习社 2024-01-09



0

前言
zkSNARKs令人印象深刻,它可以在不执行计算的情况下验证结果的正确性,而且你甚至不会知道执行了什么操作,只知道它被正确执行了。
但是,大多数关于zkSNARKs的解释都不清晰,因此它们仍然是一种“神奇”的东西,只有专业的人才会真正理解它们的工作原理以及为什么有效。
事实是,zkSNARKs可以归结为四种简单的技术,本文旨在解释这些技术,任何能够理解RSA加密系统工作原理的人,也应该能够对当前使用的zkSNARKs有相当好的理解。
我们之前曾通过Schnorr来引入零知识证明,具体请见深入浅出零知识证明(一):Schnorr协议
后期给大家讲述了零知识证明中的电路模型,具体请见深入浅出零知识证明(二):电路模型概述

1

零知识证明的四大组成部分
简而言之,当前实现的zkSNARKs有四个主要组成部分:
A)将问题编码为多项式问题
将需要检查的程序编译为多项式的二次方程:t(x) h(x) = w(x) v(x),当且仅当程序计算正确时,等式成立,证明者希望说服验证者这个等式成立。
B)通过随机抽样实现简洁性(Succinct)
验证者选择一个随机点s,将问题从多项式乘法和多项式函数等式的验证简化为对数字的简单乘法和等式检查:t(s)h(s) = w(s)v(s),这大大减小了证明的大小和验证的时间。
C)同态编码/加密
使用具有某些同态性质的编码/加密函数E(但不是完全同态,一般为加法同态),这使得证明者可以在不知道s的情况下,计算E(t(s))、E(h(s))、E(w(s))、E(v(s)),并只知道E(s)和其他一些有用的加密值。
D)零知识性
证明者通过与一个数字相乘来排列值E(t(s))、E(h(s))、E(w(s))、E(v(s)),以便验证者仍然可以检查它们的正确结构,而不知道实际的编码值。
简单来说,检查t(s)h(s) = w(s)v(s),和检查t(s)h(s)k = w(s)v(s)k(其中k是一个随机的秘密数,不为零)是相同的,不同之处在于,如果你只收到数字(t(s)h(s)k)和(w(s)v(s)k),你无法推导出t(s)h(s)或w(s)v(s)。

2

RSA和零知识证明

让我们从快速回顾RSA是如何工作的开始,请记住,我们通常使用模某个数,而不是直接在整数上进行计算,这里的符号是"a + b ≡ c (mod n)",意思是"(a + b) % n = c % n"。注意,"(mod n)"部分不适用于右边的"c",而实际上适用于"≡"和同一方程中的所有其他"≡"。

现在我们来回顾一下RSA,证明者提出以下数字:

p,q:两个随机的秘密质数

n := p q

d:一个随机数,使得1 < d < n - 1

e:一个数字,使得d e ≡ 1 (mod (p-1)(q-1))。

公钥是(e, n),私钥是d。质数p和q可以丢弃,且不能被泄漏给其他参与方。

通过以下方式对消息m进行加密:

E(m) := m^e % n

并通过以下方式解密c = E(m):

D(c) := c^d % n。

由于c^d ≡ (m^e % n)^d ≡ m^{ed} (mod n),并且指数m的乘法在模(p-1)(q-1)的乘法群中的计算类似于乘法,我们得到m^{ed} ≡ m (mod n)。此外,RSA的安全性依赖于n不能被有效地分解,因此无法从e计算出d(如果我们知道p和q,这将很容易)。

RSA的一个显著特点是它具有乘法同态性。通常情况下,这允许任意参与方,交换两个计算的顺序而不影响最终结果,则这两个计算被称为是同态的。

在同态加密的情况下,您可以对加密数据进行任何属性的计算(加法和乘法)。完全同态加密是存在的,但目前还不实用,它允许在加密数据上计算任意函数。在这里,对于RSA,我们只谈论乘法,进一步来说地说:E(x) E(y) ≡ xe ye ≡ (xy)e ≡ E(xy) (mod n),即两个消息的加密的乘积等于消息的乘积的加密。

这种同态性已经允许某种形式的乘法零知识证明:证明者知道一些秘密数字x和y,并计算它们的乘积,但只发送加密版本a = E(x),b = E(y)和c = E(xy)给验证者。验证者现在检查(ab) % n ≡ c % n,验证者只知道是乘积的密文以及乘积被正确计算了,但验证方既不知道n的两个因子,也不知道最后实际的乘积。

如果你将乘积替换为加法,这已经朝着区块链的方向发展,许多zkSNARK方案都是依赖于加法同态来构造的。


3

总结

目前基于电路的zkSNARK,都是先将相应的证明(计算)任务规约为一个电路,并利用该电路来证明计算的正确性。同时,从RSA的例子也可以看出,们可以使用特定算法的同态性来构造zkSNARK。

下一章,我们将给大家带来交互式零知识证明,及更详细的复杂度理论介绍。

来源:
https://blog.ethereum.org/2016/12/05/zksnarks-in-a-nutshell
作者:Christian Reitwiessner
翻译:杨赟博

分享仅供学习参考,若有不当,请联系我们处理。


END

1.SPDZ 学习笔记-基于Somewhat的全同态加密构造的安全多方计算(2)

2.当联邦学习遇上同态加密

3.论文详解丨联邦学习开源框架

4.SPDZ 学习笔记-基于Somewhat的全同态加密构造的安全多方计算(1)


继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存