同态的概念想必大家不陌生,一个几十年前就提出来的密码学方案,利用一些代数结构的特性,使得计算可以在密文中进行,在确保保密性和安全性的同时,还能完成一些特殊的计算,从而达到安全计算的目的(如安全计算某个函数),典型的应用场景就是可搜索加密
因此,介绍zk-SNARKs首先要介绍的是同态隐藏(Homomorphic Hiding,HH),一个和计算隐藏性的承诺很类似的概念,但比他稍弱一些(对于$x$,HH隐藏$x$中的大多数比特,而承诺方案隐藏$x$全部的比特位,但承诺需要引入额外的随机性),需要注意的是HH不是严格意义上的密码学术语,只是帮助理解引入的名词
一个同态隐藏$HH:E(x)$是一个函数,满足下列性质
- 对于大多数$x$而言,给定$E(x)$难以恢复$x$
- 输入的改变会导致输出的改变,也即若有$x\neq y\Rightarrow E(x)\neq E(y)$
- 对于已知$E(x)$和$E(y)$可利用其完成对$x$和$y$的算术计算(加减乘除),如利用$E(x)$和$E(y)$可以计算$E(x+y)$
举个HH应用于ZK的例子,比如Alice要向Bob证明其知道$x,y$,满足$x+y=7$,则Alice可以这么做
- Alice计算并向Bob发送$E(x)$和$E(y)$
- Bob利用$E(x)$和$E(y)$利用计算$E(x+y)$,同时计算$E(7)$,验证是否有$E(x+y)=E(7)$
- 若等式不成立则拒绝Alice,否则接受Alice
上述例子中若等式成立,Bob确信Alice拥有这样两个值$x,y$,满足$x+y=7$,但是并没有直接知道$x$和$y$分别是什么,因为Bob只看到了这两个值的同态隐藏$E(x)$和$E(y)$
接下来看看如何构造隐藏,利用到有限群的知识
记群$Z^*_p$,其中$p$为一素数,该群满足下列性质
- $Z^*_p$是循环群:记其生成元为$g$,对于任意的$a\in\{0,1,...,p-2\}$,都有$g^a\in Z^*_p$,记$g^0=1$
- $Z^*_p$上的离散对数困难性:对于大素数$p$和给定的$h\in Z^*_p$,找到$a\in\{0,1,...,p-2\}$,满足$g^a\equiv h \ mod \ p$是困难的
- 加法与乘法的转换:对于任意的$a,b\in\{0,1,...,p-2\}$,有$g^a\cdot g^b=g^{a+b} \ mod \ (p-1)$
综上,利用模素数上的循环群完成了同态隐藏和简单的算术加法,非常的简单
小结
同态隐藏的目的是利用了某些特殊映射函数的特性,隐藏了原始值,且根据映射值不能或极难反向计算出原始值,但是这个特殊的映射函数使得映射值之间的关系可以反映原始值之间的关系,从而达到对映射值的相关操作等价于对原始值的相关操作的目的
本系列文章撰写于研一,受笔者知识面与理解能力的局限,部分概念与定理的表述难免有不准确与不严谨的地方,烦请各位专业人士斧正
参考文章
$[1]$Explaining SNARKs Part I:Homomorphic Hidings - electriccoin-blog