文章目录
FHEW: Bootstrapping Homomorphic Encryption in Less Than a Second
作者: Leo Ducas1, Daniele Micciancio2.
个人总结
FHEW总结:
其实FHEW的主要贡献就在于使用了累加器的方法来做Bootstrapping,思路是在幂次上计算
X
b
+
a
s
=
X
m
X^{b+as}=X^{m}
Xb+as=Xm,通过与一个test vector
v
(
X
)
v(X)
v(X)相乘就可以用来提取最高位,对于{0,1}的密文来说,提取了最高位就相当于做了刷新。
后续工作:
之后TFHE将FHEW中使用 R G S W \sf RGSW RGSW与 R G S W \sf RGSW RGSW内乘来做算 v ( x ) ⋅ X b + a s v(x)\cdot X^{b+as} v(x)⋅Xb+as改为了 R G S W \sf RGSW RGSW与 R L W E \sf RLWE RLWE的外乘,从而极大地提高了效率。
且FHEW中的testvector就是 v ( X ) = 1 + X + X 2 + . . . + X N − 1 v(X)=1+X+X^2+...+X^{N-1} v(X)=1+X+X2+...+XN−1。后续文章会有将 v ( X ) v(X) v(X)改为 v ( X ) = f ( 0 ) + f ( 1 ) X + . . . + f ( N − 1 ) X N − 1 v(X)=f(0)+f(1)X+...+f(N-1)X^{N-1} v(X)=f(0)+f(1)X+...+f(N−1)XN−1,就可以在做Bootstrapping的同时执行某个函数。详情可以看TFHE作者写的PBS这篇以及我们写的TOTA这篇文章。
摘要
目前所有FHE方案主要的瓶颈在于Gentry的Bootstrapping操作。在之前2014年HElib of Halevi and Shoup中,一次Bootstrapping操作需要6分钟3。我们发现了一种新的方法来刷新密文的噪声,在个人机器上只要半秒。
引言
我们的工作
这篇文章考虑了1bit密文的刷新究竟能有多快,具体来说,考虑两个加密一比特的密文 E ( b 1 ) E(b_1) E(b1)和 E ( b 2 ) E(b_2) E(b2),我们想要同态地运算一个与非门(NAND),来得到 E ( b 1 ∧ ˉ b 2 ) E(b_1 \bar{\wedge} b_2) E(b1∧ˉb2)的结果。这里考虑的门电路是带bootstrapping的门电路,也就是在执行一次同态的与非门之后,要跟上一个bootstrapping,也就是对 E ( b 1 ∧ ˉ b 2 ) E(b_1 \bar{\wedge} b_2) E(b1∧ˉb2)运行一次同态地解密电路,使得 E ( b 1 ∧ ˉ b 2 ) E(b_1 \bar{\wedge} b_2) E(b1∧ˉb2)的噪声大小与 E ( b i ) , i ∈ { 0 , 1 } E(b_i),i\in \{0,1\} E(bi),i∈{0,1}一致。这样的一次同态的NAND门加上一次Bootstrapping操作在个人电脑上的耗时为半秒。
与HElib中的bootstrapping比起来,这篇文章中在每次bootstrapping之前只允许一次NAND操作,而HElib支持更加复杂的操作,而且HElib还考虑了SIMD技术,因此平均每个比特刷新的速度和本文是一个量级的。
技术
这篇文章的提升主要基于两个技术,第一个是在两个LWE密文上计算NAND门的新算法。另一个是一种进行Bootstrapping的方法。
同态NAND门
具体来说,考虑两个密文 E ( m 1 ) E(m_1) E(m1)和 E ( m 2 ) E(m_2) E(m2),同态加密运行进行同态加法得到一个噪声更大的密文 E ( m 1 + m 2 ) E(m_1+m_2) E(m1+m2)。当在模2下考虑时,就能够同态地两个比特的异或。实现NAND门的方法就是将模2扩展到模4。考虑以下的真值表:
m 1 m_1 m1 | m 2 m_2 m2 | m 1 ∧ ˉ m 2 m_1 \bar\wedge m_2 m1∧ˉm2 | [ m 1 + m 2 ] 4 [m_1 + m_2]_4 [m1+m2]4 |
---|---|---|---|
0 | 0 | 1 | 0 |
0 | 1 | 1 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 2 |
也就是说,当 E ( m ) = E ( m 1 ) + E ( m 2 ) E(m)=E(m_1)+E(m_2) E(m)=E(m1)+E(m2)的值为 m = 2 m=2 m=2时,代表 m 1 ∧ ˉ m 2 = 0 m_1 \bar \wedge m_2=0 m1∧ˉm2=0。当 m ∈ { 0 , 1 } m\in\{0,1\} m∈{0,1}时, m 1 ∧ ˉ m 2 = 1 m_1 \bar\wedge m_2=1 m1∧ˉm2=1。利用这个性质,就可以对 E ( m ) E(m) E(m)进行一个简单的仿射变换4来将密文变为 E ( m 1 ∧ ˉ m 2 ) E(m_1 \bar\wedge m_2) E(m1∧ˉm2)。这里用到的是 5 4 − 1 2 ( m 1 + m 2 ) \frac{5}{4}-\frac{1}{2}(m_1 + m_2) 45−21(m1+m2)。再考虑如下真值表:
m 1 m_1 m1 | m 2 m_2 m2 | 5 4 − 1 2 ( m 1 + m 2 ) \frac{5}{4}-\frac{1}{2}(m_1 +m_2) 45−21(m1+m2) | ⌊ 5 4 − 1 2 ( m 1 + m 2 ) ⌉ \lfloor \frac{5}{4} - \frac{1}{2}(m_1 + m_2) \rceil ⌊45−21(m1+m2)⌉ |
---|---|---|---|
0 | 0 | 5 4 \frac{5}{4} 45 | 1 |
0 | 1 | 3 4 \frac{3}{4} 43 | 1 |
1 | 0 | 3 4 \frac{3}{4} 43 | 1 |
1 | 1 | 1 4 \frac{1}{4} 41 | 0 |
通过这样的方式来构造的NAND门,比之前的方法(通过乘法构造)的噪音要低很多。因此,噪声刷新操作(bootstrapping)也更加简单。
Bootstrapping
本文的第二个关键技术时基于文章Faster Bootstrapping with Polynomial Error5,LWE密文的解密可以由一次模q的内积和一次取整操作得到。bootstrapping就是在密文上同态地执行模q的内积以及取整。文章5中使用了一个模q的加密算法,可以很快速的计算内积。具体的做法使用一个一比特的加密算法,将一个循环群中的元素 v ∈ C v\in C v∈C,加密为一个向量 E ( x 1 ) , . . . , E ( x ∣ C ∣ ) E(x_1),...,E(x_{|C|}) E(x1),...,E(x∣C∣),其中 x i = 1 x_i=1 xi=1当且仅当 i = v i=v i=v。本文将5中的方法扩张到了多项式环上,那就支持FFT来加速运算的操作,效率得到了进一步的提高。而且还利用了多项式环的性质,将循环群中元素直接映射到多项式环上: i → X i i \to X^i i→Xi,其中 i i i是模 q q q的原根。
另外,这篇文章还使用了binary value的私钥(也就是只有0,1),来减少key switching过程中的噪声。之前有文章证明过 s s s是0,1值的时候安全性与普通的LWE问题困难度一致。
LWE对称加密
加密形式
先引入一个随机取整函数 χ : R → Z \chi:\mathbb{R}\to \mathbb{Z} χ:R→Z。这个函数将一个实数映射为一个整数,满足 χ ( x + n ) = χ ( x ) + n \chi(x+n)=\chi(x)+n χ(x+n)=χ(x)+n。将 χ ( x ) − x \chi(x)-x χ(x)−x称为rounding error。注意到如果 x ∈ Z x\in Z x∈Z,那么 χ ( x ) = x + χ ( 0 ) \chi(x) = x+\chi(0) χ(x)=x+χ(0), χ ( 0 ) \chi(0) χ(0)是一个固定的噪声分布。
记一个密文为
LWE
s
t
/
q
(
m
)
=
(
a
,
χ
(
a
⋅
s
+
m
q
/
t
)
m
o
d
q
)
∈
Z
q
n
+
1
\operatorname{LWE}_{\mathbf{s}}^{t/q}(m) = (\mathbf{a},\chi (\mathbf{a} \cdot \mathbf{s} + m q/t) \bmod q) \in \mathbb{Z}_q^{n+1}
LWEst/q(m)=(a,χ(a⋅s+mq/t)modq)∈Zqn+1
可以通过如下方式解密:
m
′
=
⌊
t
(
b
−
a
⋅
s
)
/
q
⌉
m
o
d
t
∈
Z
t
m^{\prime}=\lfloor t(b-\mathbf{a}\cdot \mathbf{s})/q \rceil \bmod t \in \mathbb{Z}_t
m′=⌊t(b−a⋅s)/q⌉modt∈Zt
要求error bound为
q
/
2
t
q/2t
q/2t时才能正确解密,原因是:
⌊
t
(
b
−
a
⋅
s
)
/
q
⌉
m
o
d
t
=
⌊
t
q
⋅
(
q
t
m
+
e
)
⌉
=
⌊
m
+
t
q
e
⌉
=
m
m
o
d
t
\lfloor t(b-\mathbf{a}\cdot \mathbf{s})/q \rceil \bmod t = \left\lfloor \frac{t}{q} \cdot (\frac{q}{t}m + e) \right\rceil = \left\lfloor m+ \frac{t}{q}e \right\rceil= m \bmod t
⌊t(b−a⋅s)/q⌉modt=⌊qt⋅(tqm+e)⌉=⌊m+qte⌉=mmodt
这里就要求
∣
t
q
e
∣
<
1
2
|\frac{t}{q}e| < \frac{1}{2}
∣qte∣<21,因此
∣
e
∣
<
q
/
2
t
|e| < q/2t
∣e∣<q/2t,记一个bound为
q
/
2
t
q/2t
q/2t的密文为
L
W
E
s
t
/
q
(
m
,
q
/
2
t
)
\mathsf{LWE}_{\mathbf{s}}^{t/q}(m,q/2t)
LWEst/q(m,q/2t)。
模数替换
可以将LWE密文从一个模数Q转换到另外一个模数
q
q
q,使用一个随机取整函数
[
⋅
]
Q
:
q
:
Z
Q
→
Z
q
[\cdot]_{Q:q}:\mathbb{Z}_Q \to \mathbb{Z}_q
[⋅]Q:q:ZQ→Zq。
[
x
]
Q
:
q
=
⌊
q
x
/
Q
⌋
+
B
,
B
∈
{
0
,
1
}
[x]_{Q:q} = \lfloor qx/Q \rfloor + B,B\in \{0,1\}
[x]Q:q=⌊qx/Q⌋+B,B∈{0,1}
B
B
B是一个随机数,
P
r
{
B
=
1
}
=
(
q
x
/
Q
)
−
⌊
q
x
/
Q
⌋
Pr\{B=1\} = (qx/Q)-\lfloor qx/Q \rfloor
Pr{B=1}=(qx/Q)−⌊qx/Q⌋,也就是
q
x
/
Q
qx/Q
qx/Q的小数部分越大,
B
B
B越可能是1。
定义ModSwitch:
ModSwitch
(
a
,
b
)
=
[
(
a
,
b
)
]
Q
:
q
=
(
(
[
a
1
]
Q
:
q
,
.
.
.
,
[
a
n
]
Q
:
q
)
,
[
b
]
Q
:
q
)
\operatorname{ModSwitch}(\mathbf{a},b) = [(\mathbf{a},b)]_{Q:q} = (([a_1]_{Q:q},...,[a_n]_{Q:q}),[b]_{Q:q})
ModSwitch(a,b)=[(a,b)]Q:q=(([a1]Q:q,...,[an]Q:q),[b]Q:q)
密钥替换
密钥替换允许将 L W E z t / q \mathsf{LWE}_{\mathbf{z}}^{t/q} LWEzt/q变为 L W E s t / q \mathsf{LWE}_{\mathbf{s}}^{t/q} LWEst/q,其中 z ∈ Z q N \mathbf{z}\in \mathbb{Z}_q^N z∈ZqN, s ∈ Z q n \mathbf{s} \in \mathbb{Z}_q^n s∈Zqn。
记 B k s B_{\mathsf{ks}} Bks是一个分解基数,记 d k s = ⌈ log B k s q ⌉ d_{\mathsf{ks}}=\lceil \log_{B_{\mathsf{ks}}}q \rceil dks=⌈logBksq⌉。 a i = ∑ j a i , j B k s j , j = 0 , . . . , d k s − 1 a_{i}=\sum_j a_{i,j} B_{\mathsf{ks}}^j,j=0,...,d_{\mathsf{ks}}-1 ai=∑jai,jBksj,j=0,...,dks−1。
对于 i = 1 , . . . , N , a i , j ∈ { 0 , . . . , B k s } , j = 0 , . . . , d k s − 1 i = 1,...,N,a_{i,j}\in\{0,...,B_{\mathsf{ks}}\},j=0,...,d_{\mathsf{ks}}-1 i=1,...,N,ai,j∈{0,...,Bks},j=0,...,dks−1。记 k i , j , a i , j = L W E s q / q ( a i , j z i B k s j ) \mathbf{k}_{i,j,a_{i,j}}=\mathsf{LWE}_{\mathbf{s}}^{q/q}(a_{i,j}z_i B_{\mathsf{ks}}^j) ki,j,ai,j=LWEsq/q(ai,jziBksj)。
记
K
=
{
k
i
,
j
,
a
i
,
j
}
\mathfrak{K}=\{\mathbf{k}_{i,j,a_{i,j}}\}
K={ki,j,ai,j},密文
(
a
,
b
)
∈
L
W
E
z
t
/
q
(
m
)
(\mathbf{a},b)\in \mathsf{LWE}_{\mathbf{z}}^{t/q}(m)
(a,b)∈LWEzt/q(m),
K
e
y
S
w
i
t
c
h
(
(
a
,
b
)
,
K
)
=
(
0
,
b
)
−
∑
i
,
j
k
i
,
j
,
a
i
,
j
\mathsf{KeySwitch}((\mathbf{a},b),\mathfrak{K})=(\mathbf{0},b)-\sum_{i,j}\mathbf{k}_{i,j,a_{i,j}}
KeySwitch((a,b),K)=(0,b)−i,j∑ki,j,ai,j
正确性:
记 ( a ′ , b ′ ) = ∑ i , j k i , j , a i , j (\mathbf{a}',b')=\sum_{i,j} \mathbf{k}_{i,j,a_{i,j}} (a′,b′)=∑i,jki,j,ai,j,则 b ′ − a ′ s = a ⋅ z b'-\mathbf{a'}s = \mathbf{a} \cdot \mathbf{z} b′−a′s=a⋅z
因此 c t x t ′ = K e y S w i t c h ( ( a , b ) = ( − a ′ , b − b ′ ) \mathsf{ctxt}' = \mathsf{KeySwitch}((\mathbf{a},b)=(-\mathbf{a}',b-b') ctxt′=KeySwitch((a,b)=(−a′,b−b′)
D e c ( c t x t ′ ) = t / q ⌊ b − ( b ′ − a ′ s ) ⌉ = m + t / q ( z ⋅ a + e − a ⋅ z ) = m \mathsf{Dec(ctxt')}= t/q\lfloor b-(b'-\mathbf{a}'s) \rceil=m+ t/q(\mathbf{z} \cdot \mathbf{a} + e-\mathbf{a\cdot z}) = m Dec(ctxt′)=t/q⌊b−(b′−a′s)⌉=m+t/q(z⋅a+e−a⋅z)=m
其中,将 a i a_i ai分解的目的是为了降低 K e y S w i t c h \mathsf{KeySwitch} KeySwitch过程中添加的噪声。
本文的FHE:高层结构
主要目的是为了做如下事情:给定 c i ∈ L W E s t / q ( m i , E ) , i = 0 , 1 c_i\in \mathsf{LWE}_{\mathbf{s}}^{t/q}(m_i,E),i=0,1 ci∈LWEst/q(mi,E),i=0,1,计算 c ∈ L W E s t / q ( m , E ) c\in \mathsf{LWE}_{\mathbf{s}}^{t/q}(m,E) c∈LWEst/q(m,E),其中 m = 1 − m 0 ⋅ m 1 = m 0 ∧ ˉ m 1 m=1-m_0 \cdot m_1=m_0 \bar\wedge m_1 m=1−m0⋅m1=m0∧ˉm1。
一种新的同态NAND门
主要思想是将输入密文变为有一点点不同的形式:
c
i
∈
L
W
E
s
4
/
q
(
m
i
,
q
/
16
)
c_i \in \mathsf{LWE}_{\mathbf{s}}^{4/q}(m_i,q/16)
ci∈LWEs4/q(mi,q/16),这里明文模数
t
=
4
t=4
t=4,噪声bound为
E
=
q
/
16
E=q/16
E=q/16。(标准的LWE密文
t
=
2
t=2
t=2,
E
=
q
/
4
E=q/4
E=q/4)
H
o
m
N
A
N
D
:
L
W
E
s
4
/
q
(
m
0
,
q
/
16
)
×
L
W
E
s
4
/
q
(
m
1
,
q
/
16
)
→
L
W
E
s
2
/
q
(
m
0
∧
ˉ
m
1
,
q
/
4
)
\mathsf{HomNAND:LWE}_{\mathbf{s}}^{4/q}(m_0,q/16) \times \mathsf{LWE}_{\mathbf{s}}^{4/q}(m_1,q/16) \to \mathsf{LWE}_{\mathbf{s}}^{2/q}(m_0 \bar \wedge m_1 ,q/4)
HomNAND:LWEs4/q(m0,q/16)×LWEs4/q(m1,q/16)→LWEs2/q(m0∧ˉm1,q/4)
可以通过如下方式构造:
(
a
,
b
)
=
H
o
m
N
A
N
D
(
(
a
0
,
b
0
)
,
(
a
1
,
b
1
)
)
=
(
−
a
0
−
a
1
,
5
q
8
−
b
0
−
b
1
)
(\mathbf{a}, b)=\mathsf{HomNAND}\left(\left(\mathbf{a}_{0}, b_{0}\right),\left(\mathbf{a}_{1}, b_{1}\right)\right)=\left(-\mathbf{a}_{0}-\mathbf{a}_{1}, \frac{5 q}{8}-b_{0}-b_{1}\right)
(a,b)=HomNAND((a0,b0),(a1,b1))=(−a0−a1,85q−b0−b1)
要证明:
(
a
,
b
)
∈
L
W
E
s
2
/
q
(
1
−
m
0
m
1
,
q
/
4
)
(\mathbf{a},b)\in \mathsf{LWE}_{\mathbf{s}}^{2/q}(1-m_0m_1,q/4)
(a,b)∈LWEs2/q(1−m0m1,q/4)。即证明
D
e
c
s
2
/
q
(
a
,
b
)
≈
1
−
m
0
m
1
\mathsf{Dec}_{\mathbf{s}}^{2/q}(\mathbf{a},b) \approx 1-m_0m_1
Decs2/q(a,b)≈1−m0m1,且error bound为
q
/
4
q/4
q/4。
考虑:
b
−
a
⋅
s
−
(
1
−
m
0
m
1
)
q
2
=
5
q
8
−
b
0
−
b
1
+
a
0
⋅
s
+
a
1
⋅
s
−
q
2
+
q
2
⋅
m
0
m
1
=
q
8
−
q
4
m
0
−
e
0
−
q
4
m
1
−
e
1
+
q
2
m
0
m
1
=
q
4
(
1
2
−
m
0
2
+
2
m
0
m
1
−
m
1
2
)
−
(
e
0
+
e
1
)
=
q
4
(
1
2
−
(
m
0
−
m
1
)
2
)
−
(
e
0
+
e
1
)
=
±
q
8
−
(
e
0
+
e
1
)
\begin{aligned} b-\mathbf{a \cdot s} - (1-m_0m_1) \frac{q}{2} &= \frac{5q}{8}-b_0 - b_1 + \mathbf{a}_0 \cdot \mathbf{s} +\mathbf{a}_1 \cdot \mathbf{s} -\frac{q}{2}+\frac{q}{2}\cdot m_0m_1 \\ &=\frac{q}{8}-\frac{q}{4}m_0-e_0-\frac{q}{4}m_1-e_1 + \frac{q}{2}m_0m_1\\ &= \frac{q}{4}(\frac{1}{2}-m_0^2 +2m_0m_1 -m_1^2)-(e_0+e_1)\\ &= \frac{q}{4}(\frac{1}{2}-(m_0-m_1)^2)-(e_0+e_1)\\ & = \pm \frac{q}{8}-(e_0+e_1) \end{aligned}
b−a⋅s−(1−m0m1)2q=85q−b0−b1+a0⋅s+a1⋅s−2q+2q⋅m0m1=8q−4qm0−e0−4qm1−e1+2qm0m1=4q(21−m02+2m0m1−m12)−(e0+e1)=4q(21−(m0−m1)2)−(e0+e1)=±8q−(e0+e1)
所以
b
−
a
⋅
s
=
q
2
⋅
(
1
−
m
0
m
1
)
+
e
,
e
=
±
q
8
−
(
e
0
+
e
1
)
b-\mathbf{a}\cdot \mathbf{s} = \frac{q}{2}\cdot(1-m_0m_1) + e,e= \pm\frac{q}{8}-(e_0+e_1)
b−a⋅s=2q⋅(1−m0m1)+e,e=±8q−(e0+e1)
∣
e
∣
=
∣
±
q
8
−
(
e
0
+
e
1
)
∣
<
q
8
+
q
16
+
q
16
=
q
4
|e|=|\pm\frac{q}{8}-(e_0+e_1)|<\frac{q}{8}+\frac{q}{16}+\frac{q}{16}=\frac{q}{4}
∣e∣=∣±8q−(e0+e1)∣<8q+16q+16q=4q
因此,
(
a
,
b
)
∈
L
W
E
s
2
/
q
(
1
−
m
0
m
1
,
q
/
4
)
(\mathbf{a},b)\in \mathsf{LWE}_{\mathbf{s}}^{2/q}(1-m_0m_1,q/4)
(a,b)∈LWEs2/q(1−m0m1,q/4)。
通过同态累加器进行噪声刷新
思想(通过ACC进行Refresh)
对于执行完
c
t
x
t
=
H
o
m
N
A
N
D
(
⋅
)
∈
L
W
E
s
2
/
q
(
m
,
q
/
4
)
\mathsf{ctxt} = \mathsf{HomNAND}(\cdot) \in \mathsf{LWE}_{\mathbf{s}}^{2/q}(m,q/4)
ctxt=HomNAND(⋅)∈LWEs2/q(m,q/4)的密文来说,要将其重新返回到
L
W
E
s
4
/
q
(
m
,
q
/
16
)
\mathsf{LWE}_{\mathbf{s}}^{4/q}(m,q/16)
LWEs4/q(m,q/16)中,以便作为下一个NAND门的输入。因此要执行一个Refresh操作。
R
e
f
r
e
s
h
:
L
W
E
s
2
/
q
(
m
,
q
/
4
)
→
L
W
E
s
4
/
q
(
m
,
q
/
16
)
\mathsf{Refresh}: \mathsf{LWE}_{\mathbf{s}}^{2/q}(m,q/4) \rightarrow \mathsf{LWE}_{\mathbf{s}}^{4/q}(m,q/16)
Refresh:LWEs2/q(m,q/4)→LWEs4/q(m,q/16)
在之前的FHE中,Refresh是通过Gentry提出的Bootstrapping来做到的,对于一个LWE密文
(
a
,
b
)
∈
L
W
E
s
2
/
q
(
m
)
(\mathbf{a},b)\in \mathsf{LWE}_{\mathbf{s}}^{2/q}(m)
(a,b)∈LWEs2/q(m)。我们的目的是得到一个新的密文
E
(
m
)
E(m)
E(m),其中
E
(
⋅
)
E(\cdot)
E(⋅)是一种满足同态性质的加密方案,其实在实践中就是
L
W
E
\mathsf{LWE}
LWE加密本身,但这里为了便于理解,写为
E
E
E。为了从一个
(
a
,
b
)
(\mathbf{a},b)
(a,b)中得到
E
(
m
)
E(m)
E(m),需要在
(
a
,
b
)
(\mathbf{a},b)
(a,b)上同态地执行解密操作,具体来说,我们使用
E
E
E加密
s
\mathbf{s}
s得到
E
(
s
)
E(\mathbf{s})
E(s),然后计算
⌊
2
/
q
(
b
−
a
⋅
E
(
s
)
)
⌉
m
o
d
2
≈
E
(
m
)
\lfloor 2/q (b-\mathbf{a} \cdot E(\mathbf{s}))\rceil \bmod 2 \approx E(m)
⌊2/q(b−a⋅E(s))⌉mod2≈E(m)
那如果
E
E
E就是一个LWE加密的话,就得到了
E
(
m
)
∈
L
W
E
(
m
)
E(m) \in \mathsf{LWE}(m)
E(m)∈LWE(m),且这个密文的噪声经过了刷新。
这里涉及到两个问题
- 首先,要在密文上做向量的内积 a ⋅ E ( s ) → E ( a ⋅ s ) \mathbf{a}\cdot E(\mathbf{s}) \to E(\mathbf{a\cdot s}) a⋅E(s)→E(a⋅s),这点不难,只要对 s \mathbf{s} s向量每个元素进行分别加密: E ( s ) = ( E ( s 1 ) , . . . , E ( s n ) ) E(\mathbf{s})=(E(s_1),...,E(s_n)) E(s)=(E(s1),...,E(sn))。那么就可以得到 b − a ⋅ E ( s ) = E ( b − a ⋅ s ) = E ( q 2 ⋅ m ) b-\mathbf{a}\cdot E(\mathbf{s})=E(b-\mathbf{a\cdot s})=E(\frac{q}{2}\cdot m) b−a⋅E(s)=E(b−a⋅s)=E(2q⋅m)。
- 下一个问题是,如何在密文上做rounding操作。这里采用了一个密文上的提取最高位的操作来得到一个 L W E ( m ) \mathsf{LWE}(m) LWE(m),考虑 m = 0 , E ( 0 ) , m = 1 , E ( q / 2 ) m=0,E(0),m=1,E(q/2) m=0,E(0),m=1,E(q/2),采用最高位提取 c t x t = m s b E x t r a c t ( E ( q 2 m ) ) \mathsf{ctxt=msbExtract}(E(\frac{q}{2}m)) ctxt=msbExtract(E(2qm)),则若 m = 0 , c t x t ∈ L W E ( 0 ) m=0,\mathsf{ctxt}\in \mathsf{LWE}(0) m=0,ctxt∈LWE(0),若 m = 1 , c t x t ∈ L W E ( 1 ) m=1,\mathsf{ctxt}\in \mathsf{LWE}(1) m=1,ctxt∈LWE(1)。
定义(同态累加器)
**定义(同态累加器)**同态累加器由一个四元组构成 ( E , I n i t , I n c r , m s b E x t r a c t ) (E,\mathsf{Init,Incr,msbExtract}) (E,Init,Incr,msbExtract),四个算法都需要模数 t , q t,q t,q, E E E以及 m s b E x t r a c t \mathsf{msbExtract} msbExtract需要一些与 s \mathbf{s} s相关的密钥材料。为了书写简单,这里记 A C C ← v ⇔ A C C ← I n i t ( v ) \mathsf{ACC}\gets v \Leftrightarrow \mathsf{ACC}\gets \mathsf{Init}(v) ACC←v⇔ACC←Init(v), A C C ← + E ( v ) ⇔ A C C ← I n c r ( A C C , E ( v ) ) \mathsf{ACC} \stackrel{+}\gets E(v) \Leftrightarrow \mathsf{ACC} \gets \mathsf{Incr}(\mathsf{ACC},E(v)) ACC←+E(v)⇔ACC←Incr(ACC,E(v))。
对于一系列的数
v
0
,
v
1
,
.
.
.
,
v
ℓ
∈
Z
q
v_0,v_1,...,v_{\ell}\in \mathbb{Z}_q
v0,v1,...,vℓ∈Zq,在进行如下操作后:
A
C
C
←
v
0
,
A
C
C
←
+
E
(
v
i
)
,
i
=
1
,
.
.
.
,
l
\mathsf{ACC}\gets v_0, \mathsf{ACC} \stackrel{+}\gets E(v_i), i= 1,...,l
ACC←v0,ACC←+E(vi),i=1,...,l
称这样的
A
C
C
\mathsf{ACC}
ACC是一个
v
v
v的
ℓ
−
e
n
c
r
y
p
t
i
o
n
\ell-encryption
ℓ−encryption,其中
v
=
∑
i
=
0
ℓ
v
i
m
o
d
q
v=\sum_{i=0}^{\ell}v_i \bmod q
v=∑i=0ℓvimodq。
我们称一个同态累加器是 E − c o r r e c t \mathcal{E}-correct E−correct的,当且仅当对于任意 v v v的一个 ℓ − e n c r y p t i o n \ell-encryption ℓ−encryption, c ← m s b E x t r a c t ( A C C ) \mathbf{c}\gets \mathsf{msbExtract(ACC)} c←msbExtract(ACC)有很大概率得到 c ∈ L W E s t / q ( v , E ( ℓ ) ) \mathbf{c}\in\mathsf{LWE}_{\mathbf{s}}^{t/q}(v,\mathcal{E}(\ell)) c∈LWEst/q(v,E(ℓ))。
算法(Refresh)
在这里Refresh算法中使用到了累加器的参数为 t = 4 t=4 t=4, E ( ℓ ) ≤ q / 16 \mathcal{E}(\ell)\le q/16 E(ℓ)≤q/16。用到了一个分解系数 B r B_r Br,这里的 r r r下标指Refresh。刷新过程的输入为一个密文 ( a , b ) ∈ L W E s 2 / q ( m , q / 4 ) (\mathbf{a},b)\in \mathsf{LWE}_{\mathbf{s}}^{2/q}(m,q/4) (a,b)∈LWEs2/q(m,q/4),以及一个密钥材料 K i , j = E ( s i B r j m o d q ) K_{i,j}=E(s_i B_r^j \bmod q) Ki,j=E(siBrjmodq),在实际使用中,我们采用 K i , a i , j , j = a i , j E ( s i B r j m o d q ) = E ( a i , j s i B r j m o d q ) K_{i,a_{i,j},j}=a_{i,j}E(s_iB_r^j \bmod q)=E(a_{i,j}s_iB_r^j \bmod q) Ki,ai,j,j=ai,jE(siBrjmodq)=E(ai,jsiBrjmodq)。因为采用了标量乘法,所以要多 a i a_i ai进行分解 − a i = ∑ j a i , j B r j -a_i = \sum_j a_{i,j}B_r^j −ai=∑jai,jBrj,来降低 K i , a i , j , j K_{i,a_{i,j},j} Ki,ai,j,j的噪音。其中 a i , j ∈ { 0 , . . . , B r − 1 } a_{i,j}\in\{0,...,B_r-1\} ai,j∈{0,...,Br−1}, j = 0 , . . . , d r − 1 j=0,...,d_r-1 j=0,...,dr−1, d r = ⌈ log B r q ⌉ d_r=\lceil \log_{B_r}q \rceil dr=⌈logBrq⌉, i = 1 , . . . , n i=1,...,n i=1,...,n。
Algorithm R e f r e s h K ( a , b ) \mathsf{Refresh}_{\mathcal{K}}(\mathbf{a},b) RefreshK(a,b), for K = { K i , j } i ≤ n , j ≤ d r \mathcal{K}=\{K_{i,j}\}_{i\le n,j \le d_r} K={Ki,j}i≤n,j≤dr
A C C ← b + ( q / 4 ) \mathsf{ACC}\gets b+(q/4) ACC←b+(q/4)
for i = 1 , . . . , n i=1,...,n i=1,...,n do
计算 − a i = ∑ j B r j ⋅ a i , j ( m o d q ) -a_i=\sum_jB_r^j \cdot a_{i,j} \pmod q −ai=∑jBrj⋅ai,j(modq), K i , a i , j , j = a i , j E ( s i B r j ) = E ( a i , j s i B r j ) K_{i,a_{i,j},j}=a_{i,j}E(s_i B_r^j)=E(a_{i,j}s_i B_r^j) Ki,ai,j,j=ai,jE(siBrj)=E(ai,jsiBrj)
for j = 0 , . . . , d r − 1 j=0,...,d_r-1 j=0,...,dr−1 do A C C ← + K i , a i , j , j \mathsf{ACC} \stackrel{+}\gets K_{i,a_{i,j},j} ACC←+Ki,ai,j,j
end for
输出 m s b E x t r a c t ( A C C ) \mathsf{msbExtract(ACC)} msbExtract(ACC)
Theorem: 如果 ( E , I n i t , I n c r , m s b E x t r a c t ) (E,\mathsf{Init},\mathsf{Incr},\mathsf{msbExtract}) (E,Init,Incr,msbExtract)是一个正确的同态累加器,那么 R e f r e s h \mathsf{Refresh} Refresh算法,在输入任意密文 ( a , b ) ∈ L W E s 2 / q ( m , q / 4 ) (\mathbf{a},b)\in \mathsf{LWE}_{\mathbf{s}}^{2/q}(m,q/4) (a,b)∈LWEs2/q(m,q/4),以及有效的刷新密钥 K = { K i , j = E ( s i B r j ) } i , j \mathcal{K}=\{K_{i,j}=E(s_iB_r^j)\}_{i,j} K={Ki,j=E(siBrj)}i,j的情况下,会输出一个密文 R e f r e s h K ( c ) ∈ L W E s t / q ( m , E ( n d ) ) \mathsf{Refresh}_{\mathcal{K}}(\mathbf{c})\in \mathsf{LWE}_{\mathbf{s}}^{t/q}(m,\mathcal{E}(nd)) RefreshK(c)∈LWEst/q(m,E(nd))。
Proof. 刷新操作首先初始化累加器为 b + q / 4 b+q/4 b+q/4,然后进行了 n d nd nd次的加法 K i , a i , j , j = E ( a i , j s i B r j ) K_{i,a_{i,j},j}=E(a_{i,j}s_i B_r^j) Ki,ai,j,j=E(ai,jsiBrj)。所以最后的结果是一个噪声为 E ( n d ) \mathcal{E}(nd) E(nd)的LWE密文,累加器中的内容值 v v v为:
v
−
q
4
=
b
+
∑
i
,
j
a
i
,
j
s
i
B
r
j
=
b
+
∑
i
s
i
∑
j
B
r
j
a
i
,
j
=
b
+
(
−
∑
i
a
i
s
i
)
=
q
2
m
+
e
v-\frac{q}{4}=b+\sum_{i,j}a_{i,j}s_iB_r^j=b+\sum_i s_i \sum_j B_r^ja_{i,j} = b+(-\sum_i a_is_i)=\frac{q}{2}m+e
v−4q=b+i,j∑ai,jsiBrj=b+i∑sij∑Brjai,j=b+(−i∑aisi)=2qm+e
v
=
q
2
m
+
e
+
q
4
v=\frac{q}{2}m+e+\frac{q}{4}
v=2qm+e+4q,这里的
e
e
e是输入密文
(
a
,
b
)
(\mathbf{a},b)
(a,b)的噪声。根据假设
∣
e
∣
<
q
/
4
\left|e\right| < q/4
∣e∣<q/4,所以有
0
<
e
+
q
4
<
q
2
0<e+\frac{q}{4}<\frac{q}{2}
0<e+4q<2q。所以当
m
=
0
m=0
m=0时,
0
<
v
<
q
/
2
0<v<q/2
0<v<q/2,
v
v
v的最高位为0,当
m
=
1
m=1
m=1时,
q
/
2
<
v
<
q
q/2<v<q
q/2<v<q,
v
v
v的最高位为1。因为在实际应用中
q
q
q是
p
o
w
e
r
−
o
f
−
t
w
o
power-of-two
power−of−two,所以
v
v
v的最高位为
m
m
m,那么
m
s
b
E
x
t
r
a
c
t
(
A
C
C
)
\mathsf{msbExtract(ACC)}
msbExtract(ACC)能得到
L
W
E
s
q
/
t
(
m
)
\mathsf{LWE}_{\mathbf{s}}^{q/t}(m)
LWEsq/t(m)。
由RGSW构造同态累加器
在构造同态累加器时,我们使用的参数为 t = 4 t=4 t=4, q = 2 k q=2^k q=2k, E E E是一个 Z q \mathbb{Z}_q Zq内的加密方案。这里的构造采用了Alperin-Sheriff5的思想。但是与他们不同的是,这篇文章直接将 Z q \mathbb{Z}_q Zq当做 R \mathcal{R} R的原根构成的乘法子环。
这个方案里面取一个模数 Q Q Q,多项式环的阶 N = 2 K N=2^K N=2K,满足 q ∣ 2 N q|2N q∣2N,为了方便理解,这篇笔记里采用 q = 2 N q=2N q=2N,一个分解系数 B g B_g Bg(这里 g g g指gadget)。这里假设 Q = B g d g Q=B_g^{d_g} Q=Bgdg,其中 B g B_g Bg是 p o w e r − o f − t h r e e power-of-three power−of−three。令 R = Z [ X ] / ( X N + 1 ) \mathcal{R}=\mathbb{Z}[X]/(X^N+1) R=Z[X]/(XN+1), R Q = ( R / Q R ) \mathcal{R}_Q=(\mathcal{R}/Q\mathcal{R}) RQ=(R/QR),以及一个额外的参数 u u u,这里 u u u是取一个 Z q \mathbb{Z}_q Zq内接近 Q / 2 t Q/2t Q/2t的可逆的数,因为 Q Q Q是3的幂次,所以 ⌊ Q / 2 t ⌋ \lfloor Q/2t \rfloor ⌊Q/2t⌋, ⌈ Q / 2 t ⌉ \lceil Q/2t \rceil ⌈Q/2t⌉中必有一个可逆,所以 ∣ u − Q / 2 t ∣ < 1 |u-Q/2t|<1 ∣u−Q/2t∣<1。
消息 m m m被加密为原根 X m ∈ R X^m\in \mathcal{R} Xm∈R的形式,原根构成一个循环群 G = ⟨ X ⟩ = { 1 , X , . . . , X N − 1 , − 1 , − X , . . . , − X N − 1 } \mathcal{G}=\langle X \rangle = \{1,X,...,X^{N-1},-1,-X,...,-X^{N-1}\} G=⟨X⟩={1,X,...,XN−1,−1,−X,...,−XN−1}。当 q = 2 N q=2N q=2N时, Z q ≃ ⟨ X ⟩ \mathbb{Z}_q\simeq \langle X \rangle Zq≃⟨X⟩。
基于RGSW的累加器的构造
− E z ( m ) -E_z(m) −Ez(m):输入为消息 m m m,密钥 z ∈ R z\in \mathcal{R} z∈R,
选取
a
∈
R
Q
2
d
g
\mathbf{a}\in \mathcal{R}_{Q}^{2d_g}
a∈RQ2dg是一个随机分布,
e
∈
R
2
d
g
≃
Z
2
d
g
N
\mathbf{e} \in \mathcal{R}^{2d_g} \simeq \mathbb{Z}^{2d_gN}
e∈R2dg≃Z2dgN是一个满足参数为
ς
\varsigma
ς的次高斯分布。输出
E
z
(
m
)
=
[
a
,
a
⋅
z
+
e
]
+
u
X
m
G
∈
R
Q
2
d
g
×
2
E_z(m)=[\mathbf{a},\mathbf{a}\cdot z + \mathbf{e}] + uX^m \mathbf{G} \in \mathcal{R}_Q^{2d_g \times 2}
Ez(m)=[a,a⋅z+e]+uXmG∈RQ2dg×2
其中
G
=
(
I
,
B
g
I
,
.
.
.
,
B
g
d
g
−
1
I
)
∈
R
2
d
g
×
2
\mathbf{G} = (\mathbf{I},B_g\mathbf{I},...,B_g^{d_g-1}\mathbf{I})\in \mathcal{R}^{2d_g \times 2}
G=(I,BgI,...,Bgdg−1I)∈R2dg×2。
− I n i t ( A C C ← v ) - \mathsf{Init}(\mathsf{ACC}\gets v) −Init(ACC←v):输入为 v ∈ Z q v\in \mathbb{Z}_q v∈Zq,
直接设定 A C C : = u X v ⋅ G ∈ R Q 2 d g × 2 \mathsf{ACC}:=u X^v\cdot \mathbf{G} \in \mathcal{R}_Q^{2d_g \times 2} ACC:=uXv⋅G∈RQ2dg×2。
−
I
n
c
r
(
A
C
C
←
+
C
)
-\mathsf{Incr}(\mathsf{ACC} \stackrel{+}\gets \mathbf{C})
−Incr(ACC←+C),输入为当前的
A
C
C
∈
R
Q
2
d
g
×
2
\mathsf{ACC}\in\mathcal{R}_{Q}^{2d_g\times2}
ACC∈RQ2dg×2,以及一个密文
C
∈
R
Q
2
d
g
×
2
\mathbf{C}\in \mathcal{R}_Q^{2d_g\times 2}
C∈RQ2dg×2,首先计算
u
−
1
A
C
C
u^{-1}\mathsf{ACC}
u−1ACC的分解为
u
−
1
A
C
C
=
∑
i
=
1
d
g
B
g
i
−
1
D
i
u^{-1}\mathsf{ACC}=\sum_{i=1}^{d_g}B_g^{i-1}\mathbf{D}_i
u−1ACC=∑i=1dgBgi−1Di(其中每个
D
i
∈
R
2
d
g
×
2
\mathbf{D}_i\in \mathcal{R}^{2d_g\times 2}
Di∈R2dg×2,每项的系数在
{
1
−
B
g
2
,
.
.
.
,
B
g
−
1
2
}
\{\frac{1-B_g}{2},...,\frac{B_g-1}{2}\}
{21−Bg,...,2Bg−1}之内)。并更新累加器的值:
A
C
C
:
=
[
D
1
,
.
.
.
,
D
d
g
]
⋅
C
\mathsf{ACC}:= [\mathbf{D}_1,...,\mathbf{D}_{d_g}]\cdot \mathbf{C}
ACC:=[D1,...,Ddg]⋅C
−
m
s
b
E
x
t
r
a
c
t
-\mathsf{msbExtract}
−msbExtract:输入为一个
K
e
y
S
w
i
t
c
h
\mathsf{KeySwitch}
KeySwitch密钥
K
\mathfrak{K}
K,一个测试向量
t
=
−
∑
i
=
0
N
−
1
X
i
→
\mathbf{t}=-\sum_{i=0}^{N-1} \overrightarrow{X^{i}}
t=−∑i=0N−1Xi,其实
t
=
(
−
1
,
−
1
,
.
.
.
,
−
1
)
∈
Z
N
\mathbf{t}=(-1,-1,...,-1) \in \mathbb{Z}^N
t=(−1,−1,...,−1)∈ZN。最后提取的正确性在于:
t
⋅
X
v
→
\mathbf{t}\cdot \overrightarrow{X^v}
t⋅Xv的值:如果
0
≤
v
<
N
0\le v < N
0≤v<N,那么
t
⋅
X
v
→
=
−
1
\mathbf{t}\cdot \overrightarrow{X^v}=-1
t⋅Xv=−1,如果
N
≤
v
<
2
N
N\le v < 2N
N≤v<2N,那么
t
⋅
X
v
→
=
1
\mathbf{t}\cdot \overrightarrow{X^v}=1
t⋅Xv=1。具体算法如下:
两个符号: ⋅ → : a = a 0 + a 1 x + . . . + a N − 1 x N − 1 ∈ R \overrightarrow{\cdot}:a=a_0+a_1x+...+a_{N-1}x^{N-1}\in\mathcal{R} ⋅:a=a0+a1x+...+aN−1xN−1∈R, a → = ( a 0 , . . . , a N − 1 ) ∈ Z N \overrightarrow{a}=(a_0,...,a_{N-1})\in \mathbb{Z}^N a=(a0,...,aN−1)∈ZN。
⋅ ⇒ : a = a 0 + a 1 x + . . . + a N − 1 x N − 1 ∈ R \stackrel{\Rightarrow}{\cdot}: a=a_0+a_1x+...+a_{N-1}x^{N-1}\in \mathcal{R} ⋅⇒:a=a0+a1x+...+aN−1xN−1∈R, a ⇒ ∈ Z N × N \stackrel{\Rightarrow}{a}\in \mathbb{Z}^{N \times N} a⇒∈ZN×N是一个负循环矩阵, a ⇒ \stackrel{\Rightarrow}{a} a⇒的第一列为 a → \overrightarrow{a} a。
a ⇒ = [ a 0 − a N − 1 ⋯ − a 2 − a 1 a 1 a 0 − a N − 1 − a 2 ⋮ a 1 a 0 ⋱ ⋮ a N − 2 ⋱ ⋱ − a N − 1 a N − 1 a N − 2 ⋯ a 1 a 0 ] \stackrel{\Rightarrow}{a}=\left[\begin{array}{ccccc} a_{0} & -a_{N-1} & \cdots & -a_{2} & -a_{1} \\ a_{1} & a_{0} & -a_{N-1} & & -a_{2} \\ \vdots & a_{1} & a_{0} & \ddots & \vdots \\ a_{N-2} & & \ddots & \ddots & -a_{N-1} \\ a_{N-1} & a_{N-2} & \cdots & a_{1} & a_{0} \end{array}\right] a⇒= a0a1⋮aN−2aN−1−aN−1a0a1aN−2⋯−aN−1a0⋱⋯−a2⋱⋱a1−a1−a2⋮−aN−1a0
原文这里switching key有点错误,纠正一下
算法 m s b E x t r a c t K ( A C C ) \mathsf{msbExtract}_{\mathfrak{K}}(\mathsf{ACC}) msbExtractK(ACC), for K = { k i , j , w } i ≤ N , j ≤ d k s , w ≤ B k s \mathfrak{K}=\{\mathbf{k}_{i,j,w}\}_{i\le N,j\le d_{ks},w\le B_{ks}} K={ki,j,w}i≤N,j≤dks,w≤Bks。
需要一个switching key
K
=
{
k
i
,
j
,
w
}
i
,
j
,
w
\mathfrak{K}=\{\mathbf{k}_{i,j,w}\}_{i,j,w}
K={ki,j,w}i,j,w是将密钥
z
\mathbf{z}
z替换为密钥
s
\mathbf{s}
s的:
k
i
,
j
,
w
←
L
W
E
s
q
/
q
(
w
⋅
z
i
⋅
B
k
s
j
)
\mathbf{k}_{i,j,w}\gets \mathsf{LWE}_{\mathbf{s}}^{q/q}(w\cdot z_i \cdot B_{ks}^j)
ki,j,w←LWEsq/q(w⋅zi⋅Bksj)。
A
C
C
\mathsf{ACC}
ACC是
v
v
v的一个
ℓ
\ell
ℓ-encryption。
1:
[
a
t
,
b
t
]
←
(
[
0
→
t
,
t
t
,
0
→
t
,
…
,
0
→
t
]
⋅
A
C
C
⇒
)
∈
Z
Q
2
N
/
/
A
C
C
⇒
∈
Z
2
N
d
g
×
2
N
\left[\mathbf{a}^{t}, \mathbf{b}^{t}\right] \leftarrow([\overrightarrow{0}^{t}, \mathbf{t}^{t}, \overrightarrow{0}^{t}, \ldots, \overrightarrow{0}^{t}] \cdot \stackrel{\Rightarrow}{\mathsf{ACC}} ) \in \mathbb{Z}_{Q}^{2 N} \quad / / \stackrel{\Rightarrow}{\mathsf{ACC}} \in \mathbb{Z}^{2 N d_{\mathrm{g}} \times 2 N}
[at,bt]←([0t,tt,0t,…,0t]⋅ACC⇒)∈ZQ2N//ACC⇒∈Z2Ndg×2N
2:
c
←
(
a
,
b
0
+
u
)
∈
LWE
z
→
t
/
Q
(
msb
(
v
)
)
\mathbf{c} \leftarrow\left(\mathbf{a}, b_{0}+u\right)\quad\quad \in \operatorname{LWE}_{\overrightarrow{z}}^{t / Q}(\operatorname{msb}(v))
c←(a,b0+u)∈LWEzt/Q(msb(v))
3:
c
′
←
K
e
y
S
w
i
t
c
h
(
c
,
K
)
∈
L
W
E
s
t
/
Q
(
msb
(
v
)
)
\mathbf{c}^{\prime} \gets \mathsf{KeySwitch} (\mathbf{c}, \mathfrak{K}) \in \mathsf{LWE}_{\mathbf{s}}^{t / Q}(\operatorname{msb}(v))
c′←KeySwitch(c,K)∈LWEst/Q(msb(v))
4:
c
′
′
←
M
o
d
S
w
i
t
c
h
(
c
′
)
∈
L
W
E
s
t
/
q
(
msb
(
v
)
)
\mathbf{c}^{\prime \prime} \gets \mathsf{ModSwitch} \left(\mathbf{c}^{\prime}\right) \in \mathsf{LWE}_{\mathbf{s}}^{t / q}(\operatorname{msb}(v))
c′′←ModSwitch(c′)∈LWEst/q(msb(v))
5: Return
c
′
\mathbf{c}^{\prime}
c′.
正确性
噪声分析的部分就略过了,主要看一下流程的正确性。
首先理解一下
E
z
(
m
)
E_z(m)
Ez(m)的结构:
E
z
(
m
)
=
[
a
,
a
⋅
z
+
e
]
+
u
X
m
G
∈
R
Q
2
d
g
×
2
E_z(m)=[\mathbf{a},\mathbf{a}\cdot z + \mathbf{e}] + uX^m \mathbf{G} \in \mathcal{R}_Q^{2d_g \times 2}
Ez(m)=[a,a⋅z+e]+uXmG∈RQ2dg×2,
G
=
(
I
,
B
g
I
,
.
.
.
,
B
g
d
g
−
1
I
)
∈
R
2
d
g
×
2
\mathbf{G} = (\mathbf{I},B_g\mathbf{I},...,B_g^{d_g-1}\mathbf{I})\in \mathcal{R}^{2d_g \times 2}
G=(I,BgI,...,Bgdg−1I)∈R2dg×2
I
=
[
1
0
0
1
]
,
G
=
[
1
0
0
1
B
g
0
0
B
g
⋮
⋮
B
g
d
g
−
1
0
0
B
g
d
g
−
1
]
,
u
X
m
G
=
[
u
X
m
0
0
u
X
m
B
g
u
X
m
0
0
B
g
u
X
m
⋮
⋮
B
g
d
g
−
1
u
X
m
0
0
B
g
d
g
−
1
u
X
m
]
\mathbf{I} = \begin{bmatrix} 1&0 \\ 0&1 \end{bmatrix},\mathbf{G}=\begin{bmatrix} 1&0 \\ 0&1 \\ B_g&0 \\ 0& B_g\\ \vdots &\vdots\\ B_g^{d_g-1}& 0\\ 0&B_g^{d_g-1} \end{bmatrix},uX^m\mathbf{G}=\begin{bmatrix} uX^m&0 \\ 0&uX^m \\ B_guX^m&0 \\ 0& B_guX^m\\ \vdots &\vdots\\ B_g^{d_g-1}uX^m& 0\\ 0&B_g^{d_g-1}uX^m \end{bmatrix}
I=[1001],G=
10Bg0⋮Bgdg−10010Bg⋮0Bgdg−1
,uXmG=
uXm0BguXm0⋮Bgdg−1uXm00uXm0BguXm⋮0Bgdg−1uXm
[ a , a ⋅ z + e ] = [ a 0 a 0 z + e 0 a 1 a 1 z + e 1 a 2 a 2 z + e 2 a 3 a 3 z + e 3 ⋮ ⋮ a 2 d g − 2 a 2 d g − 2 z + e 2 d g − 2 a 2 d g − 1 a 2 d g − 1 z + e 2 d g − 1 ] , E z ( m ) = [ a 0 + u X m a 0 z + e 0 a 1 a 1 z + e 1 + u X m a 2 + B g u X m a 2 z + e 2 a 3 a 3 z + e 3 + B g u X m ⋮ ⋮ a 2 d g − 2 + B g d g − 1 u X m a 2 d g − 2 z + e 2 d g − 2 a 2 d g − 1 a 2 d g − 1 z + e 2 d g − 1 + B g d g − 1 u X m ] [\mathbf{a},\mathbf{a}\cdot z+\mathbf{e}]=\begin{bmatrix} a_0&a_0z+e_0 \\ a_1&a_1z+e_1 \\ a_2&a_2z+e_2 \\ a_3&a_3z+e_3\\ \vdots &\vdots\\ a_{2d_g-2}&a_{2d_g-2}z+e_{2d_g-2}\\ a_{2d_g-1}&a_{2d_g-1}z+e_{2d_g-1} \end{bmatrix} ,E_z(m)=\begin{bmatrix} a_0+uX^m&a_0z+e_0 \\ a_1&a_1z+e_1+uX^m \\ a_2+B_guX^m&a_2z+e_2 \\ a_3&a_3z+e_3+B_guX^m\\ \vdots &\vdots\\ a_{2d_g-2}+B_g^{d_g-1}uX^m&a_{2d_g-2}z+e_{2d_g-2}\\ a_{2d_g-1}&a_{2d_g-1}z+e_{2d_g-1}+B_g^{d_g-1}uX^m \end{bmatrix} [a,a⋅z+e]= a0a1a2a3⋮a2dg−2a2dg−1a0z+e0a1z+e1a2z+e2a3z+e3⋮a2dg−2z+e2dg−2a2dg−1z+e2dg−1 ,Ez(m)= a0+uXma1a2+BguXma3⋮a2dg−2+Bgdg−1uXma2dg−1a0z+e0a1z+e1+uXma2z+e2a3z+e3+BguXm⋮a2dg−2z+e2dg−2a2dg−1z+e2dg−1+Bgdg−1uXm
可以看出, E z ( m ) E_z(m) Ez(m)中的第二行,其实是 ( a 1 , a 1 z + e 1 + u X m ) ≈ R L W E z t / Q ( 1 2 X m ) (a_1,a_1z+e_1+uX^m)\approx\mathsf{RLWE}_{z}^{t/Q}(\frac{1}{2}X^m) (a1,a1z+e1+uXm)≈RLWEzt/Q(21Xm),因为
u ≈ Q / 2 t u\approx Q/2t u≈Q/2t, R L W E z t / q ( m ) = ( a , a z + e + Q / t m ) ≈ ( a , a z + e + 2 u m ) \mathsf{RLWE}_{z}^{t/q}(m)=(a,az+e+Q/tm)\approx (a,az+e+2um) RLWEzt/q(m)=(a,az+e+Q/tm)≈(a,az+e+2um)。
ACC的正确性没有给出证明,而是直接作为一个结果。
根据Fact 9,可以直接得到最后 A C C = [ a , a z + e ] + u X v G \mathsf{ACC}=[\mathbf{a},\mathbf{a}z+\mathbf{e}]+uX^v\mathbf{G} ACC=[a,az+e]+uXvG。这里 v = q 2 m + e + q 4 v=\frac{q}{2}m+e+\frac{q}{4} v=2qm+e+4q。 m = m s b ( v ) m=\mathsf{msb}(v) m=msb(v),这个性质是在之前**算法(Refresh)**中证明过。
Extract正确性
在 m s b E x t r a c t \mathsf{msbExtract} msbExtract算法中,我们计算了 [ a t , b t ] ← ( [ 0 → t , t t , 0 → t , … , 0 → t ] ⋅ A C C ⇒ ) ∈ Z Q 2 N \left[\mathbf{a}^{t}, \mathbf{b}^{t}\right] \leftarrow([\overrightarrow{0}^{t}, \mathbf{t}^{t}, \overrightarrow{0}^{t}, \ldots, \overrightarrow{0}^{t}] \cdot \stackrel{\Rightarrow}{\mathsf{ACC}} ) \in \mathbb{Z}_{Q}^{2 N} [at,bt]←([0t,tt,0t,…,0t]⋅ACC⇒)∈ZQ2N,其实这里就是求了 t t \mathbf{t}^t tt和 A C C \mathsf{ACC} ACC中第二行的乘积,令 a , b ′ a,b' a,b′为ACC中第二行的值,满足 b ′ → = a ⇒ ⋅ z → + u ⋅ X v → + e → \overrightarrow{b'}=\stackrel{\Rightarrow}{a}\cdot \overrightarrow{z}+u\cdot \overrightarrow{X^v}+\overrightarrow{e} b′=a⇒⋅z+u⋅Xv+e。 b 0 b_0 b0为 b ′ b' b′的第一项,则 [ a t , b 0 ] ← t t ⋅ [ a ⇒ , b ′ → ] [\mathbf{a}^t,b_0] \gets \mathbf{t}^t\cdot\left[\stackrel{\Rightarrow}{a},\overrightarrow{b'}\right] [at,b0]←tt⋅[a⇒,b′]。
观察到 m = m s b ( v ) m=\mathsf{msb}(v) m=msb(v),当 m = 0 m=0 m=0, 0 ≤ v < N 0\le v <N 0≤v<N, t t ⋅ X v → = − 1 \mathbf{t}^t \cdot \overrightarrow{X^v}=-1 tt⋅Xv=−1, m = 1 , N ≤ v < 2 N m=1,N\le v < 2N m=1,N≤v<2N, t t ⋅ X v → = 1 \mathbf{t}^t \cdot \overrightarrow{X^v}=1 tt⋅Xv=1。因此 t t ⋅ X v → = − ( − 1 ) m s b ( v ) \mathbf{t}^t \cdot \overrightarrow{X^v}=-(-1)^{\mathsf{msb}(v)} tt⋅Xv=−(−1)msb(v)。观察到 1 − ( − 1 ) x = 2 x 1-(-1)^x=2x 1−(−1)x=2x,所以 u ( 1 + t t ⋅ X v → ) = 2 u m s b ( v ) u(1+\mathbf{t}^t \cdot \overrightarrow{X^v})=2u\mathsf{msb}(v) u(1+tt⋅Xv)=2umsb(v)。
所以
c
=
(
a
,
b
0
+
u
)
=
(
a
,
a
⋅
z
→
+
t
⋅
e
+
u
t
t
⋅
X
v
→
+
u
)
=
(
a
,
a
⋅
z
→
+
t
⋅
e
+
2
u
m
s
b
(
v
)
)
\mathbf{c}=(\mathbf{a},b_0+u) = (\mathbf{a},\mathbf{a}\cdot \overrightarrow{z} + \mathbf{t}\cdot \mathbf{e} +u\mathbf{t}^t \cdot \overrightarrow{X^v} + u)=(\mathbf{a},\mathbf{a}\cdot \overrightarrow{z} + \mathbf{t}\cdot \mathbf{e} +2u\mathsf{msb}(v))
c=(a,b0+u)=(a,a⋅z+t⋅e+utt⋅Xv+u)=(a,a⋅z+t⋅e+2umsb(v))
又因为
u
=
⌊
Q
/
2
t
⌉
u=\lfloor Q/2t \rceil
u=⌊Q/2t⌉:
c
=
(
a
,
a
⋅
z
→
+
t
⋅
e
+
⌊
Q
/
t
⌉
m
s
b
(
v
)
)
∈
L
W
E
z
→
t
/
Q
(
m
s
b
(
v
)
)
=
L
W
E
z
→
t
/
Q
(
m
)
\mathbf{c} = (\mathbf{a},\mathbf{a}\cdot \overrightarrow{z} + \mathbf{t}\cdot \mathbf{e} +\lfloor Q/t \rceil\mathsf{msb}(v))\in \mathsf{LWE}_{\overrightarrow{z}}^{t/Q}(\mathsf{msb}(v))=\mathsf{LWE}_{\overrightarrow{z}}^{t/Q}(m)
c=(a,a⋅z+t⋅e+⌊Q/t⌉msb(v))∈LWEzt/Q(msb(v))=LWEzt/Q(m)
噪声的刷新可以粗略的理解一下,因为是通过提取msb的方式来取得m,所以新的密文与之前的噪声大小就无关了,所以refresh就相当于进行了bootstrapping。
方案总览
总结
FHEW刷新密文的思想,主要是考虑 q 2 m + e + q 4 \frac{q}{2}m+e+\frac{q}{4} 2qm+e+4q这样一个式子,其中 q = 2 N q=2N q=2N是2的幂次, ∣ e ∣ < q 4 |e|<\frac{q}{4} ∣e∣<4q,因此 m s b ( v ) = m msb(v)=m msb(v)=m,将这个 v v v编码到多项式的次数上 X v ∈ R X^v\in \mathcal{R} Xv∈R,当 m = 0 m=0 m=0, 0 ≤ v < N 0\le v < N 0≤v<N, X v X^v Xv的系数是正的,当 m = 1 m=1 m=1, N ≤ v < 2 N N\le v < 2N N≤v<2N, X v X^v Xv的系数是负的。通过这样的一个性质,结合GSW的技术,可以在密文上提取出 v v v的最高位。相当于做了一次密文刷新。
小尾巴
本人正在入门密码学,欢迎各位同学或老师加我微信交流:shenghua-adije
Centrum Wiskunde and Informatica, Amsterdam, Netherlands; leo.ducas@cwi.nl ↩︎
University of California, San Diego, California, USA; daniele@cse.ucsd.edu ↩︎
也不知道这里的bootstrapping是指对bit-wise密文还是word-wise密文。之后看一看 ↩︎
所谓仿射变换,就是向量经过一次线性变换加一次平移变换,用公式可以表示为: q ⃗ = A p ⃗ + b ⃗ \vec{q}=A \vec{p}+\vec{b} q=Ap+b ↩︎
Alperin-Sheriff J., Peikert C. (2014) Faster Bootstrapping with Polynomial Error. In: Garay J.A., Gennaro R. (eds) Advances in Cryptology – CRYPTO 2014. CRYPTO 2014. Lecture Notes in Computer Science, vol 8616. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-662-44371-2_17 ↩︎ ↩︎ ↩︎ ↩︎