零知识证明原理及其应用(一)

1:什么是零知识证明及几个关键定义

简而言之,在不泄露秘密情况下完成相应验证。

几个通俗例子:张三向李四证明他有某房门钥匙,但又不想让李四偷偷在张三拿出钥匙的时候拍照,怎么办呢?他会让李四走远些,然后偷偷拿出钥匙把门打开,然后让李四远远的看着,即可完成证明。

再如数独游戏,证明者怎么向验证者证明我知道结果,又不泄密呢?一种方法是,任由验证者挑选一行或一列或一个九宫格,然后把顺序打乱,只要里面数字不重复即可。

网上还有阿凡提和强盗的故事,这里不多讲了;

其一般过程为:Computation → Arithmetic Circuit → R1CS → QAP→ zk-SNARK

为了完成该目标,我们先引入两种工具,在后续的计算中将发挥重要价值。

1.1)同态隐藏

设(M,*)和(S,.)两个群(*,.分别代表群M和S上运算),定义映射E:M->S,任意a,b在集合M中,E(a*b)=E(a).E(b)称E为M到S的同态。

单同态:映射E为单射

满同态:映射E为满射

加同态

如果存在有效算法⊕,E(x+y)=E(x)⊕E(y)或者成x+y=D(E(x)⊕E(y))立,并且不泄漏 x 和 y。

如:Paillier 算法

乘同态

如果存在有效算法. ,E(x*y)=E(x).E(y)或者x*y= D(E(x).E(y))成立,并且不泄漏 x 和 y。

如:RSA 算法,Elgamal 算法

全同态:同时满足加同态和乘同态,如Gentry算法(基于理想格),但目前计算量大;

在实际应用中,为保证信息证明过程中的安全性,除满足单同态、满同态外,映射还需满足单向性,即:知道x,可以方便求出E(x),但反过来很难,计算上不可行(实际上现有非对称加密安全均基于此原理,如RSA, ECC, DH);

同态隐藏的价值体现在:将原集合M中的两个数值的运算成功转化为集合S上的运算,我们可以在集合S中进行计算校验,而完全不知道集合M具体元素。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注