参考文献:
类似于 [HS00] 的 NTRU 优化技巧,[GC15] 提出了 Ring Isomorphism Encoding 编码方案,使用形如 p = x − b p=x-b p=x−b 的明文模数,给出了高精度整数的 BV/BGV 变体。
[NL11] 给出了 BFV 的代码实现。除此之外,它还给出了如何把平凡的消息空间(整数、比特串)的编码到明文多项式环 R p = Z p [ x ] / ( x N + 1 ) R_p=\mathbb Z_p[x]/(x^N+1) Rp=Zp[x]/(xN+1)。这种编码方案,被 [GC15] 称为 BCE 编码。
BCE.Encode:给定 n n n 比特的整数 m m m,二进制分解,编码为多项式:
p m ( x ) = ∑ i = 0 n − 1 m i x i p_m(x) = \sum_{i=0}^{n-1} m_ix^i pm(x)=i=0∑n−1mixi
BCE.Decode:就是 m = p m ( 2 ) m = p_m(2) m=pm(2),多项式求值。
运算就是多项式加法/多项式乘法,
但是 BCE 的两个空间并非同构,因此需要追踪是否越界 p p p 以及 x n + 1 x^n+1 xn+1
[GC15] 提出了另一种编码方式: 明文多项式环 R p = Z [ x ] / ( x N + 1 , p ) R_p=\mathbb Z[x]/(x^N+1,p) Rp=Z[x]/(xN+1,p),其中的 p ∈ Z [ x ] p \in \mathbb Z[x] p∈Z[x] 是多项式(不必是常数)。
特别地,对于 a ∈ Z a \in \mathbb Z a∈Z,映射 ϕ : Z [ x ] / ( x n + 1 , x − a ) → Z / ( a n + 1 ) \phi: \mathbb Z[x]/(x^n+1,x-a) \to \mathbb Z/(a^n+1) ϕ:Z[x]/(xn+1,x−a)→Z/(an+1) 定义为
f ( x ) + ( x n + 1 , x − a ) ↦ f ( a ) + ( a n + 1 ) f(x)+(x^n+1,x-a) \mapsto f(a) + (a^n+1) f(x)+(xn+1,x−a)↦f(a)+(an+1)
容易验证 ϕ \phi ϕ 是两个整环的同构映射。
对于不同的 a a a,环 R p R_p Rp 可以同构于:整环、有限域、整环直积,代码实现的效率也有差异。方便起见,[GC15] 选取了 p = x − 2 p=x-2 p=x−2,此时 R p ≅ Z 2 n + 1 R_p \cong \mathbb Z_{2^n+1} Rp≅Z2n+1 环同构。我们需要约束下 R p R_p Rp 的代表元的范围,
T n = { a ( x ) = ∑ i = 0 n − 1 a i x i : a i ∈ { 0 , ± 1 } } T_n = \{a(x) = \sum_{i=0}^{n-1} a_ix^i:a_i \in \{0,\pm 1\} \} Tn={a(x)=i=0∑n−1aixi:ai∈{0,±1}}
易知 ∣ T n ∣ = 3 n > 2 n + 1 |T_n| = 3^n>2^n+1 ∣Tn∣=3n>2n+1,从而这个集合包含了全部的 R p R_p Rp 代表元。例如, 2 x 2 + x + 1 ≡ ( x − 2 ) x 2 + 2 x 2 + x + 1 ≡ x 3 + x + 1 ( m o d x − 2 ) 2x^2+x+1 \equiv (x-2)x^2 + 2x^2+x+1 \equiv x^3 + x + 1\pmod{x-2} 2x2+x+1≡(x−2)x2+2x2+x+1≡x3+x+1(modx−2)(取模 p = x − 2 p=x-2 p=x−2 时,并非是把高次项都消除,而是要将较大的系数消除,多项式次数甚至会更高了)。
RIE.Encode:给定整数 z ∈ Z z \in \mathbb Z z∈Z,取值范围 [ − 2 n − 1 , ⋯ , 0 , ⋯ , 2 n − 1 ] [-2^{n-1},\cdots,0,\cdots,2^{n-1}] [−2n−1,⋯,0,⋯,2n−1]
寻找 z i ∈ { 0 , ± 1 } z_i \in \{0,\pm1\} zi∈{0,±1},满足
z ≡ ∑ i = 0 n − 1 z i 2 i ( m o d 2 n + 1 ) z\equiv \sum_{i=0}^{n-1} z_i 2^i \pmod{2^n+1} z≡i=0∑n−1zi2i(mod2n+1)
并且要使得 ∑ i ∣ z i ∣ \sum_i |z_i| ∑i∣zi∣ 最小化
编码为多项式
m ( x ) = ∑ i = 0 n − 1 z i x i m(x) = \sum_{i=0}^{n-1} z_i x^i m(x)=i=0∑n−1zixi
可以验证 ϕ : m ( x ) → z \phi:m(x) \to z ϕ:m(x)→z 成立
RIE.Decode:给定多项式 m ∈ R p m \in R_p m∈Rp(系数不一定还是 { 0 , ± 1 } \{0,\pm 1\} {0,±1} 的)
因为 R p ≅ Z a n + 1 R_p \cong \mathbb Z_{a^n+1} Rp≅Zan+1,因此 RIE 码字的同态运算是自然的(不必担心 p p p 和 x n + 1 x^n+1 xn+1 是否溢出):多项式加法就是整数加法、多项式乘法就是整数乘法。此外,如果 a n + 1 a^n+1 an+1 可以分解为一些互素的因子 n 1 , ⋯ , n t n_1,\cdots,n_t n1,⋯,nt,那么就有 CRT 分解(SIMD 槽)
R p ≅ Z a n + 1 ≅ ∏ i = 1 t Z n i R_p \cong \mathbb Z_{a^n+1} \cong \prod_{i=1}^t \mathbb Z_{n_i} Rp≅Zan+1≅i=1∏tZni
对于 RLWE-based BGV 方案,
对于加密、解密、同态运算、秘钥切换,除了把 ( m o d p ) \pmod p (modp) 替换为了 ( m o d x − b ) \pmod{x-b} (modx−b),这个 BGV 变体的计算方式都是与原始方案一样的。略微修改 BGV 的模切换算法,就可以适应这个明文模数。算法 s c a l e ( c , q , q ′ , p ) scale(c,q,q',p) scale(c,q,q′,p),
q′<q,满足 q ≡ q ′ ≡ 1 m o d p q \equiv q' \equiv 1 \mod p q≡q′≡1modp
可以证明,对于 p = x − 2 p=x-2 p=x−2,舍入噪声的规模为 ∥ y − c ′ ∥ ∞ ≤ 1.5 \|y-c'\|_\infty \le 1.5 ∥y−c′∥∞≤1.5
[CLPX18] 将上述的 RIE 应用到了 B/FV 方案上,得到了高精度整数的 B/FV 变体,并且给出了有理数的编码方案(分数格式)。另外它利用 [CS16] 提出的平均情况下的启发式噪声上界(heuristic upper bounds for the noise growth),评估了这个 BFV 变体的噪声增长(原始 B/FV 使用最坏的噪声估计,参数很不紧)。
类似于 BCE,我们令消息空间 M = [ − ⌈ b n / 2 ⌉ , ⌊ b n / 2 ⌋ ] ∩ Z M = [-\lceil b^n/2 \rceil, \lfloor b^n/2 \rfloor] \cap \mathbb Z M=[−⌈bn/2⌉,⌊bn/2⌋]∩Z(大小为 b n + 1 b^n+1 bn+1 的对称区间)。那么,对于任意的 m ∈ M m \in M m∈M,总是存在至少一个短的多项式 m ^ ( x ) ∈ Z [ x ] \hat m(x) \in \mathbb Z[x] m^(x)∈Z[x],满足 deg m ^ ≤ n − 1 \deg \hat m \le n-1 degm^≤n−1 以及 ∥ m ^ ∥ ∞ ≤ ( b + 1 ) / 2 \|\hat m\|_\infty \le (b+1)/2 ∥m^∥∞≤(b+1)/2(如果系数大小约束为 b / 2 b/2 b/2 则只能表示 b n b^n bn 个元素),使得 m ^ ( b ) = m ( m o d b n + 1 ) \hat m(b)=m \pmod{b^n+1} m^(b)=m(modbn+1)
我们设置明文模数 p = x − b ∈ Z [ x ] p=x-b \in \mathbb Z[x] p=x−b∈Z[x],密文模数 q ∈ Z q \in \mathbb Z q∈Z,BFV 工作的多项式环 R = Z [ x ] / ( x n + 1 ) R=\mathbb Z[x]/(x^n+1) R=Z[x]/(xn+1),其中 n n n 是二的幂次。那么,
R / p R ≅ Z / ( b n + 1 ) Z m ^ ( x ) ↦ m = m ^ ( b ) R/pR \cong \mathbb Z/(b^n+1)\mathbb Z\\ \hat m(x) \mapsto m=\hat m(b) R/pR≅Z/(bn+1)Zm^(x)↦m=m^(b)
可以验证, p = x − b p=x-b p=x−b 在分圆数域 Q [ x ] / ( x n + 1 ) \mathbb Q[x]/(x^n+1) Q[x]/(xn+1) 中的逆元为:
p − 1 = − 1 b n + 1 ( x n − 1 + b x n − 2 + ⋯ + b n − 1 ) ∈ Q [ x ] p^{-1} = -\dfrac{1}{b^n+1} (x^{n-1} + bx^{n-2} + \cdots + b^{n-1}) \in \mathbb Q[x] p−1=−bn+11(xn−1+bxn−2+⋯+bn−1)∈Q[x]
因此,我们定义
Δ b : = ⌊ q p ⌉ = ⌊ − q b n + 1 ( x n − 1 + b x n − 2 + ⋯ + b n − 1 ) ⌉ ∈ Z [ x ] \Delta_b := \left\lfloor \dfrac{q}{p} \right\rceil = \left\lfloor -\dfrac{q}{b^n+1} (x^{n-1} + bx^{n-2} + \cdots + b^{n-1}) \right\rceil \in \mathbb Z[x] Δb:=⌊pq⌉=⌊−bn+1q(xn−1+bxn−2+⋯+bn−1)⌉∈Z[x]
构造出 BFV 变体,
秘钥:私钥 s k = s ∈ R sk=s \in R sk=s∈R,公钥 p k = ( p 0 , p 1 ) ∈ R q 2 pk=(p_0,p_1) \in R_q^2 pk=(p0,p1)∈Rq2,满足 p 0 + p 1 s = e ≈ 0 ( m o d q ) p_0+p_1s = e\approx 0 \pmod{q} p0+p1s=e≈0(modq)
加密:消息 m ∈ M m \in M m∈M 是有界的整数,编码为多项式 m ^ ( x ) ∈ R p \hat m(x) \in R_p m^(x)∈Rp,短随机带 r ∈ R r \in R r∈R,中心离散高斯 e 0 , e 1 ∈ R e_0,e_1 \in R e0,e1∈R,
c t : = ( [ Δ b ⋅ m ^ + p 0 r + e 0 ] q , [ p 1 r + e 1 ] q ) ∈ R q 2 ct := ([\Delta_b \cdot \hat m + p_0r + e_0]_q, [p_1r + e_1]_q) \in R_q^2 ct:=([Δb⋅m^+p0r+e0]q,[p1r+e1]q)∈Rq2
解密:密文 c t = ( c 0 , c 1 ) ct=(c_0,c_1) ct=(c0,c1),计算
m ^ = ⌊ x − b q [ c 0 + c 1 s ] q ⌉ ∈ R p \hat m = \left\lfloor \dfrac{x-b}{q} [c_0+c_1s]_q \right\rceil \in R_p m^=⌊qx−b[c0+c1s]q⌉∈Rp
输出 m = m ^ ( b ) ∈ M m = \hat m(b) \in M m=m^(b)∈M
加法:输入 c t 0 , c t 1 ct_0,ct_1 ct0,ct1,输出 c t a d d = c t 0 + c t 1 ct_{add} = ct_0 + ct_1 ctadd=ct0+ct1
乘法:输入 c t 0 = ( c 0 , c 1 ) , c t 1 = ( d 0 , d 1 ) ct_0=(c_0,c_1),ct_1=(d_0,d_1) ct0=(c0,c1),ct1=(d0,d1),计算 c t m u l t ′ = ( c 0 ′ , c 1 ′ , c 2 ′ ) ∈ R q 3 ct_{mult}'=(c_0',c_1',c_2') \in R_q^3 ctmult′=(c0′,c1′,c2′)∈Rq3,其中
c 0 ′ = [ ⌊ x − b q ( c 0 d 0 ) ⌉ ] q c 1 ′ = [ ⌊ x − b q ( c 0 d 0 + c 1 d 0 ) ⌉ ] q c 2 ′ = [ ⌊ x − b q ( c 1 d 1 ) ⌉ ] q \begin{aligned} c_0' &= \left[\left\lfloor \dfrac{x-b}{q} (c_0d_0) \right\rceil\right]_q\\ c_1' &= \left[\left\lfloor \dfrac{x-b}{q} (c_0d_0+c_1d_0) \right\rceil\right]_q\\ c_2' &= \left[\left\lfloor \dfrac{x-b}{q} (c_1d_1) \right\rceil\right]_q\\ \end{aligned} c0′c1′c2′=[⌊qx−b(c0d0)⌉]q=[⌊qx−b(c0d0+c1d0)⌉]q=[⌊qx−b(c1d1)⌉]q
然后执行 Relinearize 操作,得到 c t m u l t ∈ R q 2 ct_{mult} \in R_q^2 ctmult∈Rq2
我们采取启发式的噪声估计,规范嵌入范数(Canonical Embedding Norm)定义为
∥ a ∥ ∞ c a n : = ∥ ( a ( ζ m i ) ) i ∈ Z m ∗ ∥ ∞ \|a\|_\infty^{can} := \|(a(\zeta_m^i))_{i \in \mathbb Z_m^*}\|_\infty ∥a∥∞can:=∥(a(ζmi))i∈Zm∗∥∞
其中 ζ m ∈ C \zeta_m \in \mathbb C ζm∈C 是本原单位根。它有良好的性质,
启发式的,如果 a ∈ R Q a \in R_\mathbb Q a∈RQ 的各个系数是根据标准差 σ \sigma σ 独立采样的,那么以压倒性概率满足 ∥ a ∥ ∞ c a n ≤ 6 σ n \|a\|_\infty^{can} \le 6 \sigma\sqrt n ∥a∥∞can≤6σn,除了 e r f c ( 6 ) ≈ 2 − 55 erfc(6) \approx 2^{-55} erfc(6)≈2−55 的小尾巴。
同态加法的噪声,
∥ E r r ( v a d d ) ∥ c a n ≤ ∥ E r r ( v 1 ) ∥ c a n + ∥ E r r ( v 2 ) ∥ c a n \|Err(v_{add})\|^{can} \le \|Err(v_{1})\|^{can} + \|Err(v_{2})\|^{can} ∥Err(vadd)∥can≤∥Err(v1)∥can+∥Err(v2)∥can
同态乘法的噪声,
∥ E r r ( v m u l t ) ∥ c a n ≲ 14 ( b + 1 ) n max { ∥ E r r ( v 1 ) ∥ c a n , ∥ E r r ( v 2 ) ∥ c a n } \|Err(v_{mult})\|^{can} \lesssim 14(b+1)n\max\{\|Err(v_{1})\|^{can},\|Err(v_{2})\|^{can}\} ∥Err(vmult)∥can≲14(b+1)nmax{∥Err(v1)∥can,∥Err(v2)∥can}
类似于 SEAL 的思路,[CLPX18] 也是采用基于分数的有理数编码器,而非基于缩放的有理数编码器,[CSVW17] 证明了这两种有理数编码器同构,但是后者需要追踪 scale 的大小。
抽象地,分数编码器是 ( P , E n c o d e , D e c o d e ) (P,Encode,Decode) (P,Encode,Decode),其中 P ⊆ Q P \subseteq \mathbb Q P⊆Q 是有限子集,编码函数 E n c o d e : P → M Encode:P \to M Encode:P→M,解码函数 D e c o d e : M → P Decode: M \to P Decode:M→P,我们要求:
编码器是可逆的( E n c o d e Encode Encode 是单射, D e c o d e Decode Decode 是左逆),
D e c o d e ( E n c o d e ( x ) ) = x , ∀ x ∈ P Decode(Encode(x)) = x,\forall x \in P Decode(Encode(x))=x,∀x∈P
具有同态的性质,
E n c o d e ( x + y ) = E n c o d e ( x ) + E n c o d e ( y ) E n c o d e ( x y ) = E n c o d e ( x ) ⋅ E n c o d e ( y ) Encode(x+y) = Encode(x)+Encode(y)\\ Encode(xy) = Encode(x)\cdot Encode(y) Encode(x+y)=Encode(x)+Encode(y)Encode(xy)=Encode(x)⋅Encode(y)
设置 M = Z / ( b n + 1 ) Z M = \mathbb Z/(b^n+1)\mathbb Z M=Z/(bn+1)Z,定义编码函数为
E n c o d e ( x y ) = x y − 1 ( m o d b n + 1 ) Encode\left(\dfrac{x}{y}\right) = xy^{-1} \pmod{b^n+1} Encode(yx)=xy−1(modbn+1)
现在,我们需要选择合适的 P P P(比如 g c d ( y , b n + 1 ) ≠ 1 gcd(y,b^n+1) \neq 1 gcd(y,bn+1)=1 就明显不可逆),并构造对应的解码函数,使得它们满足我们要求的可逆、同态的性质。
假如 b ∈ Z b \in \mathbb Z b∈Z 是奇数,设置
P = { c ⋅ b n / 2 + d b n / 2 : c , d ∈ [ − b n / 2 − 1 2 , b n / 2 − 1 2 ] ∩ Z } P = \left\{ \dfrac{c \cdot b^{n/2} + d}{b^{n/2}}: c,d \in \left[-\dfrac{b^{n/2}-1}{2},\dfrac{b^{n/2}-1}{2}\right] \cap \mathbb Z \right\} P={bn/2c⋅bn/2+d:c,d∈[−2bn/2−1,2bn/2−1]∩Z}
可以证明,上述定义的 E n c o d e : P → M Encode: P \to M Encode:P→M 是单射,其中 ( b n / 2 ) − 1 = − b n / 2 ( m o d b n + 1 ) (b^{n/2})^{-1} = -b^{n/2} \pmod{b^n+1} (bn/2)−1=−bn/2(modbn+1)
定义它的左逆,对于 z ∈ E n c o d e ( P ) z \in Encode(P) z∈Encode(P),
D e c o d e ( z ) = [ z ⋅ b n / 2 ] b n + 1 b n / 2 Decode(z) = \dfrac{[z \cdot b^{n/2}]_{b^n+1}}{b^{n/2}} Decode(z)=bn/2[z⋅bn/2]bn+1
可以验证 ( P , E n c o d e , D e c o d e ) (P,Encode,Decode) (P,Encode,Decode) 满足我们的抽象要求。
假如 b ∈ Z b \in \mathbb Z b∈Z 是偶数,由于证明编码函数是单射的限制,需要把整数部分 c c c 或者小数部分 d d d 的位数降低一位(没看懂里面的 b / ( b − 1 ) b/(b-1) b/(b−1) 代表什么意思)。我们把 d d d 减少到 n / 2 − 1 n/2-1 n/2−1 位,那么
P = { c ⋅ b n / 2 − 1 + d b n / 2 − 1 : c ∈ [ − ( b n / 2 − 1 ) b 2 ( b − 1 ) , ( b n / 2 − 1 ) b 2 ( b − 1 ) ] ∩ Z , d ∈ [ − ( b n / 2 − 1 − 1 ) b 2 ( b − 1 ) , ( b n / 2 − 1 − 1 ) b 2 ( b − 1 ) ] ∩ Z } P = \left\{ \dfrac{c \cdot b^{n/2-1} + d}{b^{n/2-1}}: c \in \left[-\dfrac{(b^{n/2}-1)b}{2(b-1)},\dfrac{(b^{n/2}-1)b}{2(b-1)}\right] \cap \mathbb Z,\,\, d \in \left[-\dfrac{(b^{n/2-1}-1)b}{2(b-1)},\dfrac{(b^{n/2-1}-1)b}{2(b-1)}\right] \cap \mathbb Z \right\} P={bn/2−1c⋅bn/2−1+d:c∈[−2(b−1)(bn/2−1)b,2(b−1)(bn/2−1)b]∩Z,d∈[−2(b−1)(bn/2−1−1)b,2(b−1)(bn/2−1−1)b]∩Z}
可以证明,上述定义的 E n c o d e : P → M Encode: P \to M Encode:P→M 是单射,其中 ( b n / 2 − 1 ) − 1 = − b n / 2 + 1 ( m o d b n + 1 ) (b^{n/2-1})^{-1} = -b^{n/2+1} \pmod{b^n+1} (bn/2−1)−1=−bn/2+1(modbn+1)
定义它的左逆,对于 z ∈ E n c o d e ( P ) z \in Encode(P) z∈Encode(P),
D e c o d e ( z ) = [ z ⋅ b n / 2 − 1 ] b n + 1 b n / 2 − 1 Decode(z) = \dfrac{[z \cdot b^{n/2-1}]_{b^n+1}}{b^{n/2-1}} Decode(z)=bn/2−1[z⋅bn/2−1]bn+1
可以验证 ( P , E n c o d e , D e c o d e ) (P,Encode,Decode) (P,Encode,Decode) 满足我们的抽象要求。
使用正则电路(regular circuit): A A A 层加法, 1 1 1 层乘法,迭代 L L L 轮,整数范围 [ − L , L ] [-L,L] [−L,L],来评估 BFV-big-number 的效率。
原始 BFV,采取 [CJLL17] 的 NAF 编码器,
本文的高精度 BFV 变体,