Full-RNS BGV/BFV

参考文献:

  1. BV11 Brakerski Z, Vaikuntanathan V. Fully homomorphic encryption from ring-LWE and security for key dependent messagesC//Annual cryptology conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 2011: 505-524.
  2. GHS12 Gentry C, Halevi S, Smart N P. Homomorphic evaluation of the AES circuitC//Annual Cryptology Conference. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 850-867.
  3. CP16 Crockett E, Peikert C. Λολ: Functional Lattice CryptographyC//Proceedings of the 2016 ACM SIGSAC Conference on Computer and Communications Security. 2016: 993-1005.
  4. BEHZ16 Bajard J C, Eynard J, Hasan M A, et al. A full RNS variant of FV like somewhat homomorphic encryption schemesC//International Conference on Selected Areas in Cryptography. Cham: Springer International Publishing, 2016: 423-442.
  5. HPS19 Halevi S, Polyakov Y, Shoup V. An improved RNS variant of the BFV homomorphic encryption schemeC//Topics in Cryptology--CT-RSA 2019: The Cryptographers' Track at the RSA Conference 2019, San Francisco, CA, USA, March 4--8, 2019, Proceedings. Springer International Publishing, 2019: 83-105.
  6. KPZ21 Kim A, Polyakov Y, Zucca V. Revisiting homomorphic encryption schemes for finite fieldsC//Advances in Cryptology--ASIACRYPT 2021: 27th International Conference on the Theory and Application of Cryptology and Information Security, Singapore, December 6--10, 2021, Proceedings, Part III 27. Springer International Publishing, 2021: 608-639.

文章目录

  • [RNS Basis Extension](#RNS Basis Extension)
    • [γ \gamma γ-correction technique](#γ \gamma γ-correction technique)
    • [Retrieve the Overflow](#Retrieve the Overflow)
  • [Modulus-Switching and Scaling in RNS](#Modulus-Switching and Scaling in RNS)
    • [Simple Reduction](#Simple Reduction)
    • [Modulus-Switching for BGV](#Modulus-Switching for BGV)
    • [Scaling for BFV](#Scaling for BFV)
      • [Simple scaling](#Simple scaling)
      • [Complex scaling](#Complex scaling)
      • [Scaling between Arbitrary RNS Bases](#Scaling between Arbitrary RNS Bases)
  • [Key-Switch in RNS](#Key-Switch in RNS)

RNS Basis Extension

一般地,FHE 需要很大的模数 Q Q Q,将它写作 Q = ∏ i = 1 L q i Q=\prod_{i=1}^L q_i Q=∏i=1Lqi,满足 q i = 1 ( m o d 2 N ) q_i=1\pmod{2N} qi=1(mod2N),我们简记 Q i = q 1 ⋯ q i Q_i=q_1\cdots q_i Qi=q1⋯qi,集合 { q i } \{q_i\} {qi} 称为 RNS basis ,它们的大小至多为 64 64 64 比特。我们希望 FHE 的全部运算都是单精度的(现代计算机的机器字),也就是全部运算都在 RNS 下完成,而不需要多精度算术。

不同的 RNS 之间的转换,将环元素 a ∈ R Q a \in \mathcal R_Q a∈RQ 从模数 Q = q 1 ⋯ q k Q=q_1\cdots q_k Q=q1⋯qk 下的 a Q aQ aQ 转换到模数 P = p 1 ⋯ p l P=p_1\cdots p_l P=p1⋯pl 下的 \[ a Q ] P \[aQ]P \[aQ]P,可以直接在 RNS 下计算
FastBaseExt ( a , Q , P ) = { ∑ i = 1 k a ⋅ ( Q q i ) − 1 q i ⋅ Q q i ( m o d p j ) } j = 1 , ⋯   , l \text{FastBaseExt}(a,Q,P) = \left\{ \sum
{i=1}^k \left a \\cdot \\left(\\dfrac{Q}{q_i}\\right)\^{-1} \\right
{q_i} \cdot \dfrac{Q}{q_i} \pmod{p_j} \right\}
{j=1,\cdots,l} FastBaseExt(a,Q,P)=⎩ ⎨ ⎧i=1∑ka⋅(qiQ)−1qi⋅qiQ(modpj)⎭ ⎬ ⎫j=1,⋯,l

我们简记 q i ∗ : = Q / q i q_i^*:=Q/q_i qi∗:=Q/qi 和 q ~ i : = ( Q / q i ) − 1 ( m o d q i ) \tilde q_i:=(Q/q_i)^{-1} \pmod{q_i} q~i:=(Q/qi)−1(modqi),满足 q i ∗ ⋅ q ~ i ≡ 1 ( m o d q i ) q_i^* \cdot \tilde q_i\equiv 1 \pmod{q_i} qi∗⋅q~i≡1(modqi),那么根据 CRT 合成定理,
∑ i a ⋅ q \~ i q i ⋅ q i ∗ = a Q + u ⋅ Q ∈ Z \sum_i a \\cdot \\tilde q_i_{q_i} \cdot q_i^* = a_Q + u \cdot Q \in \mathbb Z i∑a⋅q\~iqi⋅qi∗=aQ+u⋅Q∈Z

其中的 ∥ u ∥ ∞ ≤ k / 2 \|u\|_\infty \le k/2 ∥u∥∞≤k/2 称为 Q Q Q-overflow ,因此算法 FastBaseExt ( a , Q , P ) \text{FastBaseExt}(a,Q,P) FastBaseExt(a,Q,P) 输出的只是 \[ a Q ] P \[a_Q]_P \[aQ]P 的近似值 \[ a Q + u ⋅ Q ] P \[a_Q + u \cdot Q]_P \[aQ+u⋅Q]P

在有些实例中, u u u 的影响几乎可忽略;但是还有一些实例中, u u u 可能会导致较为显著的噪声增长,需要想办法去除它。

我们滥用符号, Q , P Q,P Q,P 代表对应的 RNS basis 集合, a Q a_Q aQ 代表它的 RNS 表示。

γ \gamma γ-correction technique

BFV 的一个关键计算是
⌊ P Q a Q ⌉ = P ⋅ a Q − P a Q Q ∈ R P \left\lfloor \dfrac{P}{Q}a_Q \right\rceil = \dfrac{P \cdota_Q - Pa_Q}{Q} \in \mathcal R_P ⌊QPaQ⌉=QP⋅aQ−PaQ∈RP

因为上述运算是整除法 ,因此可以用模乘逆元 替代, ( P ⋅ a Q − P a Q ) ⋅ Q − 1 ( m o d P ) (P \cdota_Q - Pa_Q) \cdot Q^{-1} \pmod P (P⋅aQ−PaQ)⋅Q−1(modP)

BEHZ16 采取整数指令 ,额外引入和 P , Q P,Q P,Q 互素的整数 γ \gamma γ,假设 a Q = Q / P ⋅ m + e + Q r a_Q=Q/P \cdot m+e+Qr aQ=Q/P⋅m+e+Qr,将 a Q a_Q aQ 加倍 γ \gamma γ,那么
   FastBaseExt ( γ P a , Q , γ P ) ⋅ − Q − 1 P =    \[ γ P a Q + u ⋅ Q ] γ P ⋅ − Q − 1 γ P =    ⌊ γ P Q a Q ⌉ − u =    γ ⋅ ( m + P r ) + ⌊ γ P e Q ⌉ − u \begin{aligned} &\,\, \text{FastBaseExt}(\gamma Pa,Q,\gamma P) \cdot -Q\^{-1}P\\ =&\,\, \[\\gamma PaQ + u \cdot Q]{\gamma P} \cdot -Q\^{-1}{\gamma P}\\ =&\,\, \left\lfloor \dfrac{\gamma P}{Q}a_Q \right\rceil - u\\ =&\,\, \gamma \cdot (m + Pr) + \left\lfloor \dfrac{\gamma Pe}{Q} \right\rceil - u \end{aligned} ===FastBaseExt(γPa,Q,γP)⋅−Q−1P\[γPaQ+u⋅Q]γP⋅−Q−1γP⌊QγPaQ⌉−uγ⋅(m+Pr)+⌊QγPe⌉−u

当 γ \gamma γ 满足某条件时(文章中写的我看不懂,它没解释),RNS 的关于 γ \gamma γ 的部分,满足
⌊ γ P e Q ⌉ − u γ = ⌊ γ P e Q ⌉ − u ∈ R \left \\left\\lfloor \\dfrac{\\gamma Pe}{Q} \\right\\rceil - u \\right_\gamma = \left\lfloor \dfrac{\gamma Pe}{Q} \right\rceil - u \in \mathcal R ⌊QγPe⌉−uγ=⌊QγPe⌉−u∈R

于是,纠错方式为:
m P = ( γ ⋅ ( m + P r ) + ⌊ γ P e Q ⌉ − u P − ⌊ γ P e Q ⌉ − u γ ) ⋅ γ − 1 P m_P = \left(\left \\gamma \\cdot (m + Pr) + \\left\\lfloor \\dfrac{\\gamma Pe}{Q} \\right\\rceil - u \\rightP - \left \\left\\lfloor \\dfrac{\\gamma Pe}{Q} \\right\\rceil - u \\right\gamma\right) \cdot \\gamma\^{-1}_P mP=(γ⋅(m+Pr)+⌊QγPe⌉−uP−⌊QγPe⌉−uγ)⋅γ−1P

不过,BEHZ16 的这个方法只能缓解 ,并没有根本地解决 Q Q Q-overflow 的问题。而 HPS19 的方法可以完全移除它。

Retrieve the Overflow

HPS19 采取浮点指令 ,直接计算 u u u 的值(精度受限的),
u = ⌊ ∑ i a ⋅ q \~ i q i ⋅ q i ∗ Q ⌉ = ⌊ ∑ i = 1 k a ⋅ q \~ i q i q i ⌉ \begin{aligned} u &= \left\lfloor \dfrac{\sum_i a \\cdot \\tilde q_i{q_i} \cdot q_i^*}{Q} \right\rceil = \left\lfloor \sum{i=1}^k \dfrac{a \\cdot \\tilde q_i_{q_i}}{q_i} \right\rceil \end{aligned} u=⌊Q∑ia⋅q\~iqi⋅qi∗⌉=⌊i=1∑kqia⋅q\~iqi⌉

于是 a Q = ( ∑ i a ⋅ q \~ i q i ⋅ q i ∗ ) − u ⋅ Q aQ = (\sum_i a \\cdot \\tilde q_i{q_i} \cdot q_i^*) - u \cdot Q aQ=(∑ia⋅q\~iqi⋅qi∗)−u⋅Q,纠错方式为:
\[ a Q ] P = FastBaseExt ( a , Q , P ) − u ⋅ Q P \[a_Q]_P = \text{FastBaseExt}(a,Q,P) -u\cdot Q_P \[aQ]P=FastBaseExt(a,Q,P)−u⋅QP

具体步骤:预计算 q i ∗ p j , ∀ i ∈ k , ∀ j ∈ l q_i\^\*{p_j},\forall i \in k,\forall j \in l qi∗pj,∀i∈k,∀j∈l,预计算 q \~ i q i , ∀ i ∈ k \\tilde q_i{q_i},\forall i \in k q\~iqi,∀i∈k,预计算 Q p j , ∀ j ∈ l Q_{p_j},\forall j \in l Qpj,∀j∈l

  1. 输入 a Q aQ aQ 的 RNS 表示 ( a 1 , ⋯   , a k ) (a_1,\cdots,a_k) (a1,⋯,ak),其中 a i = a q i a_i=a{q_i} ai=aqi
  2. 使用单精度整数指令 ,计算 y i = a i ⋅ q \~ i q i y_i=a_i \\cdot \\tilde q_i_{q_i} yi=ai⋅q\~iqi
  3. 使用单精度浮点指令 ,计算 z i = y i / q i z_i = y_i/q_i zi=yi/qi
  4. 计算出 u = ⌊ ∑ i z i ⌉ ∈ Z k u=\lfloor \sum_i z_i \rceil \in\mathbb Z_k u=⌊∑izi⌉∈Zk
  5. 在 Q Q Q 的 RNS 下,计算 x i = a i ⋅ q \~ i q i ( m o d q i ) x_i = a_i \cdot \\tilde q_i_{q_i} \pmod{q_i} xi=ai⋅q\~iqi(modqi)
  6. 在 P P P 的 RNS 下,计算 A j ′ = ∑ i x i ⋅ q i ∗ p j ( m o d p j ) A_j'=\sum_i x_i \cdot q_i\^\*_{p_j} \pmod{p_j} Aj′=∑ixi⋅qi∗pj(modpj)
  7. 纠正错误 , A j = A j ′ − u ⋅ Q p j A_j=A_j' - u \cdot Q_{p_j} Aj=Aj′−u⋅Qpj
  8. 输出 a P = { A 1 , ⋯   , A l } a_{P} = \{A_1,\cdots,A_l\} aP={A1,⋯,Al},易知 a Q ∪ a P = a P Q a_Q \cup aP = a{PQ} aQ∪aP=aPQ

因为浮点数精度是有限的,因此实际计算出的数值为 z i ∗ = z i + ϵ i z_i^*=z_i+\epsilon_i zi∗=zi+ϵi,最终得到 u ∗ = ⌊ ∑ i z i ∗ ⌉ u^*=\lfloor\sum_i z_i^*\rceil u∗=⌊∑izi∗⌉,总噪声是 ϵ = ∑ i ϵ i \epsilon=\sum_i \epsilon_i ϵ=∑iϵi,使用 IEEE-754 double 那么有 ϵ < k ⋅ 2 − 53 \epsilon < k \cdot 2^{-53} ϵ<k⋅2−53。我们定义 Z + 0.5 − ϵ , 0.5 + ϵ \mathbb Z+0.5-\\epsilon, 0.5+\\epsilon Z+0.5−ϵ,0.5+ϵpossible-error region ,一旦 ∑ i z i ∗ \sum_i z_i^* ∑izi∗ 落入这个区间,就应当采取高精度算术。不过,即使忽略它也影响不大,仅仅对噪声增长有一个极小的贡献。

Modulus-Switching and Scaling in RNS

Simple Reduction

输入 x ∈ Z P Q x \in \mathbb Z_{PQ} x∈ZPQ 的 RNS 表示,记为 ( x 1 , ⋯   , x k , x 1 ′ , ⋯   , x l ′ ) (x_1,\cdots,x_k,x_1',\cdots,x_l') (x1,⋯,xk,x1′,⋯,xl′),分别对应到 Q = ∏ i q i Q=\prod_i q_i Q=∏iqi 和 P = ∏ j p j P=\prod_j p_j P=∏jpj

RNS 下的模约减 :为了计算 x ( m o d Q ) x \pmod Q x(modQ),简单删除 P P P 的分量,输出 x Q = ( x 1 , ⋯   , x k ) x_Q=(x_1,\cdots,x_k) xQ=(x1,⋯,xk)

RNS 下的整除法 :假设 P ∣ x P|x P∣x(易知 x j ′ = 0 x_j'=0 xj′=0),为了计算 x / P x/P x/P,预计算 P q i P{q_i} Pqi,在线计算 x / P Q = ( x 1 ⋅ P q 1 , ⋯   , x k ⋅ P q k ) x/PQ = (x_1\\cdot P{q_1},\cdots,x_k\\cdot P{q_k}) x/PQ=(x1⋅Pq1,⋯,xk⋅Pqk)

注意 RNS 系统不是数位系统 (positional system),不能计算 Z \mathbb Z Z 上的带余除法 ,也不能执行比较舍入运算。因此,对于 BGV、BFV 中的某些必要运算(BGV 模切换、BFV 乘法缩放、秘钥切换、解密),需要设计特殊的解决方案。

Modulus-Switching for BGV

GHS12 给出了 BGV 的 Double-CRT 实现,对于 t = 2 t=2 t=2 平凡明文模数,因为 q i = 1 ( m o d t ) q_i=1\pmod t qi=1(modt) 导致实现简单。根据数论,

  • a ≡ b ( m o d q ) → k a ≡ k b ( m o d k q ) a \equiv b \pmod q \to ka \equiv kb \pmod{kq} a≡b(modq)→ka≡kb(modkq)
  • a ≡ b ( m o d q ) → a / d ≡ b / d ( m o d q / d ) , d = gcd ⁡ ( a , b , q ) a \equiv b \pmod{q} \to a/d \equiv b/d \pmod{q/d},d=\gcd(a,b,q) a≡b(modq)→a/d≡b/d(modq/d),d=gcd(a,b,q)
  • a ≡ b ( m o d q ) , d ∣ q → a ≡ b ( m o d d ) a \equiv b \pmod q,d\mid q \to a \equiv b \pmod{d} a≡b(modq),d∣q→a≡b(modd)
  • a ≡ b ( m o d m i ) → a ≡ b ( m o d l c m ( m i ) ) a \equiv b \pmod{m_i} \to a \equiv b \pmod{lcm(m_i)} a≡b(modmi)→a≡b(modlcm(mi))

对于一般的明文模数 t t t,令它是大素数(例如 t = 2 16 + 1 t=2^{16}+1 t=216+1),给定密文 c ∈ R Q k 2 c \in \mathcal R_{Q_k}^2 c∈RQk2,我们计算特殊的 c † ∈ R 2 c^\dagger \in \mathcal R^2 c†∈R2(系数在 Z \mathbb Z Z 上),满足

  • 解密条件: c † ≡ c ⋅ q k ( m o d t ) c^\dagger \equiv c \cdot q_k \pmod t c†≡c⋅qk(modt),

    LSD编码,因为 c ⋅ s ≡ m + t e ( m o d Q k ) c \cdot s \equiv m+te \pmod{Q_k} c⋅s≡m+te(modQk),假如小噪声 m + t e m+te m+te 不回绕 Q k − 1 Q_{k-1} Qk−1,从而 c s Q k = c s Q k − 1 cs{Q_k}=cs{Q_{k-1}} csQk=csQk−1 就是 m + t e ∈ Z N m+te \in \mathbb Z^N m+te∈ZN 的精确值,进而得到 \[ c s Q k − 1 ] t = m + t e t = m t \[cs{Q{k-1}}]_t = m+te_t = m_t \[csQk−1]t=m+tet=mt

    假如噪声 q k ( m + t e ) q_k(m+te) qk(m+te) 不回绕 Q k Q_{k} Qk,那么 \[ c † s Q k ] t = q k ( m + t e ) t = q k m t \[c\^\\dagger s{Q{k}}]_t = q_k(m+te)_t=q_km_t \[c†sQk]t=qk(m+te)t=qkmt

  • 噪声条件: δ = c † − c \delta=c^\dagger-c δ=c†−c 的范数较小

  • 整除条件: q k ∣ c † q_k\mid c^\dagger qk∣c†,注意 Z \mathbb Z Z 上的整除恰好是 Z Q k − 1 \mathbb Z_{Q_{k-1}} ZQk−1 上的乘以逆元,

    于是 c ′ = c † / q k c'=c^\dagger/q_k c′=c†/qk 的系数落在 − Q k − 1 / 2 , Q k − 1 ) \[-Q_{k-1}/2,Q_{k-1}) \[−Qk−1/2,Qk−1) 内,并且满足 \[ c ′ s Q k − 1 = q k − 1 c † s Q k − 1 = c s Q k − 1 c's{Q{k-1}}=q_k\^{-1}c\^\\dagger s{Q{k-1}}=cs{Q{k-1}} c′sQk−1=qk−1c†sQk−1=csQk−1,从而 c ′ c' c′ 是 m m m 的密文

我们希望先计算出小差距 δ ≡ ( q k − 1 ) ⋅ c ( m o d t ) \delta \equiv (q_k-1) \cdot c \pmod t δ≡(qk−1)⋅c(modt),然后再求出 c † c^\dagger c†,最后计算出 c ′ = c † / q k c'=c^\dagger/q_k c′=c†/qk,但是输入的 RNS 表示中不存在 c t c_t ct,导致 δ \delta δ 难以计算。GHS12 转而计算密文:
c ^ = q k t ⋅ c ( m o d Q k ) \hat c=q_k_t \cdot c \pmod{Q_k} c^=qkt⋅c(modQk)

它加密了扭曲的消息 q k t ⋅ m q_k_t \cdot m qkt⋅m(对于 t = 2 t=2 t=2 特殊情况,恰好不扭转),寻找 c † c^\dagger c† 的条件改变为:

  • 解密条件: c † ≡ c ^ ( m o d t ) c^\dagger \equiv \hat c \pmod t c†≡c^(modt),它使得 \[ c † s Q k ] t = q k m t \[c\^\\dagger s_{Q_k}]_t = q_km_t \[c†sQk]t=qkmt
  • 噪声条件: δ = c † − c ^ \delta=c^\dagger-\hat c δ=c†−c^,注意这儿的变化导致 δ ≡ 0 ( m o d t ) \delta \equiv 0 \pmod t δ≡0(modt)
  • 整除条件: q k ∣ c † q_k \mid c^\dagger qk∣c†,计算出 c ′ = c † / q k c'=c^\dagger/q_k c′=c†/qk 它满足 \[ c ′ s Q k − 1 ] t = q k m t \[c's{Q{k-1}}]_t=q_km_t \[c′sQk−1]t=qkmt(似乎不太对)

此时的 δ \delta δ 容易计算,算法如下:

  1. 输入 c ( m o d Q k ) c \pmod{Q_k} c(modQk) 的 RNS 表示(加密了 m t m_t mt)
  2. 先计算 c ^ = q k t ⋅ c \hat c=q_kt \cdot c c^=qkt⋅c 的 RNS 表示,然后计算 c \^ q k \\hat c{q_k} c\^qk 的系数表示 c ˉ \bar c cˉ
  3. 我们计算差距 δ ∈ [ − q k t / 2. q k t / 2 ) N \delta \in [-q_kt/2.q_kt/2)^N δ∈[−qkt/2.qkt/2)N,使得它满足 δ ≡ 0 ( m o d t ) \delta \equiv 0 \pmod t δ≡0(modt) 以及 δ ≡ − c ˉ ( m o d q k ) \delta \equiv -\bar c \pmod{q_k} δ≡−cˉ(modqk)
  4. 计算出 c † = c ^ + δ c^\dagger=\hat c+\delta c†=c^+δ,易知 c † ≡ c ^ ( m o d t ) c^\dagger \equiv \hat c \pmod t c†≡c^(modt) 以及 c † ≡ 0 ( m o d q k ) c^\dagger \equiv 0 \pmod{q_k} c†≡0(modqk)
  5. 最后计算整除 c ′ = c † / q k ( m o d Q k − 1 ) c'=c^\dagger/q_k \pmod{Q_{k-1}} c′=c†/qk(modQk−1),通过各分量乘以逆元 q k − 1 q i , ∀ i ≤ k − 1 q_k\^{-1}_{q_i},\forall i\le k-1 qk−1qi,∀i≤k−1
  6. 输出 c ′ ( m o d Q k − 1 ) c' \pmod{Q_{k-1}} c′(modQk−1) 的 RNS 表示(加密了 q k m t q_km_t qkmt)

由于每次模切换都会扭曲消息,因此我们需要实时地追踪它,在同态加法/乘法时也需要调整这个扭曲因子。

Scaling for BFV

HPS19 给出了 BFV 的两种缩放程序,前者可用于解密,后者用于 GHS 秘钥切换。

Simple scaling

输入: x ∈ Z Q x \in \mathbb Z_Q x∈ZQ 的 RNS 表示 ( x 1 , ⋯   , x k ) (x_1,\cdots,x_k) (x1,⋯,xk),任意的正整数 t t t(单精度整数)

输出: y = ⌊ t / Q ⋅ x ⌉ ∈ Z t y=\lfloor t/Q \cdot x\rceil \in \mathbb Z_t y=⌊t/Q⋅x⌉∈Zt

类似 CRT Basis Extension 的思路,将 x Q xQ xQ 重建为 x x x,观察提取出可预计算的部分,
y = ⌊ t Q ⋅ x ⌉ = ⌊ t Q ⋅ ∑ i = 1 k x i ⋅ q i ∗ ⋅ q ~ i − u ⋅ t ⌉ = ⌊ ∑ i = 1 k x i ⋅ ( t q i ⋅ q ~ i ) ⌉ − u ⋅ t \begin{aligned} y &= \left\lfloor \dfrac{t}{Q} \cdot x \right\rceil = \left\lfloor \dfrac{t}{Q} \cdot \sum
{i=1}^k x_i \cdot q_i^* \cdot \tilde q_i - u \cdot t \right\rceil\\ &= \left\lfloor \sum_{i=1}^k x_i \cdot \left(\dfrac{t}{q_i} \cdot \tilde q_i\right) \right\rceil - u \cdot t\\ \end{aligned} y=⌊Qt⋅x⌉=⌊Qt⋅i=1∑kxi⋅qi∗⋅q~i−u⋅t⌉=⌊i=1∑kxi⋅(qit⋅q~i)⌉−u⋅t

我们预计算其中的常数,分为整数小数 两部分,
t q ~ i q i = ω i + θ i ,    ω i ∈ Z t ,    θ i ∈ [ − 0.5 , 0.5 ) \dfrac{t\tilde q_i}{q_i} = \omega_{i}+\theta_{i},\,\, \omega_{i} \in \mathbb Z_{t},\,\, \theta_{i} \in [-0.5,0.5) qitq~i=ωi+θi,ωi∈Zt,θi∈[−0.5,0.5)

缩放步骤为:

  1. 使用单精度整数指令 ,计算 w = ∑ i x i ⋅ ω i t w=\\sum_i x_i \\cdot \\omega_{i}_{t} w=∑ixi⋅ωit
  2. 使用单精度浮点指令 ,计算 v = ⌊ ∑ i x i ⋅ θ i ⌉ ∈ Z k v=\lfloor \sum_i x_i \cdot \theta_{i} \rceil \in \mathbb Z_{k} v=⌊∑ixi⋅θi⌉∈Zk
  3. 合并为 y = w + v t y=w+v_{t} y=w+vt

同样的,实际计算时存在误差 θ i ∗ = θ i + ϵ i ,    ∣ ϵ i ∣ < 2 − 53 \theta_{i}^*=\theta_{i}+\epsilon_{i},\,\, |\epsilon_{i}|<2^{-53} θi∗=θi+ϵi,∣ϵi∣<2−53,累计为 ϵ = ∑ i x i ϵ i \epsilon=\sum_i x_i \epsilon_{i} ϵ=∑ixiϵi,其中 x i = x q i ∈ − q i , q i ) x_i=\[x_{q_i} \in -q_i,q_i) xi=\[xqi∈[−qi,qi),于是 ∣ ϵ j ∣ < 2 − 54 ⋅ ∑ i q i |\epsilon_j|<2^{-54} \cdot \sum_i q_i ∣ϵj∣<2−54⋅∑iqi,我们应当选取合适的 k k k 和 q i q_i qi,使得 ∣ ϵ j ∣ < 1 / 4 |\epsilon_j|<1/4 ∣ϵj∣<1/4 保证舍入是正确的。可能 IEEE-754 double 精度不够,需要使用不标准的 C/C++ long double 或者高精度算术。

Complex scaling

输入: x ∈ Z P Q x \in \mathbb Z_{PQ} x∈ZPQ 的 RNS 表示,某正整数 t t t,满足 x ∈ [ − P Q / 2 t , P Q / 2 t ) x \in [-PQ/2t, PQ/2t) x∈[−PQ/2t,PQ/2t) 落在较小范围

输出: y = ⌊ t / Q ⋅ x ⌉ ∈ Z Q y=\lfloor t/Q \cdot x\rceil \in \mathbb Z_Q y=⌊t/Q⋅x⌉∈ZQ

抽象地,这可以分为两步完成,

  1. 利用 Simple scaling 过程,设置 Q ′ = P Q , t ′ = t P Q'=PQ, t'=tP Q′=PQ,t′=tP,获得 y ′ = ⌊ t ′ / Q ′ ⋅ x ⌉ = ⌊ t / Q ⋅ x ⌉ ∈ Z t P y' = \lfloor t'/Q' \cdot x\rceil = \lfloor t/Q \cdot x\rceil \in \mathbb Z_{tP} y′=⌊t′/Q′⋅x⌉=⌊t/Q⋅x⌉∈ZtP,丢弃 t t t 的部分(等价于简单取模)获得 y ′ = ⌊ t / Q ⋅ x ⌉ ∈ [ − P / 2 , P / 2 ) y'=\lfloor t/Q \cdot x\rceil \in [-P/2,P/2) y′=⌊t/Q⋅x⌉∈[−P/2,P/2)(因为 x x x 的范围小, y ′ y' y′ 是不取模的结果)
  2. 利用 RNS Basis Extension 过程,从 y ′ P y'P y′P 扩展出 y ′ P Q y'{PQ} y′PQ,丢弃 P P P 的部分,输出 y = y ′ Q y=y'_Q y=y′Q

其中的 step 1 使用的 t ′ t' t′ 是高精度数字,需要先做 RNS 分解,然后分别执行 Simple scaling 过程,不过我们实际上只需要 y ′ P y'{P} y′P 而非 y ′ t P y'{tP} y′tP,并且 P ∣ gcd ⁡ ( Q ′ , t ′ ) P|\gcd(Q',t') P∣gcd(Q′,t′),其实存在更快的算法。

简记 Q i ∗ = Q / q i = q i ∗ P , P j = Q / p j = Q p j ∗ Q_i^*=Q/q_i=q_i^*P, P_j=Q/p_j=Qp_j^* Qi∗=Q/qi=qi∗P,Pj=Q/pj=Qpj∗,计算 Q ~ i = ( Q i ∗ ) − 1 q i , P ~ j = ( P j ∗ ) − 1 p j \tilde Q_i=(Q_i\^\*)\^{-1}{q_i}, \tilde P_j=(P_j\^\*)\^{-1}{p_j} Q~i=(Qi∗)−1qi,P~j=(Pj∗)−1pj,简记 x i = x q i , x j ′ = x p j x_i=x{q_i}, x_j'=x{p_j} xi=xqi,xj′=xpj,那么
y ′ = ⌊ t ′ Q ′ ⋅ x ⌉ = ⌊ t Q ⋅ ( ∑ i = 1 k x i ⋅ Q i ∗ ⋅ Q ~ i + ∑ j = 1 l x j ′ ⋅ P j ∗ ⋅ P ~ j ) − u ⋅ t P ⌉ = ⌊ ∑ i = 1 k x i ⋅ ( t q i ⋅ Q ~ i P ) + ∑ j = 1 l x j ′ ⋅ ( t ⋅ P ~ j p j ∗ ) ⌉ − u ⋅ t P \begin{aligned} y' &= \left\lfloor \dfrac{t'}{Q'} \cdot x \right\rceil = \left\lfloor \dfrac{t}{Q} \cdot \left(\sum_{i=1}^k x_i \cdot Q_i^* \cdot \tilde Q_i + \sum_{j=1}^l x_j' \cdot P_j^* \cdot \tilde P_j\right) - u \cdot tP \right\rceil\\ &= \left\lfloor \sum_{i=1}^k x_i \cdot \left(\dfrac{t}{q_i} \cdot \tilde Q_iP\right) + \sum_{j=1}^l x_j' \cdot \left(t \cdot \tilde P_jp_j^*\right) \right\rceil - u \cdot tP\\ \end{aligned} y′=⌊Q′t′⋅x⌉=⌊Qt⋅(i=1∑kxi⋅Qi∗⋅Q~i+j=1∑lxj′⋅Pj∗⋅P~j)−u⋅tP⌉=⌊i=1∑kxi⋅(qit⋅Q~iP)+j=1∑lxj′⋅(t⋅P~jpj∗)⌉−u⋅tP

计算 y ′ P y'P y′P 的 RNS 表示,
y ′ p j = ⌊ ∑ i = 1 k x i ⋅ ( t q i ⋅ Q \~ i P ) ⌉ + x j ′ ⋅ ( t ⋅ P \~ j p j ∗ ) p j y'
{p_j} = \left \\left\\lfloor \\sum_{i=1}\^k x_i \\cdot \\left(\\dfrac{t}{q_i} \\cdot \\tilde Q_iP\\right) \\right\\rceil + x_j' \\cdot \\left(t \\cdot \\tilde P_jp_j\^\*\\right) \\right_{p_j} y′pj=⌊i=1∑kxi⋅(qit⋅Q\~iP)⌉+xj′⋅(t⋅P\~jpj∗)pj

需要预计算
t Q ~ i P q i = ω i + θ i ,    ω i ∈ Z P ,    θ i ∈ [ − 0.5 , 0.5 ) \dfrac{t\tilde Q_iP}{q_i} = \omega_{i}+\theta_{i},\,\, \omega_{i} \in \mathbb Z_{P},\,\, \theta_{i} \in [-0.5,0.5) qitQ~iP=ωi+θi,ωi∈ZP,θi∈[−0.5,0.5)

继续将 w i w_i wi 分解为单精度整数 w i j : = w i p j , ∀ i ∈ k , ∀ j ∈ l w_{ij}:=w_i{p_j},\forall i\in k,\forall j \in l wij:=wipj,∀i∈k,∀j∈l,另外预计算 λ j : = t P \~ j p j ∗ p j , ∀ j ∈ l \lambda_j:=t\\tilde P_jp_j\^\*{p_j}, \forall j \in l λj:=tP\~jpj∗pj,∀j∈l

输入 ( x 1 , ⋯   , x k , x 1 ′ , ⋯   , x l ′ ) (x_1,\cdots,x_k,x_1',\cdots,x_l') (x1,⋯,xk,x1′,⋯,xl′),则 step 1 的步骤为:

  1. 使用浮点数指令,计算 v = ⌊ ∑ i x i θ i ⌉ ∈ Z k v=\lfloor \sum_i x_i\theta_i \rceil \in \mathbb Z_k v=⌊∑ixiθi⌉∈Zk,这个是共用的
  2. 使用整数指令,计算 w j = ∑ i x i w i j + λ j x j ′ p j w_j=\\sum_i x_iw_{ij} + \\lambda_jx_j'_{p_j} wj=∑ixiwij+λjxj′pj,第二项累加被 ( m o d p j ) \pmod{p_j} (modpj) 基本消除
  3. 合并为 y ′ p j = v + w j p j y'{p_j}=v+w_j{p_j} y′pj=v+wjpj

Scaling between Arbitrary RNS Bases

KPZ21 给出了另一种 Simple scaling 的实现,

输入: x ∈ Z Q x \in \mathbb Z_{Q} x∈ZQ 的 RNS 表示,与 Q Q Q 互素的多精度整数 P P P

输出: ⌊ P / Q ⋅ x Q ⌉ ( m o d P ) \lfloor P/Q \cdot x_Q\rceil \pmod P ⌊P/Q⋅xQ⌉(modP)

BEHZ16 中,它将舍入运算 可以写作整除法
⌊ P Q ⋅ x Q ⌉ = P ⋅ x Q − P x Q Q \left\lfloor \dfrac{P}{Q} \cdot x_Q \right\rceil = \dfrac{P \cdotx_Q - Px_Q}{Q} ⌊QP⋅xQ⌉=QP⋅xQ−PxQ

因此它等价于在 Z P \mathbb Z_P ZP 中乘以逆元
⌊ P Q ⋅ \[ x Q ⌉ ] P = − \[ P x Q ] P ⋅ Q − 1 P \left \\left\\lfloor \\dfrac{P}{Q} \\cdot \[x_Q \right\rceil \right]_P = \Big- \[Px_Q\Big]_P \cdot Q\^{-1}_P ⌊QP⋅\[xQ⌉]P=−\[PxQ]P⋅Q−1P

根据 CRT 组合公式,
P x Q = ∑ i = 1 k P x q i ⋅ q \~ i q i ⋅ q i ∗ − u ⋅ Q PxQ = \sum{i=1}^k Px{q_i} \cdot \\tilde q_i{q_i} \cdot q_i^* - u \cdot Q PxQ=i=1∑kPxqi⋅q\~iqi⋅qi∗−u⋅Q

因此最终结果的 RNS 表示的计算公式为:
− \[ P x Q ] p j ⋅ Q − 1 p j = u − ∑ i = 1 k \[ P x q i ⋅ q \~ i q i ⋅ q i − 1 ] p j \Big- \[PxQ\Big]{p_j} \cdot Q\^{-1}{p_j} = \left u - \\sum_{i=1}\^k \[Px{q_i} \cdot \\tilde q_i{q_i} \cdot q_i^{-1} \right]{p_j} −\[PxQ]pj⋅Q−1pj=u−i=1∑k\[Pxqi⋅q\~iqi⋅qi−1]pj

其中 ∥ u ∥ ∞ ≤ k / 2 \|u\|_\infty \le k/2 ∥u∥∞≤k/2,可以使用 HPS19浮点数算法来精确计算。

Key-Switch in RNS

输入 s A s_A sA 加密的密文 c t A = ( c 0 , c 1 ) ct_A=(c_0,c_1) ctA=(c0,c1),给定 s B s_B sB 加密的 s A s_A sA 的密文 k s A → B ks_{A \to B} ksA→B,
k s A → B : = ( k s 0 = a ⋅ s B + t e + s A Q , k s 1 = − a Q ) ks_{A \to B} := (ks_0=a \\cdot s_B+te+s_A_Q, ks_1=-aQ) ksA→B:=(ks0=a⋅sB+te+sAQ,ks1=−aQ)
秘钥切换 就是同态线性解密,抽象描述为 c 0 + c 1 ⋅ E ( s A ) c_0+c_1 \cdot E(s_A) c0+c1⋅E(sA),具体地:
c t B = c 0 ⋅ ( 1 , 0 ) + c 1 ⋅ k s A → B = ( c 0 + c 1 ⋅ k s 0 Q , c 1 ⋅ k s 1 Q ) \begin{aligned} ct_B &= c_0\cdot(1,0)+c_1 \cdot ks
{A \to B}\\ &= (c_0+c_1 \\cdot ks_0_Q, c_1 \\cdot ks_1_Q) \end{aligned} ctB=c0⋅(1,0)+c1⋅ksA→B=(c0+c1⋅ks0Q,c1⋅ks1Q)

重现性化是一种特殊的秘钥切换:输入密文 c t = ( c 0 , c 1 , c 2 ) ct=(c_0,c_1,c_2) ct=(c0,c1,c2),给定 s s s 加密的 s 2 s^2 s2 的密文 r l k rlk rlk,
r l k : = ( r l k 0 = a ⋅ s + t e + s 2 Q , r l k 1 = − a Q ) rlk := (rlk_0=a \\cdot s+te+s\^2_Q, rlk_1=-a_Q) rlk:=(rlk0=a⋅s+te+s2Q,rlk1=−aQ)

由于 ( 0 , 1 ) (0,1) (0,1) 就是 s s s 自身的密文,重现性化 的抽象描述为 c 0 + c 1 ⋅ E ( s ) + c 2 ⋅ E ( s 2 ) c_0+c_1\cdot E(s)+c_2\cdot E(s^2) c0+c1⋅E(s)+c2⋅E(s2),具体地:
c t ′ = c 0 ⋅ ( 1 , 0 ) + c 1 ⋅ ( 0 , 1 ) + c 2 ⋅ r l k = ( c 0 + c 2 ⋅ r l k 0 Q , c 1 + c 2 ⋅ r l k 1 ) \begin{aligned} ct' &= c_0 \cdot(1,0)+c_1\cdot(0,1)+c_2 \cdot rlk\\ &= (c_0+c_2 \\cdot rlk_0_Q, c_1+c_2 \\cdot rlk_1) \end{aligned} ct′=c0⋅(1,0)+c1⋅(0,1)+c2⋅rlk=(c0+c2⋅rlk0Q,c1+c2⋅rlk1)

但是 c 1 c_1 c1 的规模相对于密文模数 Q Q Q 过大,导致秘钥切换中 k s A → B ks_{A \to B} ksA→B 的噪声被大幅增长。有两种方法来控制噪声,分别是 BV11GHS12,以及它们的混合。

Brakerski-Vaikuntanathan

BV11 采取数字分解技术 ,选取 radix- w w w,数位是 l = ⌊ log ⁡ w Q ⌉ + 1 l=\lfloor \log_w Q\rceil+1 l=⌊logwQ⌉+1

  • 分解: D w , Q ( a ) = ( a w , ⌊ a / w ⌉ w , ⋯   , ⌊ a / w l − 1 ⌉ w ) ∈ R w l D_{w,Q}(a) = (a_w,\\lfloor a/w\\rceil_w,\cdots,\\lfloor a/w\^{l-1}\\rceil_w) \in \mathcal R_w^l Dw,Q(a)=(aw,⌊a/w⌉w,⋯,⌊a/wl−1⌉w)∈Rwl,
  • 幂次: P w , Q ( a ) = ( a Q , a w Q , ⋯   , a w l Q ) ∈ R Q l P_{w,Q}(a) = (a_Q,aw_Q,\cdots,aw\^l_Q) \in \mathcal R_Q^l Pw,Q(a)=(aQ,awQ,⋯,awlQ)∈RQl
  • 易知 ⟨ D ( a ) , P ( b ) ⟩ ≡ a b ( m o d Q ) \langle D(a),P(b)\rangle \equiv ab \pmod Q ⟨D(a),P(b)⟩≡ab(modQ)

因此,秘钥切换秘钥是:
k s A → B B V : = ( k s 0 = a ⃗ ⋅ s B + t e ⃗ + P w , Q ( s A ) Q , k s 1 = − a ⃗ Q ) ∈ R Q l × 2 ks_{A \to B}^{BV} := (ks_0=\\vec a \\cdot s_B+t\\vec e+P_{w,Q}(s_A)_Q, ks_1=-\\vec a_Q) \in \mathcal R^{l \times 2}_Q ksA→BBV:=(ks0=a ⋅sB+te +Pw,Q(sA)Q,ks1=−a Q)∈RQl×2

秘钥切换程序是:
c t B = ( c 0 + ⟨ D w , Q ( c 1 ) , k s 0 ⟩ Q , ⟨ D w , Q ( c 1 ) , k s 1 ⟩ Q ) ct_B = (c_0+\\langle D_{w,Q}(c_1),ks_0\\rangle_Q, \\langle D_{w,Q}(c_1),ks_1\\rangle_Q) ctB=(c0+⟨Dw,Q(c1),ks0⟩Q,⟨Dw,Q(c1),ks1⟩Q)

然而,RNS 系统不是数位系统,上述的 radix- w w w 分解无法自然地执行。BEHZ16 直接使用 RNS 的各个余数 作为元素的分解形式,设 Q = q 1 ⋯ q k Q=q_1\cdots q_k Q=q1⋯qk,简记 q i ∗ = Q / q i , q ~ i = ( q i ∗ ) − 1 ( m o d q i ) q_i^*=Q/q_i, \tilde q_i=(q_i^*)^{-1}\pmod{q_i} qi∗=Q/qi,q~i=(qi∗)−1(modqi)

  • 分解: D Q ( a ) = ( a q \~ 1 q 1 , a q \~ 2 q 2 , ⋯   , a q \~ k q k ) ∈ R k D_{Q}(a) = (a\\tilde q_1{q_1},a\\tilde q_2{q_2},\cdots,a\\tilde q_k_{q_k}) \in \mathcal R^k DQ(a)=(aq\~1q1,aq\~2q2,⋯,aq\~kqk)∈Rk
  • 幂次: P Q ( a ) = ( a q 1 ∗ Q , a q 2 ∗ Q , ⋯   , a q k ∗ Q ) ∈ R Q k P_{Q}(a) = (aq_1\^\*{Q},aq_2\^\*{Q},\cdots,aq_k\^\*_{Q}) \in \mathcal R_Q^k PQ(a)=(aq1∗Q,aq2∗Q,⋯,aqk∗Q)∈RQk
  • 容易验证,它也满足 ⟨ D ( a ) , P ( b ) ⟩ ≡ a b ( m o d Q ) \langle D(a),P(b)\rangle \equiv ab \pmod Q ⟨D(a),P(b)⟩≡ab(modQ)

在 RNS 下,秘钥切换秘钥是:
k s A → B R N S − B V : = ( k s 0 = a ⃗ ⋅ s B + t e ⃗ + P Q ( s A ) Q , k s 1 = − a ⃗ Q ) ∈ R Q k × 2 ks_{A \to B}^{RNS-BV} := (ks_0=\\vec a \\cdot s_B+t\\vec e+P_{Q}(s_A)_Q, ks_1=-\\vec a_Q) \in \mathcal R^{k \times 2}_Q ksA→BRNS−BV:=(ks0=a ⋅sB+te +PQ(sA)Q,ks1=−a Q)∈RQk×2

秘钥切换程序是:
c t B = ( c 0 + ⟨ D Q ( c 1 ) , k s 0 ⟩ Q , ⟨ D Q ( c 1 ) , k s 1 ⟩ Q ) ct_B = (c_0+\\langle D_{Q}(c_1), ks_0\\rangle_Q, \\langle D_{Q}(c_1), ks_1\\rangle_Q) ctB=(c0+⟨DQ(c1),ks0⟩Q,⟨DQ(c1),ks1⟩Q)

HPS19 进一步优化,修改为

  • 分解: D Q ( a ) = ( a q 1 , a q 2 , ⋯   , a q k ) ∈ R k D_{Q}(a) = (a{q_1},a{q_2},\cdots,a_{q_k}) \in \mathcal R^k DQ(a)=(aq1,aq2,⋯,aqk)∈Rk
  • 幂次: P Q ( a ) = ( a q 1 ∗ q \~ 1 Q , a q 2 ∗ q \~ 2 Q , ⋯   , a q k ∗ q \~ k Q ) ∈ R Q k P_{Q}(a) = (aq_1\^\*\\tilde q_1{Q},aq_2\^\*\\tilde q_2{Q},\cdots,aq_k\^\*\\tilde q_k_{Q}) \in \mathcal R_Q^k PQ(a)=(aq1∗q\~1Q,aq2∗q\~2Q,⋯,aqk∗q\~kQ)∈RQk

因此 c 1 Q c_1_Q c1Q 直接就是 D ( c 1 ) D(c_1) D(c1),于是节约了一些数乘运算。

具体流程,以及对应的复杂度:

Gentry-Halevi-Smart

GHS12 使用临时扩展技术 ,选取足够大的 P = p 1 ⋯ p l ≈ Q P=p_1\cdots p_l \approx Q P=p1⋯pl≈Q

秘钥切换秘钥为:
k s A → B G H S : = ( k s 0 = a ⋅ s B + t e + P s A P Q , k s 1 = − a P Q ) ∈ R P Q 2 ks_{A \to B}^{GHS} := (ks_0=a \\cdot s_B+te+Ps_A{PQ}, ks_1=-a{PQ}) \in \mathcal R^{2}_{PQ} ksA→BGHS:=(ks0=a⋅sB+te+PsAPQ,ks1=−aPQ)∈RPQ2

秘钥切换程序是:

  1. 先在 P Q PQ PQ 下计算 c 1 ⋅ E ( s A ) c_1 \cdot E(s_A) c1⋅E(sA),
    c t B ′ = ( c 0 ′ = c 1 ⋅ k s 0 P Q , c 1 ′ = c 1 ⋅ k s 1 P Q ) ct_B' = (c_0'=c_1 \\cdot ks_0{PQ}, c_1'=c_1 \\cdot ks_1{PQ}) ctB′=(c0′=c1⋅ks0PQ,c1′=c1⋅ks1PQ)

  2. 然后计算 c t B ′ ct_B' ctB′ 整除 P P P 的差距(满足 δ t = 0 \\delta_t=0 δt=0 和 c t B ′ P = δ P ct_B'_P=\\delta_P ctB′P=δP),
    δ = ( δ 0 = t − t − 1 c 0 ′ P , δ 1 = t − t − 1 c 1 ′ P ) ∈ R P Q 2 \delta = (\delta_0=t-t\^{-1}c_0'_P, \delta_1=t-t\^{-1}c_1'P) \in \mathcal R^{2}{PQ} δ=(δ0=t−t−1c0′P,δ1=t−t−1c1′P)∈RPQ2

  3. 将 c t B ′ + δ ct_B'+\delta ctB′+δ 从 P Q PQ PQ 缩放到 Q Q Q(除以 P P P,而非简单取模),计算出
    c t B = ( c 0 + c 0 ′ + δ 0 P Q , c 1 + c 1 ′ + δ 1 P Q ) ct_B = \left( \leftc_0+\\dfrac{c_0'+\\delta_0}{P}\\right_Q, \leftc_1+\\dfrac{c_1'+\\delta_1}{P}\\right_Q \right) ctB=(c0+Pc0′+δ0Q,c1+Pc1′+δ1Q)

在 RNS 下执行,

  1. c 1 Q c_1_Q c1Q 利用 RNS Basis Extension 扩展到 \[ c 1 Q + u Q ] P \[c_1_Q+uQ]P \[c1Q+uQ]P,其中的 ∥ u ∥ ∞ ≤ k / 2 \|u\|\infty \le k/2 ∥u∥∞≤k/2 是 CRT 合成时的 Q Q Q-overflow
  2. 计算 c 1 P Q c_1{PQ} c1PQ 和 k s A → B G H S ks{A \to B}^{GHS} ksA→BGHS 的乘积,得到 c t B ′ P Q ct_B'_{PQ} ctB′PQ
  3. − t − 1 c t B ′ P -t\^{-1}ct_B'_P −t−1ctB′P 利用 RNS Basis Extension 扩展到 \[ − t − 1 c t B ′ P + u ′ P ] Q \[-t\^{-1}ct_B'_P+u'P]Q \[−t−1ctB′P+u′P]Q,其中 ∥ u ′ ∥ ∞ ≤ l / 2 \|u'\|\infty \le l/2 ∥u′∥∞≤l/2
  4. 我们计算出了 P Q PQ PQ 下差距的近似值 δ ′ = δ + t u ′ P \delta'=\delta+tu'P δ′=δ+tu′P,再利用 Madulus-Switching / Scaling ,计算出 c t B Q ct_B_Q ctBQ

其中的 u , u ′ u,u' u,u′ 可以通过 BEHZ16HPS19 的技术来消除,但在这里它们都很小,仅对噪声增长有一个可忽略的贡献。

具体流程,以及对应的复杂度:

Hybrid

BV Key-Switch 的缺点是:密文扩张了 l l l 倍,需要的 NTT 数量较多。

GHS Key-Switch 的缺点是:模数增大了 P P P 倍,为了补偿安全损失,要么维度扩大两倍,要么乘法层数减少一半。

一般而言,混合方案的效率和噪声控制是表现更好的。使用一个相对较大的 radix- w w w,使得数位 l = ⌊ log ⁡ w Q ⌉ + 1 l=\lfloor \log_w Q\rceil+1 l=⌊logwQ⌉+1 很小,以及一个较小规模的 P ≈ l w / 2 P \approx lw/2 P≈lw/2,
k s A → B H y b r i d = ( a ⃗ ⋅ s B + t e ⃗ + P ⋅ P w , Q ( s A ) P Q , − a ⃗ P Q ) ks_{A \to B}^{Hybrid} = (\\vec a \\cdot s_B + t\\vec e + P\\cdot P_{w,Q}(s_A){PQ}, -\\vec a{PQ}) ksA→BHybrid=(a ⋅sB+te +P⋅Pw,Q(sA)PQ,−a PQ)

计算流程是:

  1. 输入 c t A = ( c 0 , c 1 ) ∈ R Q 2 ct_A=(c_0,c_1) \in \mathcal R_Q^2 ctA=(c0,c1)∈RQ2,分解 c 1 c_1 c1 为 D w , Q ( c 1 ) ∈ R l D_{w,Q}(c_1) \in \mathcal R^l Dw,Q(c1)∈Rl
  2. 计算 c t B ′ = ( ⟨ D w , Q ( c 1 ) , k s 0 ⟩ P Q , ⟨ D w , Q ( c 1 ) , k s 1 ⟩ P Q ) ct_B' = (\\langle D_{w,Q}(c_1), ks_0\\rangle{PQ}, \\langle D_{w,Q}(c_1), ks_1\\rangle{PQ}) ctB′=(⟨Dw,Q(c1),ks0⟩PQ,⟨Dw,Q(c1),ks1⟩PQ)
  3. 利用模切换将它除以 P P P 缩放到 Q Q Q 上,计算出 c t B = ( c 0 + ( c 0 ′ + δ 0 ) / P Q , c 1 + ( c 1 ′ + δ 1 ) / P Q ) ct_B=(c_0+(c_0'+\\delta_0)/P_Q, c_1+(c_1'+\\delta_1)/P_Q) ctB=(c0+(c0′+δ0)/PQ,c1+(c1′+δ1)/PQ)

对于 RNS 系统,使用 BEHZ16 的类似分解,将 Q Q Q 分为 Q 0 , ⋯   , Q d Q_0,\cdots,Q_d Q0,⋯,Qd,每个 Q i Q_i Qi 包含 α ≈ k / d \alpha\approx k/d α≈k/d 个小素数,简记 Q i ∗ = Q / Q i Q_i^*=Q/Q_i Qi∗=Q/Qi, Q ~ i = ( Q i ∗ ) − 1 Q i \tilde Q_i=(Q_i\^\*)\^{-1}_{Q_i} Q~i=(Qi∗)−1Qi

分解函数就是 D ~ Q ( a ) = ( a Q 1 , ⋯   , a Q d ) ∈ R d \tilde D_Q(a)=(a{Q_1},\cdots,a{Q_d}) \in \mathcal R^d D~Q(a)=(aQ1,⋯,aQd)∈Rd,幂次函数定义为
P ~ Q ( a ) = ( s B Q i ∗ Q \~ i Q , ⋯   , s B Q i ∗ Q \~ i Q ) ∈ R Q d \tilde P_Q(a) = \left( \lefts_B Q_i\^\*\\tilde Q_i\\right{Q}, \cdots, \lefts_B Q_i\^\*\\tilde Q_i\\right{Q} \right) \in \mathcal R^d_Q P~Q(a)=(sBQi∗Q\~iQ,⋯,sBQi∗Q\~iQ)∈RQd

那么,秘钥切换秘钥为:
k s A → B R N S − H y b r i d = ( a ⃗ ⋅ s B + t e ⃗ + P ⋅ P \~ Q ( s B ) P Q , − a ⃗ P Q ) ks_{A\to B}^{RNS-Hybrid} = (\\vec a \\cdot s_B + t\\vec e + P \\cdot \\tilde P_Q(s_B){PQ}, -\\vec a{PQ}) ksA→BRNS−Hybrid=(a ⋅sB+te +P⋅P\~Q(sB)PQ,−a PQ)

计算步骤就是 RNS-BV 和 RNS-GHS 的恰当组合,

  1. 分解 c 1 c_1 c1 为 D ~ Q ( c 1 ) \tilde D_Q(c_1) D~Q(c1),并扩展到 P Q PQ PQ
  2. 在 P Q PQ PQ 上计算出 c t B ′ ct_B' ctB′
  3. 缩放到 Q Q Q,再加上 c 0 c_0 c0,得到 c t B ct_B ctB

具体流程,以及对应的复杂度:

Complexities and Size

GHS 选取:BFV 的 k ≈ l k \approx l k≈l,BGV 的 k ′ ≈ l ′ k' \approx l' k′≈l′

Hybrid 选取:BFV 的 α ≈ k , d α ≈ l \alpha \approx k, d\alpha \approx l α≈k,dα≈l,BGV 的 α ′ ≈ k ′ , d α ′ ≈ l ′ \alpha' \approx k', d\alpha' \approx l' α′≈k′,dα′≈l′

复杂度为:

相关推荐
金銀銅鐵9 小时前
[Python] 体验用欧几里得算法计算最大公约数的过程
python·数学
金銀銅鐵4 天前
用 Pygame 实现 15 puzzle
python·数学·游戏
梁辰兴6 天前
计算机网络基础:报文鉴别
网络·计算机网络·计算机·计算机网络基础·梁辰兴·报文鉴别
Luhui Dev7 天前
几何图,现在可以用 API 一句话生成
人工智能·数学·luhuidev
xcLeigh7 天前
数学之美:数字革命背后的底层逻辑
人工智能·数学·ai·数学原理·书籍·数学之美·绝对边界
如君愿7 天前
考研复习 Day 52 | 密码学--第九章 密钥管理(下)
密码学·课后习题
梁辰兴7 天前
计算机网络基础:对称加密密码体制
网络·计算机网络·计算机·对称加密·计算机网络基础·梁辰兴
Malone-AI7 天前
f(n)=af(n-1)+b根据一阶线性递推式推导通项公式
数学·数列
闻缺陷则喜何志丹7 天前
【解析几何丘维声 第二章】空间的平面和直线
数学·向量·解析几何·点乘·叉乘
梁辰兴8 天前
计算机网络基础:数据加密模型
网络·计算机网络·计算机·数据加密·计算机网络基础·梁辰兴·数据加密模型