概述
[BV11b] 方案是最早的基于标准LWE假设的加密方案, 该方案基于一个优化版本的LWE公钥加密, 采用类似于多项式插值的方式来实现同态运算。
整篇文章有两个核心重线性化(re-linearization) (解决密文乘法导致长度增长问题)和 维数-模约减(a dimension-modulus reduction)(降低同态解密时的电路深度,使得解密电路深度小于有限次同态加密的电路深度,也就是压缩解密电路)。
重线性化
一个基于LWE难题的一般加密方案如下:
明文
m
∈
{
0
,
1
}
m \in \{0,1\}
m∈{0,1},密钥
s
∈
Z
q
n
\mathbf{s} \in \mathbb{Z_q^n}
s∈Zqn,随即均匀选取向量
a
∈
Z
q
n
\mathbf{a} \in \mathbb{Z_q^n}
a∈Zqn,一个随机极小噪音
e
e
e
密文
c
=
(
a
,
b
=
<
a
,
s
>
+
2
e
+
m
)
c = (\mathbf{a},b = <\mathbf{a},\mathbf{s}>+2e+m)
c=(a,b=<a,s>+2e+m)。
注意这里没有采用传统的噪音
e
e
e,而是选用了
2
e
2e
2e,是因为在
q
q
q是奇数的情况下,这个操作不会影响安全性,且可以通过模2使得解密更简单。解密就是减掉
a
,
s
\mathbf{a},\mathbf{s}
a,s,然后模
q
q
q再模2。
很容易验证,这个方案是加法同态的,而乘法却很困难,因为密文膨胀得很厉害。
从解密出发,给定一个密文
(
a
,
b
)
(\mathbf{a},b)
(a,b),定义一个线性解密函数
f
a
,
b
:
Z
q
n
→
Z
q
f_{\mathbf{a},b}:\mathbb{Z_q^n \rightarrow \mathbb{Z_q}}
fa,b:Zqn→Zq,如下:
f
a
,
b
(
x
)
=
b
−
⟨
a
,
x
⟩
(
m
o
d
q
)
=
b
−
∑
i
=
1
n
a
[
i
]
⋅
x
[
i
]
∈
Z
q
f_{\mathbf{a}, b}(\mathbf{x})=b-\langle\mathbf{a}, \mathbf{x}\rangle \quad(\bmod q)=b-\sum_{i=1}^{n} \mathbf{a}[i] \cdot \mathbf{x}[i] \in \mathbb{Z}_{q}
fa,b(x)=b−⟨a,x⟩(modq)=b−i=1∑na[i]⋅x[i]∈Zq
其中
x
=
(
x
[
1
]
,
…
,
x
[
n
]
)
\mathbf{x}=(\mathbf{x}[1],\dots,\mathbf{x}[n])
x=(x[1],…,x[n])为自变量([n]的数字表示第多少位),
(
a
,
b
)
(\mathbf{a},b)
(a,b)为系数,很明显的是,解密操作就是将
s
\mathbf{s}
s带入然后模2即可。
若使用这个函数来描述同态加法:将得到两个密文之和的解密
f
(
a
+
a
′
,
b
+
b
′
)
(
x
)
=
f
a
,
b
(
x
)
+
f
(
a
′
,
b
′
)
(
x
)
f_{\left(\mathbf{a}+\mathbf{a}^{\prime}, b+b^{\prime}\right)}(\mathbf{x})=f_{\mathbf{a}, b}(\mathbf{x})+f_{\left(\mathbf{a}^{\prime}, b^{\prime}\right)}(\mathbf{x})
f(a+a′,b+b′)(x)=fa,b(x)+f(a′,b′)(x)
若使用这个函数来描述同态乘法:将得到两个密文之积的解密
f
(
a
,
b
)
(
x
)
⋅
f
(
a
′
,
b
′
)
(
x
)
=
(
b
−
∑
a
[
i
]
x
[
i
]
)
⋅
(
b
′
−
∑
a
′
[
i
]
x
[
i
]
)
=
h
0
+
∑
h
i
⋅
x
[
i
]
+
∑
h
i
,
j
⋅
x
[
i
]
x
[
j
]
\begin{aligned} f_{(\mathbf{a}, b)} &(\mathbf{x}) \cdot f_{\left(\mathbf{a}^{\prime}, b^{\prime}\right)}(\mathbf{x}) \\ &=\left(b-\sum \mathbf{a}[i] \mathbf{x}[i]\right) \cdot\left(b^{\prime}-\sum \mathbf{a}^{\prime}[i] \mathbf{x}[i]\right) \\ &=h_{0}+\sum h_{i} \cdot \mathbf{x}[i]+\sum h_{i, j} \cdot \mathbf{x}[i] \mathbf{x}[j] \end{aligned}
f(a,b)(x)⋅f(a′,b′)(x)=(b−∑a[i]x[i])⋅(b′−∑a′[i]x[i])=h0+∑hi⋅x[i]+∑hi,j⋅x[i]x[j]
用
h
0
h_0
h0表示不含
x
\mathbf{x}
x的项,依次类推,这个数是可以算出来的,但是这里就表示一下意思。(顺便提醒一下这里的
[
i
]
[
j
]
[i][j]
[i][j]表示的是第一个密文密钥的第
[
i
]
[i]
[i]个元素与第二个密文密钥的第
[
j
]
[j]
[j]个元素相乘,前面第二行没用
[
j
]
[j]
[j]的原因是为了后面合并一下同类项好理解一点,其实密钥都是同一个
s
\mathbf{s}
s。。。)
现在来看看解密,还是老样子,带入密钥再模2就行。但是这里描述多项式的系数个数直接从
O
(
n
)
O(n)
O(n)上升到了近乎
O
(
n
2
)
O(n^2)
O(n2),也就意味着密文膨胀得很大,假如乘了
L
L
L次,那就膨胀得很恐怖了。
解决办法就是重线性化,它可以将数量还原到以前的级别。
重线性化的核心思想如下,
首先公开在密钥
t
t
t加密下的密钥
s
s
s中的所有比特的线性和二次项的加密,即
s
[
i
]
s[i]
s[i]和
s
[
i
]
s
[
j
]
s[i]s[j]
s[i]s[j]的密文。它们大概长酱紫
b i , j = ⟨ a i , j , t ⟩ + 2 e i , j + s [ i ] ⋅ s [ j ] ≈ ⟨ a i , j , t ⟩ + s [ i ] ⋅ s [ j ] b_{i, j}=\left\langle\mathbf{a}_{i, j}, \mathbf{t}\right\rangle+2 e_{i, j}+\mathbf{s}[i] \cdot \mathbf{s}[j] \approx\left\langle\mathbf{a}_{i, j}, \mathbf{t}\right\rangle+\mathbf{s}[i] \cdot \mathbf{s}[j] bi,j=⟨ai,j,t⟩+2ei,j+s[i]⋅s[j]≈⟨ai,j,t⟩+s[i]⋅s[j]
(
b
[
i
]
b_{[i]}
b[i]的表达式,抹掉
j
j
j就好,然后要注意的是这里
a
i
,
j
\mathbf{a}_{i, j}
ai,j下面的
i
,
j
i,j
i,j表示的意思是,它对应加密的密钥是
s
[
i
]
⋅
s
[
j
]
\mathbf{s}[i] \cdot \mathbf{s}[j]
s[i]⋅s[j],它实际上还是只有
n
n
n维,不是
n
×
n
n \times n
n×n哦)
然后我们利用这个表达式对上面的同态乘法的解密结果进行表示如下
B e f o r e : h 0 + ∑ h i ⋅ s [ i ] + ∑ h i , j ⋅ s [ i ] s [ j ] A f t e r : h 0 + ∑ h i ( b i − ⟨ a i , t ⟩ ) + ∑ i , j h i , j ⋅ ( b i , j − ⟨ a i , j , t ⟩ ) Before:\\ h_{0}+\sum h_{i} \cdot \mathbf{s}[i]+\sum h_{i, j} \cdot \mathbf{s}[i] \mathbf{s}[j] \\ After:\\ h_{0}+\sum h_{i}\left(b_{i}-\left\langle\mathbf{a}_{i}, \mathbf{t}\right\rangle\right)+\sum_{i, j} h_{i, j} \cdot\left(b_{i, j}-\left\langle\mathbf{a}_{i, j}, \mathbf{t}\right\rangle\right) Before:h0+∑hi⋅s[i]+∑hi,j⋅s[i]s[j]After:h0+∑hi(bi−⟨ai,t⟩)+i,j∑hi,j⋅(bi,j−⟨ai,j,t⟩)
这样这就把两个密文解密函数相乘重线性化为了一个仅仅包含未知数 t t t的一个函数表达式,这个表达式的使用密钥 t t t解密的结果模2后还是以前的明文。
把不含 t t t和含 t t t的分别合并同类项,就能得到一个二次变一次的线性函数表达式,并且为 O ( n ) O(n) O(n)的数量级。(因为不管是 a i \mathbf{a}_{i} ai还是 a i , j \mathbf{a}_{i, j} ai,j,始终来源于 a ∈ Z q n \mathbf{a} \in \mathbb{Z_q^n} a∈Zqn,只有 n n n维,所以系数个数可以直接通过合并同类项还原回了 O ( n ) O(n) O(n)级别。)
当然这里存在着一个问题,在上面的替换中,我们把 s [ i ] s [ j ] \mathbf{s}[i]\mathbf{s}[j] s[i]s[j]替换成了 b i , j − < a i , j , t > b_{i,j} - <a_{i,j},t> bi,j−<ai,j,t>,事实上这里是约掉了差值 2 e i , j 2e_{i,j} 2ei,j,而 h i , j h_{i,j} hi,j这个值有可能会很大,乘上两倍的误差就会很大,所以这样两个替换值之间就不能画上约等号。
那么秉着遇到什么问题解决什么问题的原则,我们需要将
h
i
,
j
h_{i,j}
hi,j变小,使得两个替换能够近似相等。方法就是采用二进制分解,即,
h
i
,
j
=
∑
τ
=
0
log
q
2
τ
⋅
h
i
,
j
,
τ
h_{i,j}=\sum_{\tau=0}^{\log q}2^\tau \cdot h_{i,j,\tau}
hi,j=∑τ=0logq2τ⋅hi,j,τ
这样就可以细化到对每一个比特进行操作,从而将误差化小就可以近似化。
对于每一个
τ
\tau
τ值,有
(
a
i
,
j
,
τ
,
b
i
,
j
,
τ
)
(a_{i,j,\tau},b_{i,j,\tau})
(ai,j,τ,bi,j,τ)
b
i
,
j
,
τ
=
⟨
a
i
,
j
,
τ
,
t
⟩
+
2
e
i
,
j
,
τ
+
2
τ
s
[
i
]
⋅
s
[
j
]
≈
⟨
a
i
,
j
,
τ
,
t
⟩
+
2
τ
s
[
i
]
⋅
s
[
j
]
\begin{aligned} b_{i, j, \tau} &=\left\langle\mathbf{a}_{i, j, \tau}, \mathbf{t}\right\rangle+2 e_{i, j, \tau}+2^{\tau} \mathbf{s}[i] \cdot \mathbf{s}[j] \\ & \approx\left\langle\mathbf{a}_{i, j, \tau}, \mathbf{t}\right\rangle+2^{\tau} \mathbf{s}[i] \cdot \mathbf{s}[j] \end{aligned}
bi,j,τ=⟨ai,j,τ,t⟩+2ei,j,τ+2τs[i]⋅s[j]≈⟨ai,j,τ,t⟩+2τs[i]⋅s[j]
代入表达式也就是
h
i
,
j
⋅
s
[
i
]
s
[
j
]
=
∑
τ
=
0
⌊
log
q
⌋
h
i
,
j
,
τ
2
τ
s
[
i
]
s
[
j
]
≈
∑
τ
=
0
⌊
log
q
⌋
h
i
,
j
,
τ
(
b
i
,
j
,
τ
−
⟨
a
i
,
j
,
τ
,
t
⟩
)
\begin{aligned} h_{i, j} \cdot \mathbf{s}[i] \mathbf{s}[j] &=\sum_{\tau=0}^{\lfloor\log q\rfloor} h_{i, j, \tau} 2^{\tau} \mathbf{s}[i] \mathbf{s}[j] \\ & \approx \sum_{\tau=0}^{\lfloor\log q\rfloor} h_{i, j, \tau}\left(b_{i, j, \tau}-\left\langle\mathbf{a}_{i, j, \tau}, \mathbf{t}\right\rangle\right) \end{aligned}
hi,j⋅s[i]s[j]=τ=0∑⌊logq⌋hi,j,τ2τs[i]s[j]≈τ=0∑⌊logq⌋hi,j,τ(bi,j,τ−⟨ai,j,τ,t⟩)
这样就不会出现约等号不成立的情况了。
以上就是重线性化的核心内容,如果发布一个密钥“链”的加密(也就是使用下一个密钥对上一个的二次项进行加密),就能大致得到一个密钥链长度的乘法级别。
当然这只是控制了密文的增长,接下来还需要处理计算产生的噪声。
维度-模约减
我们知道,要完成同态解密,那么解密电路深度就必须小于算法本身的同态计算电路深度,也就是同态解密所产生的噪声要比噪声的上限小一点,至少要能满足一次同态计算。
再看看噪声,上面的同态乘法计算的噪声增长是双指数级别的,也就是 L L L层(注意是层,不是次)乘法之后噪声将变为 e 2 L e^{2^L} e2L(因为电路结构是有点类似完全二叉树甚至满二叉树的),噪声增长极为快,而我们的模数 q q q只能达到 2 n ϵ 2^{n^{\epsilon}} 2nϵ( ϵ \epsilon ϵ是常数),要想噪声上限不超过模数 q q q, L L L只能选择在 p o l y l o g ( n ) polylog(n) polylog(n),而上面基本LWE方案(密钥 s ∈ Z q n \mathbf{s} \in \mathbb{Z_q^n} s∈Zqn)的同态解密运算电路深度为 m a x ( n , log q ) max(n,\log q) max(n,logq)。(可以理解为 n n n是密钥的维度, log q \log q logq是每一位二进制化后的比特数,解密运算也涉及到乘法,而且同态解密之前会先对密钥进行逐比特的加密,再使用加密后的密钥进行解密运算)
显然此时同态运算的电路深度是比同态解密电路小的,也就是该方案无法支持解密电路,所以需要压缩解密电路。
核心思想是采用上述参数为 ( n , log q ) (n, \log q) (n,logq)的密文,并将其转换为相同消息的密文,但其参数为 ( k , log p ) (k,\log p) (k,logp),远小于 ( n , log q ) (n,\log q) (n,logq),其中 p = p o l y ( k ) p=poly(k) p=poly(k), n = k c n = k^c n=kc,由于 q = 2 n ϵ q = 2^{n^{\epsilon}} q=2nϵ,就可以做 D = n ϵ = k c ⋅ ϵ D = n^{\epsilon}=k^{c\cdot \epsilon} D=nϵ=kc⋅ϵ层同态运算。这里同态运算层数就比同态解密层数大了,相当于包含进去了。
减小维度,在重线性化的时候, s \mathbf{s} s和 t \mathbf{t} t是不需要具有相同维度的,所以将 t \mathbf{t} t选择为 k k k维,以减少了维度。
减小模数,通过简单的近似缩放使得具有较小的模数
p
p
p,通过在模
q
q
q时乘以
p
/
q
p/q
p/q再通过就近取整来将
2
τ
⋅
s
[
i
]
∈
Z
q
2^{\tau} \cdot \mathbf{s}[i] \in \mathbb{Z_q}
2τ⋅s[i]∈Zq缩放为
Z
p
Z_p
Zp中的一个元素,舍入误差最大为
1
/
2
1/2
1/2,即,
b
i
,
τ
=
⟨
a
i
,
τ
,
t
⟩
+
e
+
⌊
p
q
⋅
2
τ
⋅
s
[
i
]
⌉
b_{i, \tau}=\left\langle\mathbf{a}_{i, \tau}, \mathbf{t}\right\rangle+e+\left\lfloor\frac{p}{q} \cdot 2^{\tau} \cdot \mathbf{s}[i]\right\rceil
bi,τ=⟨ai,τ,t⟩+e+⌊qp⋅2τ⋅s[i]⌉
也就是
2
τ
⋅
s
[
i
]
≈
q
p
⋅
(
b
i
,
τ
−
⟨
a
i
,
τ
,
t
⟩
)
2^{\tau} \cdot \mathbf{s}[i] \approx \frac{q}{p} \cdot\left(b_{i, \tau}-\left\langle\mathbf{a}_{i, \tau}, \mathbf{t}\right\rangle\right)
2τ⋅s[i]≈pq⋅(bi,τ−⟨ai,τ,t⟩)
该式子可以将
s
\mathbf{s}
s的线性方程切换为
t
\mathbf{t}
t的线性方程进行计算,这时的模数和维数都变小了。
部分同态加密 SH
使用重线性化来缩减密文大小
方案
-
S H . S e t u p ( 1 L , 1 k ) SH.Setup(1^L,1^k) SH.Setup(1L,1k):
明文空间为 G F ( 2 ) GF(2) GF(2),安全参数 k ∈ N k \in \mathbb{N} k∈N,维度 n ∈ N n \in \mathbb{N} n∈N,正整数 m ∈ N m \in \mathbb{N} m∈N,奇模数 q ∈ N q \in \mathbb{N} q∈N, χ \chi χ是 Z q \mathbb{Z_q} Zq上的噪声分布,乘法深度上限 L ∈ N L \in \mathbb{N} L∈N维数 n n n是 k k k的多项式也就是 n = p o l y ( k ) n = poly(k) n=poly(k), m ≥ n l o g q + 2 k m \ge nlogq+2k m≥nlogq+2k是一个 n n n的多项式, q ∈ [ 2 n ϵ , 2 ⋅ 2 n ϵ ] q \in [2^{n^{\epsilon}},2 \cdot 2^{n^{\epsilon}}] q∈[2nϵ,2⋅2nϵ]为一个次指数( ϵ ∈ ( 0 , 1 ) \epsilon \in (0,1) ϵ∈(0,1),是一个常数), χ \chi χ产生最大幅度为 n n n的小样本, L ≈ ϵ log n L \approx \epsilon \log n L≈ϵlogn
-
S H . K e n G e n ( 1 k ) SH.KenGen(1^k) SH.KenGen(1k):
选取 L + 1 L+1 L+1个向量 s 0 , … , s L ← Z q n \mathbf{s_0},\dots,\mathbf{s_L}\leftarrow \mathbb Z_q^{n} s0,…,sL←Zqn
对于所有的 ℓ ∈ [ L ] , 0 ≤ i ≤ j ≤ n \ell\in[L],0\leq i\leq j\leq n ℓ∈[L],0≤i≤j≤n和 τ ∈ { 0 , ⋯ , ⌊ log q ⌋ } \tau\in\{0,\cdots,\lfloor\log q\rfloor\} τ∈{0,⋯,⌊logq⌋}计算
ψ ℓ , i , j , τ = ( a ℓ , i , j , τ , b ℓ , i , j , τ = ⟨ a ℓ , i , j , τ , s ⟩ + 2 ⋅ e ℓ , i , j , τ + 2 τ ⋅ s ℓ − 1 ⋅ s ℓ − 1 [ j ] ) ∈ Z q n × Z q \psi_{\ell,i,j,\tau}=\left(\mathbf a_{\ell,i,j,\tau},b_{\ell,i,j,\tau}=\langle\mathbf a_{\ell,i,j,\tau},\mathbf s\rangle+2\cdot e_{\ell,i,j,\tau}+2^\tau\cdot \mathbf s_{\ell-1}\cdot \mathbf s_{\ell-1}[j]\right)\in \mathbb Z_q^n \times \mathbb Z_q ψℓ,i,j,τ=(aℓ,i,j,τ,bℓ,i,j,τ=⟨aℓ,i,j,τ,s⟩+2⋅eℓ,i,j,τ+2τ⋅sℓ−1⋅sℓ−1[j])∈Zqn×Zq
回想一下前面重线性化的定义,上面这一串表示在密钥 s l \mathbf{s}_l sl对密钥 s l − 1 \mathbf{s}_{l-1} sl−1的各位组合的加密,根据上面的二进制分解,细化到了比特。同时随机均匀选择 A ← Z q m × n \mathbf{A}\leftarrow \mathbb{Z_q^{m\times n}} A←Zqm×n和 e ← χ m \mathbf{e}\leftarrow\chi^m e←χm, 计算 b = A s 0 + 2 e \mathbf b=\mathbf A\mathbf s_0+2\mathbf e b=As0+2e.
输出私钥 s k = s L sk=s_L sk=sL, 评估计算密钥集合 e v k = Ψ = { ψ ℓ , i , j , τ } ℓ ∈ [ L ] , 0 ≤ i ≤ j ≤ n , τ ∈ { 0 , ⋯ , ⌊ log q ⌋ } evk=\Psi=\{\psi_{\ell,i,j,\tau}\}_{\ell\in[L],0\leq i\leq j\leq n,\tau\in\{0,\cdots,\lfloor\log q\rfloor\}} evk=Ψ={ψℓ,i,j,τ}ℓ∈[L],0≤i≤j≤n,τ∈{0,⋯,⌊logq⌋}和公钥 p k = ( A , b ) pk=(\mathbf A,\mathbf b) pk=(A,b). -
S H . E n c p k ( μ ) SH.Enc_{pk}(\mu) SH.Encpk(μ):
选择 r ← { 0 , 1 } m \mathbf{r}\leftarrow \{0,1\}^m r←{0,1}m, 计算 v = A T r \mathbf v=\mathbf A^T\mathbf r v=ATr和 w : = b T r + μ w:=\mathbf b^T\mathbf r+\mu w:=bTr+μ, 输出密文 c : = ( ( v , w ) , 0 ) c:=((\mathbf v,w),0) c:=((v,w),0).注意这里最后的 0 0 0代表当前同态(乘法)运算的层数. 同时由于噪声始终是偶数累计的, 因此模2仍然可以消除噪声.
在做完同态运算后, 我们得到的是第 L L L层的密文, 即密文的格式是 c = ( ( v , w ) , L ) c=((\mathbf v,w),L) c=((v,w),L).
-
S H . D e c s L ( c ) SH.Dec_{sL}(c) SH.DecsL(c):
输出 ( ( w − ⟨ v , s L ⟩ ) m o d q ) m o d 2 ((w-\langle\mathbf v,\mathbf s_L\rangle)\mod q)\mod 2 ((w−⟨v,sL⟩)modq)mod2
这里注意 v \mathbf v v连同 w w w就构成了最终解密多项式函数的描述, ( w − ⟨ v , s L ⟩ ) m o d q (w-\langle\mathbf v,\mathbf s_L\rangle)\mod q (w−⟨v,sL⟩)modq就相当于是求解密多项式在 s L \mathbf s_L sL点的值.
同态计算
S
H
.
E
v
a
l
e
v
k
(
f
,
c
1
,
…
,
c
t
)
SH.Eval_{evk}(f,c_1,\dots,c_t)
SH.Evalevk(f,c1,…,ct):
其中要求
f
:
{
0
,
1
}
t
→
{
0
,
1
}
f:\{0,1\}^t \rightarrow \{0,1\}
f:{0,1}t→{0,1} 有任意"+"和"x"门。
-
加法
加法门密文输入为 c 1 , … , c t c_1,\dots,c_t c1,…,ct,其中 c i = ( ( v i , w i ) , ℓ ) c_i=((\mathbf v_i,w_i),\ell) ci=((vi,wi),ℓ) ,计算(这里的分层标签 l l l,是没有变化的)
c a d d = ( ( v add , w add ) , ℓ ) : = ( ( ∑ i v i , ∑ i w i ) , ℓ ) c_{\mathrm{add}}=\left(\left(\mathbf{v}_{\text {add }}, w_{\text {add }}\right), \ell\right):=\left(\left(\sum_{i} \mathbf{v}_{i}, \sum_{i} w_{i}\right), \ell\right) cadd=((vadd ,wadd ),ℓ):=((i∑vi,i∑wi),ℓ)
很容易求得,
w add − ⟨ v add , s ℓ ⟩ = ∑ i ( w i − ⟨ v i , s ℓ ⟩ ) = ∑ i ( μ i + 2 e i ) = ∑ i μ i + 2 ∑ i e i w_{\text {add }}-\left\langle\mathbf{v}_{\text {add }}, \mathbf{s}_{\ell}\right\rangle=\sum_{i}\left(w_{i}-\left\langle\mathbf{v}_{i}, \mathbf{s}_{\ell}\right\rangle\right)=\sum_{i}\left(\mu_{i}+2 e_{i}\right)=\sum_{i} \mu_{i}+2 \sum_{i} e_{i} wadd −⟨vadd ,sℓ⟩=i∑(wi−⟨vi,sℓ⟩)=i∑(μi+2ei)=i∑μi+2i∑ei
能看到满足加法同态。 -
乘法
对于两个同层的乘法密文 c = ( ( v , w ) , ℓ ) c=((\mathbf v,w),\ell) c=((v,w),ℓ)和 c ’ = ( ( v ’ , w ’ ) , ℓ ) c’=((\mathbf v’,w’),\ell) c’=((v’,w’),ℓ), 象征性表达计算
ϕ ( x ) = ( w − ⟨ v , x ⟩ ) ( w ’ − ⟨ v ’ , x ⟩ ) = ∑ 0 ≤ i ≤ j ≤ n h i , j ⋅ x [ i ] x [ j ] \phi(\mathbf x)=(w-\langle \mathbf v,\mathbf x\rangle)(w’-\langle\mathbf v’,\mathbf x\rangle)=\sum_{0\leq i\leq j\leq n} h_{i,j}\cdot\mathbf x[i]\mathbf x[j] ϕ(x)=(w−⟨v,x⟩)(w’−⟨v’,x⟩)=0≤i≤j≤n∑hi,j⋅x[i]x[j]
注意 ∑ \sum ∑记号处, h i h_{i} hi可以表示为 h i , 0 h_{i,0} hi,0,这样就可以避免冗余。实际上其内容包括常数项 h 0 = w w ’ h_0=ww’ h0=ww’, 一次项(系数为 h i ≠ 0 , j = 0 h_{i\neq 0,j=0} hi=0,j=0)和二次项(系数为 h i ≠ 0 , j ≠ 0 h_{i\neq0,j\neq 0} hi=0,j=0)。下面的也是同理。令 h i , j = ∑ τ = 0 ⌊ log q ⌋ h i , j , τ ⋅ 2 τ h_{i,j}=\sum\limits_{\tau=0}^{\lfloor\log q\rfloor}h_{i,j,\tau}\cdot 2^\tau hi,j=τ=0∑⌊logq⌋hi,j,τ⋅2τ, 并代入 e v k = Ψ evk=\Psi evk=Ψ中对应层级+1的元素, (也就是重线性化)
2 τ s l [ i ] s l [ j ] ≈ b l + 1 , i , j , τ − < a l + 1 , i , j , τ , s l + 1 > 2^{\tau} s_{l}[i] s_{l}[j] \approx b_{l+1, i, j, \tau}-<a_{l+1, i, j, \tau}, s_{l+1}> 2τsl[i]sl[j]≈bl+1,i,j,τ−<al+1,i,j,τ,sl+1>
根据解密计算 w − < v , s > w-<v,s> w−<v,s>,可以设置同态乘法
v m u l t = ∑ 0 ≤ i ≤ j ≤ n τ ∈ { 0 , ⋯ , ⌊ log q ⌋ } h i , j , τ ⋅ a ℓ + 1 , i , j , τ \mathbf v_{mult}=\sum_{\begin{aligned}0\leq i\leq &j\leq n\\ \tau\in\{0,\cdots&,\lfloor\log q\rfloor\}\end{aligned}} h_{i,j,\tau}\cdot \mathbf a_{\ell+1,i,j,\tau} vmult=0≤i≤τ∈{0,⋯j≤n,⌊logq⌋}∑hi,j,τ⋅aℓ+1,i,j,τ
和
w m u l t = ∑ 0 ≤ i ≤ j ≤ n τ ∈ { 0 , ⋯ , ⌊ log q ⌋ } h i , j , τ ⋅ b ℓ + 1 , i , j , τ w_{mult}=\sum_{\begin{aligned}0\leq i\leq &j\leq n\\ \tau\in\{0,\cdots&,\lfloor\log q\rfloor\}\end{aligned}} h_{i,j,\tau}\cdot b_{\ell+1,i,j,\tau} wmult=0≤i≤τ∈{0,⋯j≤n,⌊logq⌋}∑hi,j,τ⋅bℓ+1,i,j,τ
最终输出的密文将是 ( ( v m u l t , w m u l t ) , ℓ + 1 ) ((\mathbf v_{mult},w_{mult}),\ell+1) ((vmult,wmult),ℓ+1).
计算验证:
KaTeX parse error: Undefined control sequence: \substack at position 114: …t\rangle=\sum_{\̲s̲u̲b̲s̲t̲a̲c̲k̲{0 \leq i \leq …
可自举同态加密方案 BTS
使用维度-模约减方案来降低解密电路的复杂程度
方案
-
B T S . S e t u p ( 1 L , 1 k ) BTS.Setup(1_L,1^k) BTS.Setup(1L,1k):
参数分为基础SH方案的参数 ( n , m , q , χ , L ) (n,m,q,\chi,L) (n,m,q,χ,L),和附加用于维度-模约减的参数 ( k , p , χ ^ ) (k,p,\hat \chi) (k,p,χ^) -
B T S . K e y G e n ( 1 k ) BTS.KeyGen(1^k) BTS.KeyGen(1k):
调用 S H . K e y G e n ( 1 λ ) \mathsf{SH.KeyGen}(1^\lambda) SH.KeyGen(1λ)得到 s L , Ψ , ( A , b ) \mathbf{s_L},\Psi,(\mathbf {A},\mathbf{b}) sL,Ψ,(A,b). 生成短的私钥 s ^ ← Z p k \hat{\mathbf {s}}\leftarrow \mathbb Z_p^k s^←Zpk并计算对应于这个短私钥的计算密钥, 即对于所有的 i ∈ [ n ] , τ ∈ { 0 , ⋯ , ⌊ log q ⌋ } i\in[n],\tau\in \{0,\cdots,\lfloor\log q\rfloor\} i∈[n],τ∈{0,⋯,⌊logq⌋}, 生成 a ^ i , τ ← Z p k , e ^ ← χ ^ \hat{\mathbf a}_{i,\tau}\leftarrow \mathbb Z_p^k,\hat e\leftarrow \hat \chi a^i,τ←Zpk,e^←χ^ 并计算(维度-模约减操作)
b ^ i , τ : = ⟨ a ^ i , τ , s ^ ⟩ + e ^ i , τ + ⌊ p q ⋅ ( 2 τ ⋅ s L [ i ] ) ⌉ m o d p \hat b_{i,\tau}:=\langle\hat{\mathbf a}_{i,\tau},\hat{\mathbf s}\rangle+\hat e_{i,\tau}+\left\lfloor\frac pq\cdot(2^\tau\cdot\mathbf s_L[i])\right\rceil \mod p b^i,τ:=⟨a^i,τ,s^⟩+e^i,τ+⌊qp⋅(2τ⋅sL[i])⌉modp
记 ψ ^ i , τ : = ( a ^ i , τ , b ^ i , τ ) ∈ Z p k × Z p \hat\psi_{i,\tau}:=(\hat{\mathbf a}_{i,\tau},\hat b_{i,\tau})\in \mathbb Z_p^k\times \mathbb Z_p ψ^i,τ:=(a^i,τ,b^i,τ)∈Zpk×Zp和 Ψ ^ = { ψ ^ i , τ } i ∈ [ n ] , τ ∈ { 0 , ⋯ , ⌊ log q ⌋ } \hat\Psi=\{\hat\psi_{i,\tau}\}_{i\in[n],\tau\in\{0,\cdots,\lfloor\log q\rfloor\}} Ψ^={ψ^i,τ}i∈[n],τ∈{0,⋯,⌊logq⌋}.(小密钥的重线性化操作,计算出小密钥组合的密文集合)最终输出公钥 p k = ( A , b ) pk=(\mathbf A,\mathbf b) pk=(A,b), 私钥 s k = s ^ sk = \hat {\mathbf s} sk=s^, 计算密钥 e v k = { Ψ , Ψ ^ } evk=\{\Psi, \hat \Psi\} evk={Ψ,Ψ^}.
-
B T S . E n c p k ( μ ) BTS.Enc_{pk}(\mu) BTS.Encpk(μ):
输出 S H . E n c p k ( μ ) SH.Enc_{pk}(\mu) SH.Encpk(μ)的计算过程,输出密文 c c c。 -
B T S . D e c s ^ ( c ^ ) BTS.Dec_{\hat{\mathbf s}}(\hat c) BTS.Decs^(c^):
c ^ = ( v ^ , w ^ ) ∈ Z p k × Z p \hat{c}=(\hat{\mathbf{v}}, \hat{w}) \in \mathbb{Z}_{p}^{k} \times \mathbb{Z}_{p} c^=(v^,w^)∈Zpk×Zp
只需要解密同态计算输出的密文,即
μ ∗ = ( ( w ^ − ⟨ v ^ , s ^ ⟩ ) m o d q ) m o d 2 \mu^\ast=((\hat w-\langle\hat{\mathbf v},\hat{\mathbf s}\rangle) \mod q)\mod 2 μ∗=((w^−⟨v^,s^⟩)modq)mod2
同态计算
第一步是计算 c f ← S H . E v a l Ψ ( f , c 1 , ⋯ , c t ) c_f\leftarrow \mathsf{SH.Eval}_{\Psi}(f, c_1,\cdots, c_t) cf←SH.EvalΨ(f,c1,⋯,ct). 记 c f = ( ( v , w ) , L ) ∈ Z q n × Z q × { L } c_f=((\mathbf v,w), L)\in\mathbb Z^{n}_q\times \mathbb Z_q\times \{L\} cf=((v,w),L)∈Zqn×Zq×{L}
接下来是减少该密文的维度和模数到
k
,
p
k,p
k,p
考虑多项式函数
ϕ
(
x
)
=
p
q
⋅
(
q
+
1
2
⋅
(
w
−
⟨
v
,
x
⟩
)
)
m
o
d
p
\phi(\mathbf x)=\frac pq\cdot \left(\frac{q+1}2\cdot (w-\langle\mathbf v,\mathbf x\rangle)\right) \mod p
ϕ(x)=qp⋅(2q+1⋅(w−⟨v,x⟩))modp
按照之前的方式将其系数整理为
h
0
,
⋯
,
h
n
∈
Z
q
h_0,\cdots, h_n\in\mathbb Z_q
h0,⋯,hn∈Zq的形式, 即
ϕ
(
x
)
=
∑
i
=
0
n
h
i
⋅
(
p
q
⋅
x
[
i
]
)
\phi(\mathbf x)=\sum^n_{i=0}h_i\cdot(\frac pq \cdot \mathbf x[i])
ϕ(x)=i=0∑nhi⋅(qp⋅x[i])
再将
h
i
h_i
hi按照二进制展开, 得到
ϕ
(
x
)
=
∑
i
=
0
n
∑
τ
=
0
⌊
log
q
⌋
h
i
,
τ
⋅
(
p
q
⋅
2
τ
⋅
x
[
i
]
)
\phi(\mathbf x)=\sum^n_{i=0}\sum_{\tau=0}^{\lfloor\log q\rfloor}h_{i,\tau}\cdot (\frac pq\cdot 2^\tau\cdot\mathbf x[i])
ϕ(x)=i=0∑nτ=0∑⌊logq⌋hi,τ⋅(qp⋅2τ⋅x[i])
采用
Ψ
^
\hat\Psi
Ψ^中的密钥来替换上式中的
p
q
⋅
(
2
τ
⋅
s
L
[
i
]
)
\frac pq\cdot(2^\tau\cdot\mathbf s_L[i])
qp⋅(2τ⋅sL[i])可以得到一个新的一次多项式函数, 记常数项为
w
^
\hat w
w^, 一次项系数向量为
v
^
\hat{\mathbf v}
v^则
v
^
=
2
⋅
∑
i
=
0
n
∑
τ
=
0
⌊
log
q
⌋
h
i
,
τ
⋅
a
^
i
,
τ
m
o
d
p
∈
Z
p
k
w
^
=
2
⋅
∑
i
=
0
n
∑
τ
=
0
⌊
log
q
⌋
h
i
,
τ
⋅
b
^
i
,
τ
m
o
d
q
∈
Z
q
\begin{aligned} \hat{\mathbf v}=2\cdot \sum^n_{i=0}\sum^{\lfloor\log q\rfloor}_{\tau=0}h_{i,\tau}\cdot\hat{\mathbf a}_{i,\tau} \mod p\in \mathbb Z_p^k\\ \hat w=2\cdot \sum^n_{i=0}\sum^{\lfloor\log q\rfloor}_{\tau=0}h_{i,\tau}\cdot\hat b_{i,\tau}\mod q\in\mathbb Z_q \end{aligned}
v^=2⋅i=0∑nτ=0∑⌊logq⌋hi,τ⋅a^i,τmodp∈Zpkw^=2⋅i=0∑nτ=0∑⌊logq⌋hi,τ⋅b^i,τmodq∈Zq
最后输出密文
c
^
=
(
v
^
,
w
^
)
\hat c=(\hat{\mathbf v},\hat w)
c^=(v^,w^).
这里
c
^
\hat c
c^的长度为
(
k
+
1
)
log
p
(k+1)\log p
(k+1)logp
计算的验证可以参看原文(属实顶不住了)
貌似这个方案是控制密文的膨胀,压缩了一下解密电路的复杂度,但是没有管噪声增长???
参考
同态加密(一)-基于标准LWE的高效全同态加密1(Efficient Fully Homomorphic Encryption from (Standard) LWE)
Zvika Brakersi and Vinod Vaikuntanathan. Efficient fully homomorphic encryption from (standard) LWE. In FOCS, pages 97-106, 2011.