深入浅出零知识证明(三):零知识证明的过程和基于RSA的零知识证明
隐私计算研习社
前言
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。
下一章,我们将给大家带来交互式零知识证明,及更详细的复杂度理论介绍零和外汇。
来源:
作者:Christian Reitwiessner
翻译:杨赟博
分享仅供学习参考,若有不当,请联系我们处理零和外汇。
评论