GSW方案是由Craig Gentry1, Amit Sahai与Brent Waters于2013年提出的方案, 发表于论文[GSW13] 2中.
GSW方案确实如论文标题一样, 概念清晰明了, 其Intuition简单到一个刚学完线性代数的大一新生也能理解. GSW还支持基于属性的加密, 但本文中我们将不介绍这一部分内容.
当然, 完全理解GSW方案仍然需要用到一些比较进阶的知识, 如LWE问题的困难性等. 我们在本文中不会对这些知识做过多的介绍, 这些知识将在今后其他的博文中介绍. 关于同态加密的基础知识可以参阅博文同态加密(0) 基础概念, 这篇博文完成后, 地址将被更新到这里.
Basic Intuition
密文的基本格式
最基本的GSW同态加密方案的私钥( s k sk sk)是一个向量 v ∈ Z q N \mathbf v\in\mathbb Z_q^N v∈ZqN3, 而所有的明文 μ i ∈ { 0 , 1 } \mu_i\in\{0,1\} μi∈{
0,1}都被加密一个矩阵 C i ∈ Z q N × N C_i\in\mathbb Z_q^{N\times N} Ci∈ZqN×N中, 其中 C i C_i Ci是以 v v v为近似特征向量并以 μ i \mu_i μi为近似特征值的矩阵, 即我们要求
C i v ≈ μ i v C_i\mathbf v\approx \mu_i \mathbf v Civ≈μiv
这里可以看出, 我们只需要挑选 v \mathbf v v中非 0 0 0的位(最好是选较大的位), 如第 j j j位 v j v_j vj, 并比较 v j v_j vj与 μ i v j \mu_iv_j μivj的值就可以解出 μ i \mu_i μi的值.
一个需要注意的地方就是, 虽然 μ i \mu_i μi取自 { 0 , 1 } \{0,1\} { 0,1}, 但被视作是 Z q \mathbb Z_q Zq中的元素, 因此具体的运算也是按照 Z q \mathbb Z_q Zq的运算方式来进行.
我们也可以将噪声(error)显式地写出来, 记作
C i v = μ i v + e C_i\mathbf v=\mu_i\mathbf v+\mathbf e Civ=μiv+e
其中 e \mathbf e e是非常小的向量. 因此可以看出, 如果 e \mathbf e e确实是一个较小的噪声, 那么我们就可以正确地解出 μ i \mu_i μi.
乘法同态性质
现在我们来验证该加密方案具有同态性质. 现在假设有两个密文 C 1 , C 2 C_1, C_2 C1,C2, 对对应的明文分别是 μ 1 , μ 2 \mu_1,\mu_2 μ1,μ2, 即
C 1 v = μ 1 v + e 1 C 2 v = μ 2 v + e 2 C_1\mathbf v=\mu_1\mathbf v+\mathbf e_1\\ C_2\mathbf v=\mu_2\mathbf v+\mathbf e_2\\ C1v=μ1v+e1C2v=μ2v+e2
其中 e 1 , e 2 \mathbf e_1,\mathbf e_2 e1,e2均为较小的噪声, 那么令 C × = C 1 ⋅ C 2 C^\times=C_1\cdot C_2 C×=C1⋅C2, 我们检验 C × C^\times C×的解密结果
C × v = ( C 1 ⋅ C 2 ) v = C 1 ( μ 2 v + e 2 ) = μ 2 ( μ 1 v + e 1 ) + C 1 e 2 = μ 1 μ 2 v + μ 2 e 1 + C 1 e 2 \begin{aligned} C^\times\mathbf v &=(C_1\cdot C_2)\mathbf v=C_1(\mu_2\mathbf v+\mathbf e_2)=\mu_2(\mu_1\mathbf v+\mathbf e_1)+C_1\mathbf e_2\\ &= \mu_1\mu_2\mathbf v+\mu_2\mathbf e_1+C_1\mathbf e_2 \end{aligned} C×v=(C1⋅C2)v=C1(μ2v+e2)=μ2(μ1v+e1)+C1e2=μ1μ2v+μ2e1+C1e2
这里可以看出, μ 2 e 1 \mu_2\mathbf e_1 μ2e1确实是一个比较小的噪声项, 但是要让 C × C^\times C×的噪声比较小, 那么就需要让 C 1 C_1 C1是一个较小的矩阵(即其最大的元素较小), 我们稍后会解释如何做到这一点.
虽然说是乘法同态性质, 但是由于 μ i ∈ { 0 , 1 } \mu_i\in\{0,1\} μi∈{ 0,1}, 我们也可以将 C × C^\times