Faster Ring-Packing via BST and Ring-Switch

news2024/11/27 10:22:42

参考文献:

  1. [GHPS12] Gentry C, Halevi S, Peikert C, et al. Ring switching in BGV-style homomorphic encryption[C]//International Conference on Security and Cryptography for Networks. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 19-37.
  2. [GHPS13] Gentry C, Halevi S, Peikert C, et al. Field switching in BGV-style homomorphic encryption[J]. Journal of Computer Security, 2013, 21(5): 663-684.
  3. [BCK+23] Bae Y, Cheon J H, Kim J, et al. HERMES: Efficient Ring Packing Using MLWE Ciphertexts and Application to Transciphering[C]//Annual International Cryptology Conference. Cham: Springer Nature Switzerland, 2023: 37-69.

文章目录

  • Ring Packing
    • Moduli optimization
    • Ring switching
  • Hermes
    • MLWE Module-switch
    • MLWE Key-switch
    • ModPack
    • BaseHERMES
    • Implementation
  • HHE

[BCK+23] 发现:对于大模数,环打包的开销会高于自举的开销。因此,他们先在小模数、小维度上打包,然后再合并为大维度,并利用自举提升模数。此外,他们提出在打包算法中插入 MLWE 中点,从而大幅减少 KSK 的规模,计算复杂度略微提升。

Ring Packing

环打包的任务是在 LWE-format 以及 RLWE-format 之间转换。应用的场景为:异构的数据类型、异构的运算宽度/数据量、细粒度存储数据、减小通信带宽。

环打包的实质就是同态计算 C ⋅ s ( m o d q ) C \cdot s \pmod{q} Cs(modq),其中 C ∈ Z q N × ( K + 1 ) C \in \mathbb Z_q^{N \times(K+1)} CZqN×(K+1) 是由 N N N 个维度 K K K 的 LWE 密文堆叠出的矩阵, s ∈ Z K + 1 s \in \mathbb Z^{K+1} sZK+1 是 LWE 私钥(表示为 s = ( 1 , s ′ ) , s ′ ∈ Z K s=(1,s'), s' \in \mathbb Z^{K} s=(1,s),sZK)。[HS14] 提出了矩阵-向量乘积的三种算法:假设 RLWE 是强线性同态的([BV11] 或者 [GHS12])

  1. column method
    • c j ∈ Z q N c_j \in \mathbb Z_q^N cjZqN 是矩阵 C C C 的列矢,那么 C ⋅ s = ∑ j c j ⋅ s j C \cdot s = \sum_j c_j \cdot s_j Cs=jcjsj
    • c j c_j cj 系数编码为多项式,将 s j s_j sj 分别作为常数多项式被加密,那么计算 K K K 次同态数乘以及加法,就得到了 coefficients-encoding 的打包密文
    • Pub-KS of TFHE、[MS18]、Chimera 都是这个方法
  2. row method
    • c i ∈ Z q K + 1 c_i \in \mathbb Z_q^{K+1} ciZqK+1 是矩阵 C C C 的行矢,那么 C ⋅ s = [ ⟨ c i , s ⟩ ] i C \cdot s = [\langle c_i,s\rangle]_i Cs=[⟨ci,s]i
    • c i c_i ci 系数编码为多项式,将 s s s 也系数编码为多项式并加密,那么计算单次同态数乘,它的常数项就是 ⟨ c i , s ⟩ \langle c_i,s\rangle ci,s,使用 Galois 自同构计算 Trace 消除其他的系数,就得到了 coefficients-encoding 的打包密文
    • LWE-to-RLWE 就是这个方法
  3. diagonal method
    • d i ∈ Z q K + 1 d_i \in \mathbb Z_q^{K+1} diZqK+1 是矩阵 C C C 的对角线,那么 C ⋅ s = ∑ i d i ⊙ ( s ⋘ i ) C \cdot s = \sum_i d_i \odot(s \lll i) Cs=idi(si)
    • d i d_i di 槽打包为多项式,将 s s s 也槽打包为多项式并加密,使用 Galois 自同构实现 Rotate 以 BSGS 方式运算,就得到了 slots-encoding 的打包密文
    • Pegasus 就是这个方法

[BCK+23] 的目标是:将大量的 LWE 密文高效地打包成为 slots-encoded RLWE-format pure-FHE。自举要求巨大的模数,从而维度也会很大,之前的那些打包算法存在诸多限制:系数打包、速度慢、仅支持少量 LWE 密文。

Moduli optimization

[BCK+23] 观察到:由 LWE 密文堆叠出的矩阵 C C C 没有特殊结构,因此计算 C ⋅ s C \cdot s Cs 需要大量的同态运算,每个同态操作都是在大模数上运行,都需要很多的 NTT 运算。

[BCK+23] 将打包操作放在尽可能小的模数上,然后用自举提升模数。他们观察到,对于大规模电路,模数编排所带来的收益,远大于自举的开销。类似于 RtF Framework,使用 HalfBTS 将系数打包的小模数 CKKS 密文转化为槽打包的大模数 CKKS 密文。

一些记号:

  • L W E q K LWE_q^K LWEqK 是维度 K K K 模数 q q q 的 LWE 密文,私钥 s ∈ Z K s \in \mathbb Z^{K} sZK
  • R L W E q , N RLWE_{q,N} RLWEq,N 是维度 N N N 模数 q q q 的 RLWE 密文,私钥 s ∈ R N s \in R_{N} sRN
  • Q E n c Q_{Enc} QEnc 是 Level 0 模数(保证解密正确), Q K S Q_{KS} QKS 是 Level 1 模数(做 KS 后解密仍正确), Q t o p Q_{top} Qtop 是 ModRaise 输出模数, Q r e f r e s h Q_{refresh} Qrefresh 是自举之前的模数, Q c o m p Q_{comp} Qcomp 是自举之后的模数,
  • N E n c , N K S , N B T S N_{Enc}, N_{KS}, N_{BTS} NEnc,NKS,NBTS 是保证安全强度的必要维度
  • 对于 HalfBTS,步骤是 ModRasie、CtS、EvalMod,第一步 StC 被省略,因此可以 Q r e f r e s h = Q E n c Q_{refresh} = Q_{Enc} Qrefresh=QEnc

Moduli-optimized ring packing

  1. 将 LWE 密文使用 base ring packing 获得 coefficients-encoding RLWE 密文,模数是 Q E n c Q_{Enc} QEnc,维度是 N B T S N_{BTS} NBTS
  2. 调用 HalfBTS 将模数提升到 Q c o m p Q_{comp} Qcomp,并且成为 slots-encoding RLWE 密文

这里的 base ring packing 可以是上述的三种打包方法,但是 column method 不需要 Galois 自同构,因此不消耗 Levels,获得的收益会更大。

Ring switching

由于 base ring packing 只工作在很小的模数上,因此只要较低的维度就足够保证安全性。[BCK+23] 使用 Ring-Switch 技术,将 LWE 密文分成几组,每一组打包到低维度 RLWE 密文,然后再把它们合成出高维度 RLWE 密文。

目标的分圆环是 R q , N R_{q,N} Rq,N,维度 N N N 是二的幂次。假设 k ∣ N k \mid N kN,那么根据:
∑ i = 0 N − 1 a i X i = ∑ i = 0 k − 1 X i ⋅ ∑ j = 0 N / k − 1 a i + j N / k X j N / k = ∑ i = 0 k − 1 X i ⋅ a ( i ) ( X N / k ) \sum_{i=0}^{N-1} a_iX^i = \sum_{i=0}^{k-1} X^i\cdot\sum_{j=0}^{N/k-1}a_{i+jN/k}X^{jN/k} = \sum_{i=0}^{k-1} X^i\cdot a_{(i)}(X^{N/k}) i=0N1aiXi=i=0k1Xij=0N/k1ai+jN/kXjN/k=i=0k1Xia(i)(XN/k)
我们可以将 R q , N R_{q,N} Rq,N 视为 rank- k k k R q , N / k R_{q,N/k} Rq,N/k-module,确切地说:
R q , N = Z q [ X ] / ( X N + 1 ) ≅ ( Z q [ Y ] / ( Y N / k + 1 ) ) [ X ] / ( X k − Y ) = R q , N / k [ X ] / ( X k − Y ) R_{q,N} = \mathbb Z_q[X]/(X^N+1) \cong (\mathbb Z_q[Y]/(Y^{N/k}+1))[X]/(X^k-Y) = R_{q,N/k}[X]/(X^k-Y) Rq,N=Zq[X]/(XN+1)(Zq[Y]/(YN/k+1))[X]/(XkY)=Rq,N/k[X]/(XkY)
方便起见,我们用 X N X_N XN 表示 R q , N R_{q,N} Rq,N 的本原单位根,简记 β i = X N i , 0 ≤ i ≤ k − 1 \beta_i = X_N^i, 0 \le i\le k-1 βi=XNi,0ik1,那么 { β i } \{\beta_i\} {βi} 是一组 R q , N / k R_{q,N/k} Rq,N/k-basis,
R q , N = ∑ i = 0 k − 1 R q , N / k ⋅ β i R_{q,N} = \sum_{i=0}^{k-1} R_{q,N/k} \cdot \beta_i Rq,N=i=0k1Rq,N/kβi
定义 π q , N k : R q , N → ( R q , N / k ) k \pi_{q,N}^k: R_{q,N} \to (R_{q,N/k})^k πq,Nk:Rq,N(Rq,N/k)k 是模分解(module decomposition map),具体是 π q , N k ( a ) = ( a ( 0 ) , ⋯   , a ( k − 1 ) ) \pi_{q,N}^k(a) = (a_{(0)}, \cdots, a_{(k-1)}) πq,Nk(a)=(a(0),,a(k1)),满足 a = ∑ j a ( j ) ⋅ β j a = \sum_j a_{(j)}\cdot\beta_j a=ja(j)βj,这是一个 R q , N / k R_{q,N/k} Rq,N/k-线性映射。定义 ι q , N k : R q , N / k → R q , N \iota_{q,N}^k: R_{q,N/k} \to R_{q,N} ιq,Nk:Rq,N/kRq,N 是环嵌入(ring embedding),具体是 ι q , N k ( X N / k ) = X N k \iota_{q,N}^k(X_{N/k}) = X_N^k ιq,Nk(XN/k)=XNk,这是一个 R q , N / k R_{q,N/k} Rq,N/k-单同态。

假如 RLWE 密文 ( a , b ) ∈ R q , N 2 (a,b) \in R_{q,N}^2 (a,b)Rq,N2 的私钥是 s = s ( 0 ) ∈ R q , N / k s=s_{(0)} \in R_{q,N/k} s=s(0)Rq,N/k,相位是 b + a s = m b+as=m b+as=m,那么就有 b ( j ) + a ( j ) s ( 0 ) = m ( j ) b_{(j)} + a_{(j)}s_{(0)} = m_{(j)} b(j)+a(j)s(0)=m(j),从而可以把 ( a ( j ) , b ( j ) ) ∈ R q , N / k 2 (a_{(j)}, b_{(j)}) \in R_{q,N/k}^2 (a(j),b(j))Rq,N/k2 视为 m ( j ) ∈ R q , N / k m_{(j)} \in R_{q,N/k} m(j)Rq,N/k 的密文。定义如下的两个函数,

  • Split:输入 ( a , b ) ∈ R q , N 2 (a,b) \in R_{q,N}^2 (a,b)Rq,N2,计算 ϕ q , N k ( a ) = ( a ( 0 ) , ⋯   , a ( k − 1 ) ) \phi_{q,N}^k(a) = (a_{(0)},\cdots,a_{(k-1)}) ϕq,Nk(a)=(a(0),,a(k1)) 以及 π q , N k ( a ) = ( a ( 0 ) , ⋯   , a ( k − 1 ) ) \pi_{q,N}^k(a) = (a_{(0)},\cdots,a_{(k-1)}) πq,Nk(a)=(a(0),,a(k1)),输出 ( a ( j ) , b ( j ) ) ∈ R q , N / k 2 (a_{(j)}, b_{(j)}) \in R_{q,N/k}^2 (a(j),b(j))Rq,N/k2
  • Combine:输入 ( a ( j ) , b ( j ) ) ∈ R q , N / k 2 (a_{(j)}, b_{(j)}) \in R_{q,N/k}^2 (a(j),b(j))Rq,N/k2,计算 a = ∑ j ι q , N k ( a ( j ) ) ⋅ β j a=\sum_j\iota_{q,N}^k(a_{(j)})\cdot\beta_j a=jιq,Nk(a(j))βj 以及 b = ∑ j ι q , N k ( b ( j ) ) ⋅ β j b=\sum_j\iota_{q,N}^k(b_{(j)})\cdot\beta_j b=jιq,Nk(b(j))βj,输出 ( a , b ) ∈ R q , N 2 (a,b) \in R_{q,N}^2 (a,b)Rq,N2

它们就是系数的置换,计算开销可忽略。

[BCK+23] 将 N N N 个维度 K K K 的 LWE 密文分成 N / n N/n N/n 组,每一组打包成维度 n n n 的 RLWE 密文,然后将 N / n N/n N/n 个 RLWE 密文合成为维度 N N N 的 RLWE 密文,最后用 HalfBTS 提升模数。如图所示:

在这里插入图片描述

额外的优势是,低维度的环打包,所需的 KSK 规模也会更小一些。

Hermes

在三种打包算法中,列方法是最快的,并且更加适合上述的模数优化策略。然而,列方法需要分别加密 s j ∈ Z q , 0 ≤ j ≤ K − 1 s_j \in \mathbb Z_q, 0 \le j \le K-1 sjZq,0jK1,导致 KSK 规模的较大。为了进一步减小密钥规模,[BCK+23] 将上述的 Ring packing 推广到 Module packing,在 LWE 密文和 RLWE 密文之间插入 MLWE 密文,多层迭代。

一些记号:

  • M L W E q , n k MLWE_{q,n}^k MLWEq,nk 是一个 MLWE 密文,模数 q q q,度数 n n n,秩 k k k,维度 N = n ⋅ k N=n \cdot k N=nk
  • 密文是 c = ( c [ 0 ] , c [ 1 ] , ⋯   , c [ k ] ) ∈ R q , n k + 1 c=(c[0],c[1],\cdots,c[k]) \in R_{q,n}^{k+1} c=(c[0],c[1],,c[k])Rq,nk+1,简记 b = c [ 0 ] b=c[0] b=c[0] 以及 a = ( c [ 1 ] , ⋯   , c [ k ] ) ∈ R q , n k a=(c[1],\cdots,c[k]) \in R_{q,n}^k a=(c[1],,c[k])Rq,nk,对应的私钥是 s ∈ R q , n k s \in R_{q,n}^k sRq,nk
  • 易知, M L W E q , 1 K = L W E q K MLWE_{q,1}^K = LWE_q^K MLWEq,1K=LWEqK M L W E q , N 1 = R L W E q , N MLWE_{q,N}^1=RLWE_{q,N} MLWEq,N1=RLWEq,N

MLWE Module-switch

假设 l , k , n l,k,n l,k,n 都是二的幂次,密文 M L W E q , n l k MLWE_{q,nl}^k MLWEq,nlk 私钥是 s ∈ R n k ≤ R n l k s \in R_{n}^k \le R_{nl}^k sRnkRnlk,那么类似于 Ring Switch,可以定义如下的模切换(注意区分,模数切换,Modulus-Switching):

  • S p l i t n , l k : M L W E q , n l k → l × M L W E q , n k Split_{n,l}^k: MLWE_{q,nl}^k \to l \times MLWE_{q,n}^k Splitn,lk:MLWEq,nlkl×MLWEq,nk
    • 输入 c = M L W E q , n l k ( m ) c=MLWE_{q,nl}^{k}(m) c=MLWEq,nlk(m)
    • 计算 π q , n l l ( c [ j ] ) = ( c 0 [ j ] , ⋯   , c l − 1 [ j ] ) , 0 ≤ j ≤ k \pi_{q,nl}^l(c[j]) = (c_0[j],\cdots,c_{l-1}[j]), 0\le j\le k πq,nll(c[j])=(c0[j],,cl1[j]),0jk
    • 输出 c t = ( c t [ 0 ] , ⋯   , c t [ k ] ) ∈ R q , n k + 1 , 0 ≤ t ≤ l − 1 c_t=(c_t[0],\cdots, c_t[k]) \in R_{q,n}^{k+1}, 0\le t \le l-1 ct=(ct[0],,ct[k])Rq,nk+1,0tl1,它们分别加密了 m ( t ) m_{(t)} m(t)
  • C o m b i n e n , l k : l × M L W E q , n k → M L W E q , n l k Combine_{n,l}^k: l \times MLWE_{q,n}^k \to MLWE_{q,nl}^k Combinen,lk:l×MLWEq,nkMLWEq,nlk
    • 输入 c t = M L W E q , n k ( m t ) , 0 ≤ t ≤ l − 1 c_t = MLWE_{q,n}^k(m_t), 0\le t \le l-1 ct=MLWEq,nk(mt),0tl1
    • 计算 c [ j ] = ( π q , n l l ) − 1 ( c 0 [ j ] , ⋯   , c l − 1 [ j ] ) , 0 ≤ j ≤ k c[j]=(\pi_{q,nl}^l)^{-1}(c_0[j],\cdots,c_{l-1}[j]), 0\le j\le k c[j]=(πq,nll)1(c0[j],,cl1[j]),0jk
    • 输出 c = ( c [ 0 ] , ⋯   , c [ k ] ) ∈ R q , n l k + 1 c=(c[0],\cdots,c[k]) \in R_{q,nl}^{k+1} c=(c[0],,c[k])Rq,nlk+1,它加密了 m = ∑ t m t ⋅ β t m=\sum_t m_{t}\cdot \beta_t m=tmtβt

MLWE Key-switch

类似于 [CDKS21] 中的 LWE-to-LWE 算法,我们可以将 MLWE 上的 KS 过程也嵌入到 RLWE 上实现。

给定 a , s ∈ R q , N ≅ R q , n [ X N ] / ( X N k − X n ) a,s \in R_{q,N} \cong R_{q,n}[X_N]/(X_N^k-X_{n}) a,sRq,NRq,n[XN]/(XNkXn),其中 n = N / k n=N/k n=N/k,分别写作 a = ∑ i a ( i ) ⋅ X N i a=\sum_i a_{(i)}\cdot X_N^i a=ia(i)XNi 以及 s = ∑ j s ( j ) ⋅ X N j s=\sum_j s_{(j)}\cdot X_N^j s=js(j)XNj,那么
a ⋅ s = ( ∑ i = 0 k − 1 a ( i ) ⋅ X N i ) ⋅ ( ∑ j = 0 k − 1 s ( j ) ⋅ X N j ) = ∑ t = 0 k − 1 X N t ⋅ ( ∑ i + j = t a ( i ) s ( j ) + X n ⋅ ∑ i + j = k + t a ( i ) s ( j ) ) \begin{aligned} a \cdot s &= \left(\sum_{i=0}^{k-1} a_{(i)}\cdot X_N^i\right) \cdot \left(\sum_{j=0}^{k-1} s_{(j)}\cdot X_N^j\right)\\ &= \sum_{t=0}^{k-1} X_N^t \cdot \left(\sum_{i+j=t} a_{(i)}s_{(j)} + X_{n} \cdot\sum_{i+j=k+t} a_{(i)}s_{(j)}\right) \end{aligned} as=(i=0k1a(i)XNi)(j=0k1s(j)XNj)=t=0k1XNt i+j=ta(i)s(j)+Xni+j=k+ta(i)s(j)
它的常数项是 a ( 0 ) s ( 0 ) + X n ⋅ ∑ i = 1 k − 1 a ( k − i ) s ( i ) a_{(0)}s_{(0)} + X_{n} \cdot \sum_{i=1}^{k-1} a_{(k-i)}s_{(i)} a(0)s(0)+Xni=1k1a(ki)s(i),我们定义 a ∈ R q , N a \in R_{q,N} aRq,N 的扭曲(twist):
a t w , k = ( π q , N k ) − 1 ( a ( 0 ) , X N / k ⋅ a k − 1 , ⋯   , X N / k ⋅ a 1 ) ∈ R q , N a^{tw,k} = (\pi_{q,N}^k)^{-1}(a_{(0)}, X_{N/k} \cdot a_{k-1}, \cdots, X_{N/k} \cdot a_{1}) \in R_{q,N} atw,k=(πq,Nk)1(a(0),XN/kak1,,XN/ka1)Rq,N
定义映射 ϵ q , N k : R q , N → R q , N / k \epsilon_{q,N}^k: R_{q,N} \to R_{q,N/k} ϵq,Nk:Rq,NRq,N/k,它计算 ϵ q , N k ( a ) = π q , N k ( a ) [ 0 ] = a ( 0 ) \epsilon_{q,N}^k(a) = \pi_{q,N}^k(a)[0] = a_{(0)} ϵq,Nk(a)=πq,Nk(a)[0]=a(0),那么就有:
ϵ q , N k ( a t w , k ⋅ s ) = ⟨ π q , N k ( a ) , π q , N k ( s ) ⟩ \epsilon_{q,N}^k(a^{tw,k} \cdot s) = \langle \pi_{q,N}^k(a), \pi_{q,N}^k(s) \rangle ϵq,Nk(atw,ks)=πq,Nk(a),πq,Nk(s)⟩
也就是说,想要计算 ⟨ π q , N k ( a ) , π q , N k ( s ) ⟩ \langle \pi_{q,N}^k(a), \pi_{q,N}^k(s) \rangle πq,Nk(a),πq,Nk(s)⟩ 内积,可以计算 a t w , k ⋅ s a^{tw,k} \cdot s atw,ks 多项式乘积,然后再提取出 R q , N / k R_{q,N/k} Rq,N/k-常数项。我们可以把 M L W E q , n k MLWE_{q,n}^k MLWEq,nk 的线性解密视为 R q , n R_{q,n} Rq,n 上的内积,嵌入到 R L W E q , N RLWE_{q,N} RLWEq,N 上计算多项式乘积,最后提取出 M L W E q , n k MLWE_{q,n}^k MLWEq,nk 作为 KS 结果。对应的嵌入映射是:
E m b e d q , N k : M L W E q , n k → R L W E q , N ( b , a ) ∈ R q , n k + 1 ↦ ( ι q , N k ( b ) , ( π q , N k ( a ) ) t w , k ) ∈ R q , N 2 \begin{aligned} Embed_{q,N}^k: MLWE_{q,n}^k &\to RLWE_{q,N}\\ (b,a) \in R_{q,n}^{k+1} &\mapsto \left(\iota_{q,N}^k(b), (\pi_{q,N}^k(a))^{tw,k}\right) \in R_{q,N}^2 \end{aligned} Embedq,Nk:MLWEq,nk(b,a)Rq,nk+1RLWEq,N(ιq,Nk(b),(πq,Nk(a))tw,k)Rq,N2
前者的相位是 m ∈ R q , n m \in R_{q,n} mRq,n,后者的相位是 M ∈ R q , N M \in R_{q,N} MRq,N,满足 ϵ q , N k ( M ) = M ( 0 ) = m \epsilon_{q,N}^k(M)=M_{(0)}=m ϵq,Nk(M)=M(0)=m,其余的 M ( j ) , 1 ≤ j ≤ k − 1 M_{(j)},1\le j\le k-1 M(j),1jk1 是随机数。做完 RLWE KS 之后,需要提取出 m m m 对应的 MLWE 密文。对应的提取映射是:
E x t r a c t q , N k : R L W E q , N → M L W E q , n k ( b , a ) ∈ R q , N 2 ↦ ( ϵ q , N k ( b ) , ( π q , N k ( a ) ) ( t w , k ) − 1 ) ∈ R q , n k + 1 \begin{aligned} Extract_{q,N}^k: RLWE_{q,N} &\to MLWE_{q,n}^k\\ (b,a) \in R_{q,N}^2 &\mapsto \left( \epsilon_{q,N}^k(b), (\pi_{q,N}^k(a))^{(tw,k)^{-1}} \right) \in R_{q,n}^{k+1} \end{aligned} Extractq,Nk:RLWEq,N(b,a)Rq,N2MLWEq,nk(ϵq,Nk(b),(πq,Nk(a))(tw,k)1)Rq,nk+1
那么 MLWE-to-MLWE 过程就是:

在这里插入图片描述

ModPack

利用上述的 C o m b i n e n , l k Combine_{n,l}^k Combinen,lk 以及 E m b e d q , N k Embed_{q,N}^k Embedq,Nk E x t r a c t q , N k Extract_{q,N}^k Extractq,Nk,可以实现 Module-packing 算法,记为 M o d P a c k q , N K , k , k ′ ModPack_{q,N}^{K,k,k'} ModPackq,NK,k,k。它将若干个 M L W E q , N / k K MLWE_{q,N/k}^K MLWEq,N/kK 打包到单个 M L W E q , N / k ′ k ′ MLWE_{q,N/k'}^{k'} MLWEq,N/kk,其中 1 ≤ k ′ < k ≤ N 1 \le k' < k \le N 1k<kN 都是二的幂次,并且 k ′ ∣ K k' \mid K kK 是某整数。

由于 M L W E q , N / k K MLWE_{q,N/k}^K MLWEq,N/kK 加密了 N / k N/k N/k 个数据, M L W E q , N / k ′ k ′ MLWE_{q,N/k'}^{k'} MLWEq,N/kk 加密了 N / k ′ N/k' N/k 个数据,因此我们可以先将 k / k ′ k/k' k/k M L W E q , N / k K ( m j ) MLWE_{q,N/k}^K(m_j) MLWEq,N/kK(mj) 密文,利用 Module-switch 合并为单个 C = M L W E q , N / k ′ K ( ( π q , N / k ′ k / k ′ ) − 1 ( m 0 , ⋯   , m k / k ′ − 1 ) ) C = MLWE_{q,N/k'}^K \left((\pi_{q,N/k'}^{k/k'})^{-1}(m_0, \cdots, m_{k/k'-1})\right) C=MLWEq,N/kK((πq,N/kk/k)1(m0,,mk/k1)) 密文,它的线性解密是:
C [ 0 ] + ∑ i = 1 K C [ i ] ⋅ s [ i ] = ( C [ 0 ] + ∑ i = 1 k ′ C [ i ] ⋅ s [ i ] ) + ∑ j = 1 K / k ′ − 1 ( 0 + ∑ i = 1 k ′ C [ k ′ j + i ] ⋅ s [ k ′ j + i ] ) \begin{aligned} C[0]+\sum_{i=1}^{K} C[i]\cdot s[i] = \left(C[0]+\sum_{i=1}^{k'} C[i]\cdot s[i]\right) + \sum_{j=1}^{K/k'-1}\left(0+\sum_{i=1}^{k'} C[k'j+i]\cdot s[k'j+i]\right) \end{aligned} C[0]+i=1KC[i]s[i]= C[0]+i=1kC[i]s[i] +j=1K/k1 0+i=1kC[kj+i]s[kj+i]
我们将 C C C 视为 K / k ′ K/k' K/k M L W E q , N / k ′ k ′ MLWE_{q,N/k'}^{k'} MLWEq,N/kk 密文的加和,然后利用 MLWE-to-MLWE 将它们分别切换到 M L W E q , N / k ′ k ′ MLWE_{q,N/k'}^{k'} MLWEq,N/kk 密文。这里可以使用 hoisting 技术优化。

在这里插入图片描述

使用 [GHS12] 版本的 RLWE KS 算法,那么 ModPack 算法为:

在这里插入图片描述

算法 M o d P a c k q , N K , k , k ′ ModPack_{q,N}^{K,k,k'} ModPackq,NK,k,k 的 step 6 中,首先执行 K / k ′ K/k' K/k 次 ModUp(从 q q q 扩展到 q p qp qp),然后执行 2 K / k ′ 2K/k' 2K/k 次阿达玛乘法(线性解密),接着先计算它们的加和,最后执行 1 1 1 次 ModDown(从 q p qp qp 切换到 q q q)。其中的 ModUp 和 ModDown 需要执行 RNSConv 以及 NTT,占据主要开销。KSK 包含 K / k ′ K/k' K/k 个 swk,每个都是 R q p , N 2 R_{qp,N}^2 Rqp,N2 中元素,总大小是 2 N log ⁡ ( q p ) 2N\log(qp) 2Nlog(qp)(如果使用 Hybrid KS 呢?)

BaseHERMES

给定 N N N 个维度 K ≥ N E n c K \ge N_{Enc} KNEnc 模数 Q E n c Q_{Enc} QEnc 的 LWE 密文,将它打包成单个维度 N ≥ N K S N \ge N_{KS} NNKS 模数 Q E n c Q_{Enc} QEnc 的 RLWE 密文。[BCK+23] 插入 t t t 层 MLWE 中间密文,对应的参数 κ = { N = k 0 > k 1 > ⋯ > k t > 1 = k t + 1 } \kappa=\{N=k_0 >k_1 > \cdots > k_t > 1=k_{t+1}\} κ={N=k0>k1>>kt>1=kt+1},算法 B a s e H E R M E S N K , κ BaseHERMES_{N}^{K,\kappa} BaseHERMESNK,κ 的计算流程是:

在这里插入图片描述

其中的 step i i i 都是将 k i − 1 k_{i-1} ki1 M L W E Q , N / k i − 1 k i − 1 MLWE_{Q,N/k_{i-1}}^{k_{i-1}} MLWEQ,N/ki1ki1 密文分成 k i k_i ki 组,并行执行它们的 ModPack 得到 k i k_i ki M L W E Q , N / k i k i MLWE_{Q,N/k_{i}}^{k_{i}} MLWEQ,N/kiki 密文。算法是:

在这里插入图片描述

计算复杂度和密钥规模是:

在这里插入图片描述

对于 t = 1 t=1 t=1 的情况,为了尽可能减小 KSK 规模,最优的选取是 κ = { N } \kappa=\{\sqrt N\} κ={N },此时只需要 2 N 2\sqrt N 2N 的存储开销,计算复杂度略微增长。对于一般的 t ≥ 2 t \ge 2 t2,设置等比数列 k i = K 1 − i / ( t + 1 ) k_i = K^{1-i/(t+1)} ki=K1i/(t+1),那么存储开销是 ( t + 1 ) ⋅ K 1 / ( t + 1 ) (t+1) \cdot K^{1/(t+1)} (t+1)K1/(t+1),计算开销 ≤ 3 K + 1 \le 3K+1 3K+1 也不会变得很大。

为了实现 N ≥ N B T S N\ge N_{BTS} NNBTS 的环打包,可以将 LWE 密文分成 N B T S / N K S N_{BTS}/N_{KS} NBTS/NKS 组,每一组都并行执行 BaseHERMES 获得维度 N K S N_{KS} NKS 的 RLWE 密文,最后再 Ring-switch 合成单个维度 N B T S N_{BTS} NBTS 的 RLWE 密文。最后,执行 HalfBTS 提升模数,完成打包运算。

在这里插入图片描述

Implementation

[BCK+23] 在 HEaaN 实现了 HERMES 环打包算法。使用 t = 1 t=1 t=1 时效率依旧很高,并且此时的 KSK 就足够小了,BTS 密钥占据了主要的存储开销(667 MB)

在这里插入图片描述

它和 Pegasus 的对比:

在这里插入图片描述

吞吐率提高了 27-41 倍,计算延迟减小了 1.7-5.1 倍。

HHE

利用 HERMES 可以直接使用 LWE 去加密浮点数,不需要像 RtF Framework 那样使用 BGV/BFV 作为 SE 解密的桥梁。利用 [CDK+21] 的 (M)LWE-based SE,使用 XOF 和 seed 生成 a i ∈ Z q K a_i \in \mathbb Z_q^{K} aiZqK,细粒度地加密 b i = ⟨ a i , s ⟩ + m i ∈ Z q b_i=\langle a_i,s\rangle+m_i \in \mathbb Z_q bi=ai,s+miZq,并使用 ModDown 尽可能降低 q q q 的大小。服务器将它们按照功能需要打包成 RLWE 密文。

在这里插入图片描述

它和 HERA 以及 Rubato 对比,服务端的解密速度快,解密精度更高,但是密文扩展因子略大。但是客户端的加密效率呢?MLWE-based SE 需要大量的 XOF 运算,这应该是很慢的。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1671137.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vue 发布项目

You are not allowed to force push code to a protected branch on this project. 分支做了保护&#xff0c;git中设置允许强制推送

【电路笔记】-无源带通滤波器

无源带通滤波器 文章目录 无源带通滤波器1、概述2、二阶带通滤波器的频率响应3、带通滤波器示例4、总结无源带通滤波器可以通过将低通滤波器与高通滤波器连接在一起制成。 1、概述 无源带通滤波器可用于隔离或滤除特定频带或频率范围内的某些频率。 简单 RC 无源滤波器中的截止…

咸鱼之王游戏攻略:平民怎么起号?

在《咸鱼之王》这款游戏中&#xff0c;即使是平民玩家&#xff0c;也有着许多可以优化的操作&#xff0c;以最大程度地提高收益。本攻略将针对平民玩家的日常操作进行详细解读&#xff0c;包括黑市购买、资源管理等方面的建议&#xff0c;希望对广大玩家有所帮助。 一、黑市购买…

Sublime Text for Mac:强大的文本编辑器

Sublime Text for Mac&#xff0c;一款轻量而强大的文本编辑器&#xff0c;为您的编程和写作工作带来无限可能。它以其简洁的界面和出色的性能&#xff0c;成为Mac用户中备受推崇的编辑器之一。 Sublime Text支持多种编程语言&#xff0c;无论是Python、JavaScript、HTML还是CS…

MoneyPrinter国内版改造

背景&#xff1a; MoneyPrinter 是一个自动生成短视频的开源项目。只需要输入短视频主题&#xff0c;然后就可以生成视频。 在国内环境运行时&#xff0c;框架中使用的youtube、抖音文字转语音等功能无法使用&#xff0c;需要对框架进行国内版改造&#xff0c;使其使用国内网络…

Vue路由开启步骤

1.在控制台输入命令 //控制台下载安装npm add vue-router3.6.5 2.在main.js下导入并注册组件 import Vue from vue import App from ./App.vue//控制台下载安装npm add vue-router3.6.5 //导入 import VueRouter from "vue-router";//注册 Vue.use(VueRouter) con…

巩固学习7

正则表达式 就是用来找到符合模式的字符串&#xff0c;这些模式包括&#xff1a;是什么字符&#xff0c;重复多少次&#xff0c;在什么位置&#xff0c;有哪些额外的约束 找某个字符串 import re text身高:178 体重:168 学号:123456 密码:9527 #在Python中&#xff0c;r前缀用…

【软考高项】四十五、项目管理科学计算之工程经济学

一、资金的时间价值与等值计算的概念 1、资金的时间价值是指不同时间发生的等额资金在价值上的差别。 2、把资金存入银行,经过一段时间后也会产生增值,这就是利息。 例如,在年利率为5.22%条件下&#xff0c;当年的100元与下一年的105.22元是等值的,即100 &#xff08;15.22%&a…

模型 奥卡姆剃刀原则

系列文章 分享 模型&#xff0c;了解更多&#x1f449; 模型_思维模型目录。如无必要&#xff0c;勿增实体。 1 奥卡姆剃刀原则的应用 1.1 奥卡姆剃刀原则在工程设计中的应用 一家制造智能手机的科技公司“移动创新”在设计其最新型号手机时遇到了一个难题&#xff1a;新款手…

基于FPGA的视频矩阵切换方案

一、单个显示设备的系统方案&#xff1a;会议室只有1个显示设备 会议室的信号源有很多&#xff0c;但是显示设备只有1个&#xff0c;这个时候最佳方案是使用切换器。 &#xff08;1&#xff09;切换器&#xff08;控制方式&#xff1a;遥控器、软件、机箱面板、中控&#xff…

Star CCM+衍生零部件的创建

前言 在一个仿真计算项目中&#xff0c;分配零部件至区域、划分网格后。下一步可以先将需要监测的点、面建立出来&#xff0c;方便后续创建报告。Star中需要创建点、面是在衍生零部件下创建。衍生零部件→右键→新建&#xff08;如下图1所示&#xff09;。通过衍生零部件可以创…

网友用摄像头看猫发现...猫竟然在家偷吃这些主食冻干!

随着科学养猫的普及&#xff0c;主食冻干喂养越来越受欢迎&#xff0c;主食冻干喂养对猫的好处很多&#xff0c;它符合猫咪的天性&#xff0c;可以提供全面的营养&#xff0c;保持牙齿和牙龈的健康&#xff0c;还有助于维持健康的消化系统。而且适口性非常的高&#xff01;不在…

电信网关配置管理系统 rewrite.php 文件上传致RCE漏洞复现

0x01 产品简介 中国电信集团有限公司(英文名称“China Telecom”、简称“中国电信”)成立于2000年9月,是中国特大型国有通信企业、上海世博会全球合作伙伴。电信网关配置管理系统是一个用于管理和配置电信网络中网关设备的软件系统。它可以帮助网络管理员实现对网关设备的远…

RT-Thread事件集

文章目录 前言一、RT-Thread事件集的概念二、事件集函数的使用1.创建事件集函数2.事件集发送函数3.事件集接收函数4.事件集删除函数 三、事件集使用例程总结 前言 本篇文章将给大家讲解RT-Thread中事件集的概念&#xff0c;了解什么是事件集及事件集的函数使用方法。 一、RT-…

活字格登录界面设计

1、不使用内部的登录。 2、创建手机页面。 3、新增一列&#xff0c;行数为31行。 4、复制内含登录界面的组件到前几步创建的界面。 5、插入背景。 6、设置账号和密码文本框的单元格样式&#xff08;新建单元格式样&#xff09;&#xff0c;前后景设为无。 效果图&#xff1a;…

点云分割论文阅读01--FusionVision

FusionVision: A Comprehensive Approach of 3D Object Reconstruction and Segmentation from RGB-D Cameras Using YOLO and Fast Segment Anything FusionVision&#xff1a;使用 YOLO 和 Fast Segment Anything 从 RGB-D 相机重建和分割 3D 对象的综合方法 toread&#x…

python跟C++选哪个?

选择使用Python还是C取决于你的具体需求和项目背景。我这里有一套编程入门教程&#xff0c;不仅包含了详细的视频讲解&#xff0c;项目实战。如果你渴望学习编程&#xff0c;不妨点个关注&#xff0c;给个评论222&#xff0c;私信22&#xff0c;我在后台发给你。 在通信工程行业…

2.数据类型与变量(java篇)

目录 数据类型与变量 数据类型 变量 整型变量 长整型变量 短整型变量 字节型变量 浮点型变量 双精度浮点型 单精度浮点型 字符型变量 布尔型变量&#xff08;boolean&#xff09; 类型转换 自动类型转换(隐式) 强制类型转换(显式) 类型提升 字符串类型 数据类…

【机器学习-06】Scikit-Learn机器学习工具包进阶指南:机器学习分类模型实战与数据可视化分析

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…

【数据结构】详解栈且实现

一.栈 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端 称为栈顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈&#xff1a;…