FHEW阅读笔记

16 篇文章 34 订阅
11 篇文章 1 订阅

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+...+XN1。后续文章会有将 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(N1)XN1,就可以在做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​​
0010
0111
1011
1102

也就是说,当 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) 4521(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) 4521(m1+m2)​​ ⌊ 5 4 − 1 2 ( m 1 + m 2 ) ⌉ \lfloor \frac{5}{4} - \frac{1}{2}(m_1 + m_2) \rceil 4521(m1+m2)⌉​​
00 5 4 \frac{5}{4} 451
01 3 4 \frac{3}{4} 431
10 3 4 \frac{3}{4} 431
11 1 4 \frac{1}{4} 410

通过这样的方式来构造的NAND门,比之前的方法(通过乘法构造)的噪音要低很多。因此,噪声刷新操作(bootstrapping)也更加简单。

Bootstrapping

本文的第二个关键技术时基于文章Faster Bootstrapping with Polynomial Error5,LWE密文的解密可以由一次模q的内积和一次取整操作得到。bootstrapping就是在密文上同态地执行模q的内积以及取整。文章5中使用了一个模q的加密算法,可以很快速的计算内积。具体的做法使用一个一比特的加密算法,将一个循环群中的元素 v ∈ C v\in C vC​,加密为一个向量 E ( x 1 ) , . . . , E ( x ∣ C ∣ ) E(x_1),...,E(x_{|C|}) E(x1),...,E(xC),其中 x i = 1 x_i=1 xi=1当且仅当 i = v i=v i=v​。​本文将5中的方法扩张到了多项式环上,那就支持FFT来加速运算的操作,效率得到了进一步的提高。而且还利用了多项式环的性质,将循环群中元素直接映射到多项式环上: i → X i i \to X^i iXi,其中 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} χ:RZ。这个函数将一个实数映射为一个整数,满足 χ ( 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 xZ,那么 χ ( 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,χ(as+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(bas)/qmodtZt
要求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(bas)/qmodt=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:ZQZq
[ 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 zZqN​​, s ∈ Z q n \mathbf{s} \in \mathbb{Z}_q^n sZqn​​。

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,...,dks1

对于 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,...,dks1​。记 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,jki,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} bas=az

因此 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,bb)

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/qb(bas)⌉=m+t/q(za+eaz)=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 ciLWEst/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) cLWEst/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=1m0m1=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) ciLWEs4/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))=(a0a1,85qb0b1)
要证明: ( 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(1m0m1,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)1m0m1,且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} bas(1m0m1)2q=85qb0b1+a0s+a1s2q+2qm0m1=8q4qm0e04qm1e1+2qm0m1=4q(21m02+2m0m1m12)(e0+e1)=4q(21(m0m1)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) bas=2q(1m0m1)+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(1m0m1,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(baE(s))⌉mod2E(m)
那如果 E E E就是一个LWE加密的话,就得到了 E ( m ) ∈ L W E ( m ) E(m) \in \mathsf{LWE}(m) E(m)LWE(m),且这个密文的噪声经过了刷新。

这里涉及到两个问题

  1. 首先,要在密文上做向量的内积 a ⋅ E ( s ) → E ( a ⋅ s ) \mathbf{a}\cdot E(\mathbf{s}) \to E(\mathbf{a\cdot s}) aE(s)E(as)​,这点不难,只要对 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) baE(s)=E(bas)=E(2qm)
  2. 下一个问题是,如何在密文上做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,ctxtLWE(0),若 m = 1 , c t x t ∈ L W E ( 1 ) m=1,\mathsf{ctxt}\in \mathsf{LWE}(1) m=1,ctxtLWE(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) ACCvACCInit(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)ACCIncr(ACC,E(v))​。​

对于一系列的数 v 0 , v 1 , . . . , v ℓ ∈ Z q v_0,v_1,...,v_{\ell}\in \mathbb{Z}_q v0,v1,...,vZq,在进行如下操作后:
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 ACCv0,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=0vimodq​​。

我们称一个同态累加器是 E − c o r r e c t \mathcal{E}-correct Ecorrect​的,当且仅当​​对于任意 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)} cmsbExtract(ACC)有很大概率得到 c ∈ L W E s t / q ( v , E ( ℓ ) ) \mathbf{c}\in\mathsf{LWE}_{\mathbf{s}}^{t/q}(v,\mathcal{E}(\ell)) cLWEst/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,...,Br1}​​, j = 0 , . . . , d r − 1 j=0,...,d_r-1 j=0,...,dr1​​, 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}in,jdr​​​​


A C C ← b + ( q / 4 ) \mathsf{ACC}\gets b+(q/4) ACCb+(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=jBrjai,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,...,dr1 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 v4q=b+i,jai,jsiBrj=b+isijBrjai,j=b+(iaisi)=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 poweroftwo,所以 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 powerofthree。令 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 uQ/2t<1

消息 m m m被加密为原根 X m ∈ R X^m\in \mathcal{R} XmR的形式,原根构成一个循环群 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,...,XN1,1,X,...,XN1}​。当 q = 2 N q=2N q=2N时, Z q ≃ ⟨ X ⟩ \mathbb{Z}_q\simeq \langle X \rangle ZqX

基于RGSW的累加器的构造

− E z ( m ) -E_z(m) Ez(m):输入为消息 m m m,密钥 z ∈ R z\in \mathcal{R} zR​,

​ 选取 a ∈ R Q 2 d g \mathbf{a}\in \mathcal{R}_{Q}^{2d_g} aRQ2dg是一个随机分布, e ∈ R 2 d g ≃ Z 2 d g N \mathbf{e} \in \mathcal{R}^{2d_g} \simeq \mathbb{Z}^{2d_gN} eR2dgZ2dgN是一个满足参数为 ς \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,az+e]+uXmGRQ2dg×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,...,Bgdg1I)R2dg×2

− I n i t ( A C C ← v ) - \mathsf{Init}(\mathsf{ACC}\gets v) Init(ACCv):输入为 v ∈ Z q v\in \mathbb{Z}_q vZq

​ 直接设定 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:=uXvGRQ2dg×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} ACCRQ2dg×2​,以及一个密文 C ∈ R Q 2 d g × 2 \mathbf{C}\in \mathcal{R}_Q^{2d_g\times 2} CRQ2dg×2,首先计算 u − 1 A C C u^{-1}\mathsf{ACC} u1ACC的分解为 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 u1ACC=i=1dgBgi1Di(其中每个 D i ∈ R 2 d g × 2 \mathbf{D}_i\in \mathcal{R}^{2d_g\times 2} DiR2dg×2,每项的系数在 { 1 − B g 2 , . . . , B g − 1 2 } \{\frac{1-B_g}{2},...,\frac{B_g-1}{2}\} {21Bg,...,2Bg1}之内)。并更新累加器的值:
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=0N1Xi ​​​,其实 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} tXv ​的值:如果 0 ≤ v < N 0\le v < N 0v<N,那么 t ⋅ X v → = − 1 \mathbf{t}\cdot \overrightarrow{X^v}=-1 tXv =1,如果 N ≤ v < 2 N N\le v < 2N Nv<2N,那么 t ⋅ X v → = 1 \mathbf{t}\cdot \overrightarrow{X^v}=1 tXv =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+...+aN1xN1R, a → = ( a 0 , . . . , a N − 1 ) ∈ Z N \overrightarrow{a}=(a_0,...,a_{N-1})\in \mathbb{Z}^N a =(a0,...,aN1)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+...+aN1xN1R a ⇒ ∈ Z N × N \stackrel{\Rightarrow}{a}\in \mathbb{Z}^{N \times N} aZN×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= a0a1aN2aN1aN1a0a1aN2aN1a0a2a1a1a2aN1a0

在这里插入图片描述

原文这里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}iN,jdks,wBks

需要一个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,wLWEsq/q(wziBksj) 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]([0 t,tt,0 t,,0 t]ACC)ZQ2N//ACCZ2Ndg×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)LWEz t/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)) cKeySwitch(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,az+e]+uXmGRQ2dg×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,...,Bgdg1I)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= 10Bg0Bgdg10010Bg0Bgdg1 ,uXmG= uXm0BguXm0Bgdg1uXm00uXm0BguXm0Bgdg1uXm

[ 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,az+e]= a0a1a2a3a2dg2a2dg1a0z+e0a1z+e1a2z+e2a3z+e3a2dg2z+e2dg2a2dg1z+e2dg1 ,Ez(m)= a0+uXma1a2+BguXma3a2dg2+Bgdg1uXma2dg1a0z+e0a1z+e1+uXma2z+e2a3z+e3+BguXma2dg2z+e2dg2a2dg1z+e2dg1+Bgdg1uXm

可以看出, 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 uQ/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]([0 t,tt,0 t,,0 t]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 =az +uXv +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 0v<N, t t ⋅ X v → = − 1 \mathbf{t}^t \cdot \overrightarrow{X^v}=-1 ttXv =1 m = 1 , N ≤ v < 2 N m=1,N\le v < 2N m=1,Nv<2N, t t ⋅ X v → = 1 \mathbf{t}^t \cdot \overrightarrow{X^v}=1 ttXv =1。因此 t t ⋅ X v → = − ( − 1 ) m s b ( v ) \mathbf{t}^t \cdot \overrightarrow{X^v}=-(-1)^{\mathsf{msb}(v)} ttXv =(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+ttXv )=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,az +te+uttXv +u)=(a,az +te+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,az +te+Q/tmsb(v))LWEz t/Q(msb(v))=LWEz t/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} XvR,当 m = 0 m=0 m=0 0 ≤ v < N 0\le v < N 0v<N X v X^v Xv的系数是正的,当 m = 1 m=1 m=1 N ≤ v < 2 N N\le v < 2N Nv<2N X v X^v Xv的系数是负的。通过这样的一个性质,结合GSW的技术,可以在密文上提取出 v v v​的最高位。相当于做了一次密文刷新。

小尾巴

本人正在入门密码学,欢迎各位同学或老师加我微信交流:shenghua-adije


  1. Centrum Wiskunde and Informatica, Amsterdam, Netherlands; leo.ducas@cwi.nl ↩︎

  2. University of California, San Diego, California, USA; daniele@cse.ucsd.edu ↩︎

  3. 也不知道这里的bootstrapping是指对bit-wise密文还是word-wise密文。之后看一看 ↩︎

  4. 所谓仿射变换,就是向量经过一次线性变换加一次平移变换,用公式可以表示为: q ⃗ = A p ⃗ + b ⃗ \vec{q}=A \vec{p}+\vec{b} q =Ap +b ↩︎

  5. 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 ↩︎ ↩︎ ↩︎ ↩︎

  • 13
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 23
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 23
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值