本文主要是介绍Linear Decryption: Rate-1 FHE TLP,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
参考文献:
-
[ILL89] Russell Impagliazzo, Leonid A. Levin, and Michael Luby. Pseudo-random generation from oneway functions (extended abstracts). In 21st Annual ACM Symposium on Theory of Computing, pages 12–24, Seattle, WA, USA, May 15–17, 1989. ACM Press.
-
[RSW96] Rivest R L, Shamir A, Wagner D A. Time-lock puzzles and timed-release crypto[J]. 1996.
-
[DJ01] Damgård I, Jurik M. A generalisation, a simplification and some applications of Paillier’s probabilistic public-key system[C]//Public Key Cryptography: 4th International Workshop on Practice and Theory in Public Key Cryptosystems, PKC 2001 Cheju Island, Korea, February 13–15, 2001 Proceedings 4. Springer Berlin Heidelberg, 2001: 119-136.
-
[Mic19] Daniele Micciancio. From linear functions to fully homomorphic encryption. Technical report,2019. https://bacrypto.github.io/presentations/2018.11.30-Micciancio-FHE.pdf.
-
[BDGM19] Brakerski Z, Döttling N, Garg S, et al. Leveraging linear decryption: Rate-1 fully-homomorphic encryption and time-lock puzzles[C]//Theory of Cryptography Conference. Cham: Springer International Publishing, 2019: 407-437.
-
[MT19] Giulio Malavolta and Sri Aravinda Krishnan Thyagarajan. Homomorphic time-lock puzzles and applications. CRYPTO, 2019.
文章目录
- Linear decrypt-and-multiply
- from LHE to FHE
- Linear Function
- Rate-1 FHE
- 密文收缩的 Regev
- 扩展的 Paillier
- Rate-1 FHE Construction
- FH-TLP
- Time-lock puzzles
- Rate-1 FH-TLP
Linear decrypt-and-multiply
from LHE to FHE
[Mic19] 讨论了如何从弱线性同态(Weak Linear Homomorphic)得到全同态(Full Homomorphic)。
基于 LWE 的线性同态加密方案(Linear Homomorphic Encryption, LHE),不考虑细节,
- 对称加密算法 E s ( m ; ( A , e ) ) : = ( A , A s + e + m ) ( m o d q ) E_s(m;(A,e)) := (A,As+e+m) \pmod q Es(m;(A,e)):=(A,As+e+m)(modq),可以视为 One-time Pad,特别地 ( O , m ) = E s ( m ; ( O , 0 ⃗ ) ) (O,m) = E_s(m;(O,\vec 0)) (O,m)=Es(m;(O,0))
- 对称解密算法 D s ( ( A , b ) ) : = b − A s = m + e ( m o d q ) D_s((A,b)) := b-As = m+e \pmod q Ds((A,b)):=b−As=m+e(modq),这既是 c t = ( A , b ) ct=(A,b) ct=(A,b) 的线性函数,也是 s ′ = ( − s , 1 ) s'=(-s,1) s′=(−s,1) 的线性函数
由于解密是带噪的,因此我们往往对 m m m 做编码;这儿我们先不考虑纠错码。易知,上述的 LHE 满足:
E s ( m 1 ; ( A , e 1 ) ) + E s ( m 1 ; ( A , e 1 ) ) = E s ( m 1 + m 2 ; ( A , e 1 + e 2 ) ) c ⋅ E s ( m ; ( A , e ) ) = c ⋅ E s ( c ⋅ m ; ( c ⋅ A , c ⋅ e ) ) , c ∈ Z q E_s(m_1;(A,e_1))+E_s(m_1;(A,e_1)) = E_s(m_1+m_2;(A,e_1+e_2))\\ c \cdot E_s(m;(A,e)) = c \cdot E_s(c\cdot m;(c\cdot A,c\cdot e)),\,\, c \in \mathbb Z_q Es(m1;(A,e1))+Es(m1;(A,e1))=Es(m1+m2;(A,e1+e2))c⋅Es(m;(A,e))=c⋅Es(c⋅m;(c⋅A,c⋅e)),c∈Zq
由于数乘运算的噪声为 c ⋅ e c \cdot e c⋅e,因此为了解密正确性,标量 c c c 是个有界范围的数。上述的 LHE 满足(弱)线性同态。为了计算任意标量 c c c 的数乘,可以定义 Powerof2 的密文:
E s ′ ( m ) = { E s ( m ) , E s ( 2 m ) , ⋯ , E s ( 2 log q m ) } E'_s(m) = \{E_s(m),E_s(2m),\cdots,E_s(2^{\log q}m)\} Es′(m)={Es(m),Es(2m),⋯,Es(2logqm)}
那么对于任意的常数 c = ∑ i 2 i c i ∈ Z q c=\sum_i 2^ic_i \in \mathbb Z_q c=∑i2ici∈Zq,我们定义运算 c ∗ E ′ ( m ) : = ∑ i c i ⋅ E ( 2 i m ) = E ( c ⋅ m ) c*E'(m) := \sum_i c_i \cdot E(2^i m) = E(c\cdot m) c∗E′(m):=∑ici⋅E(2im)=E(c⋅m),噪声扩张因子仅为 log q \log q logq 而非 q q q。为了维持密文格式,可以这么计算:
E s ′ ( c ⋅ m ) = { c ∗ E ′ ( m ) , ( 2 c ) ∗ E ′ ( m ) , ⋯ , ( 2 log q c ) ∗ E ′ ( m ) } E_s'(c \cdot m) = \{c*E'(m),(2c)*E'(m),\cdots,(2^{\log q}c)*E'(m)\} Es′(c⋅m)={c∗E′(m),(2c)∗E′(m),⋯,(2logqc)∗E′(m)}
任意的弱线性同态的对称加密方案,都可以导出公钥方案:令公钥是一组密文 c t i = E s ( 0 ; ( A i , b i ) ) ct_i = E_s(0;(A_i,b_i)) cti=Es(0;(Ai,bi)),那么加密方案就是一种同态线性运算
∑ i r i ⋅ c t i + ( O , α ⋅ m ) = E s ( m ; ( ∑ i r i A i , ∑ i r i e i ) ) \sum_i r_i \cdot ct_i + (O,\alpha\cdot m) = E_s\left(m;\left(\sum_i r_iA_i,\,\, \sum_i r_ie_i\right)\right) i∑ri⋅cti+(O,α⋅m)=Es(m;(i∑riAi,i∑riei))
因为解密算法是关于私钥的线性函数,因此 LHE 可以使用私钥的密文来同态解密:将 E ′ ( s ′ ) = ( E ′ ( − s ) , E ′ ( 1 ) ) E'(s')=(E'(-s),E'(1)) E′(s′)=(E′(−s),E′(1)) 作为公钥一部分,给定密文 E ( m ) = ( A , b ) E(m)=(A,b) E(m)=(A,b),
E ( m ) ∗ E ′ ( s ′ ) = A ∗ E ′ ( − s ) + b ∗ E ′ ( 1 ) = E ( b − A s ) = E ( m ) E(m) * E'(s') = A*E'(-s) + b*E'(1) = E(b-As) = E(m) E(m)∗E′(s′)=A∗E′(−s)+b∗E′(1)=E(b−As)=E(m)
也就是我们把左操作数视为常数矩阵,右操作数视为 LHE 密文列向量,计算对应的线性函数(同态加法、任意标量的同态数乘)。如果我们以 E ′ ( α ⋅ s ′ ) E'(\alpha \cdot s') E′(α⋅s′) 作为公钥一部分,那么就可以计算出 E ( m ) ∗ E ′ ( α ⋅ s ′ ) = E ( α ⋅ m ) E(m) * E'(\alpha \cdot s') = E(\alpha\cdot m) E(m)∗E′(α⋅s′)=E(α⋅m),这里的 α ∈ Z q \alpha \in \mathbb Z_q α∈Zq 是任意常数。
比如原本应当解密出 ( q + 1 ) / 2 ⋅ m + e ∈ Z q (q+1)/2 \cdot m+e \in \mathbb Z_q (q+1)/2⋅m+e∈Zq,我们选取 2 = ( ( q + 1 ) / 2 ) − 1 ∈ Z q 2=((q+1)/2)^{-1} \in \mathbb Z_q 2=((q+1)/2)−1∈Zq,那么就会解密出 m + 2 e ∈ Z q m+2e \in \mathbb Z_q m+2e∈Zq,这就完成了 MSB 和 LSB 之间的编码转换。即,我们可以将 E ′ ( s ′ ) E'(s') E′(s′) 作为公钥一部分,然后对于任意常数 α \alpha α 可计算同态数乘 E ′ ( α s ′ ) E'(\alpha s') E′(αs′),再用它同态解密 E ′ ( m ) E'(m) E′(m) 得到形如 α m + e \alpha m+e αm+e 的 “带噪的数乘的明文” 的密文。
对 LHE 做同态的 “decrypt and multiply(解密+数乘)”,就可以实现 FHE:我们定义加密算法为 E ′ ′ ( m ) : = E ′ ( m ⋅ s ′ ) E''(m):=E'(m \cdot s') E′′(m):=E′(m⋅s′),明文 m ∈ Z q m \in \mathbb Z_q m∈Zq 是标量,那么
E ′ ′ ( m 1 ) ∗ E ′ ′ ( m 2 ) = { E ( m 1 ⋅ 2 i s ′ ) ∗ E ′ ( m 2 ⋅ s ′ ) } i = { E ( m 1 ⋅ 2 i s ′ ⋅ m 2 ) } i = E ′ ( m 1 m 2 ⋅ s ′ ) = E ′ ′ ( m 1 m 2 ) \begin{aligned} E''(m_1) * E''(m_2) &= \{E(m_1 \cdot 2^is')*E'(m_2 \cdot s')\}_i\\ &= \{E(m_1 \cdot 2^is' \cdot m_2)\}_i\\ &= E'(m_1m_2 \cdot s')\\ &= E''(m_1m_2)\\ \end{aligned} E′′(m1)∗E′′(m2)={E(m1⋅2is′)∗E′(m2⋅s′)}i={E(m1⋅2is′⋅m2)}i=E′(m1m2⋅s′)=E′′(m1m2)
[GSW13] 的矩阵密文和它的近似本征矢,密文 C = ( A , b ) + μ G C=(A,b)+\mu G C=(A,b)+μG 满足 s t C = ( μ s t ) G + e s^tC=(\mu s^t)G+e stC=(μst)G+e(加密的是消息 μ s t \mu s^t μst 的纠错码;在解密时 G G G 用于纠错,乘法时 G − 1 G^{-1} G−1 用于降低范数),其实这就是上述的 E s ′ ′ ( m ) E_s''(m) Es′′(m)(需要循环安全假设),所以它的同态乘法不会导致如 BGV/BFV 那样的密文规模扩张。而 [AP14] 中的 GSW 快速自举算法,用 GSW 做出累加器来实现 LWE 的自举,其实就是 L W E s ( m ; e 1 ) ∗ E s ′ ′ ( s ) = L W E s ( m ; e 2 ) LWE_s(m;e_1)*E_s''(s)=LWE_s(m;e_2) LWEs(m;e1)∗Es′′(s)=LWEs(m;e2)(也需要循环安全),使得 ∥ e 1 ∥ < ∥ e 2 ∥ \|e_1\|<\|e_2\| ∥e1∥<∥e2∥ 即可成功。之后的 FHEW 中的 Multiplication via addition,基于布尔输入在 Z 4 \mathbb Z_4 Z4 中的特性 m 1 + m 2 = 2 ⟺ m 1 ⋅ m 2 = 1 m_1+m_2=2 \iff m_1 \cdot m_2=1 m1+m2=2⟺m1⋅m2=1 (全加器的 s = m 1 ⊕ m 2 s=m_1 \oplus m_2 s=m1⊕m2 和 c = m 1 ⋅ m 2 c=m_1 \cdot m_2 c=m1⋅m2),使用加法取代乘法 m 1 ⋅ m 2 = m 1 + m 2 2 ∈ Z 2 m_1\cdot m_2 = \frac{m_1+m_2}{2} \in \mathbb Z_2 m1⋅m2=2m1+m2∈Z2,最后自举恢复到 Z 4 \mathbb Z_4 Z4 上。
Linear Function
利用上述的 Linear decrypt-and-multiply,我们可以实现一个线性函数加密。
令 g = ( 1 , 2 , 4 , ⋯ , 2 k ) g=(1,2,4,\cdots,2^{k}) g=(1,2,4,⋯,2k) 是 Gadget 行矢, k k k 是明文比特长度,对应的 g − 1 ( ⋅ ) g^{-1}(\cdot) g−1(⋅) 是二进制分解(列矢)。将 g g g 排列为 Gadget 矩阵 G ∈ Z q l × l k G \in \mathbb Z_q^{l \times lk} G∈Zql×lk,那么 m ⃗ G = ( m 1 g , m 2 g , ⋯ , m l g ) \vec m G=(m_1g,m_2g,\cdots,m_lg) mG=(m1g,m2g,⋯,mlg) 就是各个分量 powerof2 组成的行矢,容易对应构造 G − 1 ( ⋅ ) G^{-1}(\cdot) G−1(⋅) 是各个分量的二进制分解组成的列矢。于是 m ⃗ G ⋅ G − 1 ( f ⃗ ) = m ⃗ ⋅ f ⃗ \vec mG \cdot G^{-1}(\vec f) = \vec m \cdot \vec f mG⋅G−1(f)=m⋅f 计算了 l l l 变元线性函数 f ( m ) f(m) f(m)
我们令 Δ ∈ Z \Delta \in \mathbb Z Δ∈Z 是纠错能力,密文模数 q ≥ Δ ( 2 k ) 2 q \ge \Delta (2^k)^2 q≥Δ(2k)2(使得 Δ m i 2 k < q \Delta m_i 2^k < q Δmi2k<q 不溢出), ( A , B ) ∈ Z q n × m × Z q n × l k (A,B) \in \mathbb Z_q^{n \times m} \times \mathbb Z_q^{n \times lk} (A,B)∈Zqn×m×Zqn×lk 是公钥, S = [ − S ′ , I ] T ∈ Z q ( m + l k ) × l k S=[-S',I]^T \in \mathbb Z_q^{(m+lk) \times lk} S=[−S′,I]T∈Zq(m+lk)×lk,易知 ( A , B ) ⋅ S = B − A S ′ = E ∈ Z q n × l k (A,B) \cdot S=B-AS'=E \in \mathbb Z_q^{n \times lk} (A,B)⋅S=B−AS′=E∈Zqn×lk,
-
我们加密行矢 m ⃗ G ∈ Z q l k \vec mG \in \mathbb Z_q^{lk} mG∈Zqlk,随机数 r ∈ Z q n r \in \mathbb Z_q^n r∈Zqn,得到密文 C = ( r A , r B + Δ m ⃗ G + e ) ∈ Z q m + l k C=(rA,rB+\Delta\vec mG+e) \in \mathbb Z_q^{m+lk} C=(rA,rB+ΔmG+e)∈Zqm+lk(行矢)
-
使用函数秘钥 S G − 1 ( f ⃗ ) ∈ Z q m + l k SG^{-1}(\vec f) \in \mathbb Z_q^{m+lk} SG−1(f)∈Zqm+lk(列矢),线性解密得到
C S ⋅ G − 1 ( f ⃗ ) = ( Δ m ⃗ G + e + r E ) ⋅ G − 1 ( f ⃗ ) = Δ f ( m ) + ( e + r E ) ⋅ G − 1 ( f ⃗ ) ∈ Z q \begin{aligned} CS \cdot G^{-1}(\vec f) &= (\Delta\vec mG+e+rE) \cdot G^{-1}(\vec f)\\ &= \Delta f(m)+(e+rE)\cdot G^{-1}(\vec f) \in \mathbb Z_q \end{aligned} CS⋅G−1(f)=(ΔmG+e+rE)⋅G−1(f)=Δf(m)+(e+rE)⋅G−1(f)∈Zq -
纠错后提取出函数值 f ( m ) = m ⃗ ⋅ f ⃗ ∈ [ 0 , 2 k ] f(m)=\vec m \cdot \vec f \in [0,2^k] f(m)=m⋅f∈[0,2k]
Rate-1 FHE
正如 [Mic19] 所描述的,许多基于 LWE/SIS 的加密方案,其解密函数是关于私钥的线性函数,它满足
L α , c ( s ) = α ⋅ m + e , ∣ e ∣ < B L_{\alpha,c}(s) = \alpha \cdot m+e, |e|<B Lα,c(s)=α⋅m+e,∣e∣<B
其中的 α \alpha α 并非被协议固定,而是可以任意选取的。这个计算过程叫做 “linear decrypt-and-multiply”,它可以在 LHE 下同态计算。
我们定义 Linear Decrypt-and-Multiply FHE,
我们可以利用 L α , c L_{\alpha,c} Lα,c 线性函数,对于不同的密文 c i c_i ci 选取不同的标量 α i \alpha_i αi,将多个 FHE 密文(明文空间 { 0 , 1 } \{0,1\} {0,1})打包到单个 LHE 密文(明文空间 Z q \mathbb Z_q Zq)中:
L ∗ ( s ) : = ∑ i = 1 l L 2 i + 1 , c i ( s ) = ∑ i = 1 l 2 t + i m i + ∑ i = 1 l e i L^*(s) := \sum_{i=1}^l L_{2^{i+1},c_i}(s) = \sum_{i=1}^l 2^{t+i}m_i + \sum_{i=1}^l e_i L∗(s):=i=1∑lL2i+1,ci(s)=i=1∑l2t+imi+i=1∑lei
其中 e e e 是 l B lB lB-bounded 的噪声项,只要满足 2 t > ∣ e ∣ 2^t>|e| 2t>∣e∣ 则噪声不干扰消息 m i m_i mi 所占据的高位比特。由于 LHE 明文空间是 Z q \mathbb Z_q Zq,噪声占据了低位的 log ( l B ) \log(lB) log(lB) 比特,我们设置参数 ϵ > 0 \epsilon>0 ϵ>0 使得模数 q ≈ ( l B ) 1 / ϵ q\approx (lB)^{1/\epsilon} q≈(lB)1/ϵ,那么消息 m i m_i mi 的空间占比至多为
log ( q ) − log ( l B ) log ( q ) ≈ 1 − ϵ \dfrac{\log(q) - \log(lB)}{\log(q)} \approx 1-\epsilon log(q)log(q)−log(lB)≈1−ϵ
我们定义 FHE 方案的码率(Rate),
只要 LHE 本身是 Rate-1 的,那么将 l l l 个 FHE 密文的消息编码到单个 LHE 密文中,这也是 Rate-1 的。在需要进行同态计算时,类似自举,将 LHE 转化回 FHE 即可;而计算结束后,重新把 FHE 密文打包到 LHE 密文中,以降低存储开销。
上述的消息打包方案可以写作 ( 2 t + 1 , ⋯ , 2 t + l ) ⋅ ( m 1 , ⋯ , m l ) (2^{t+1},\cdots,2^{t+l}) \cdot (m_1,\cdots,m_l) (2t+1,⋯,2t+l)⋅(m1,⋯,ml),更一般的编码形式为 T ⋅ m , T ∈ Z q k × l T \cdot m,\,\, T \in \mathbb Z_q^{k \times l} T⋅m,T∈Zqk×l,它支持从 T m + e Tm+e Tm+e 中纠错解码出消息 m ⃗ \vec m m。对于 Regev 方案,编码矩阵为 T = q 2 I T=\frac{q}{2}I T=2qI。
密文收缩的 Regev
[BDGM19] 通过对 Regev-like 方案的密文做 “收缩(记为 Shrink,与 Compress 做区分)”,从而得到 Rate-1 LHE。
除了原始 Regev 方案的 ( K e y G e n , E n c , D e c , E v a l ) (KeyGen, Enc, Dec, Eval) (KeyGen,Enc,Dec,Eval),我们额外添加两个功能:
- c ˉ ← S h r i n k ( p k , c ) \bar c \leftarrow Shrink(pk,c) cˉ←Shrink(pk,c):将 LHE 密文收缩为一个 shrunk ciphertext
- m ← S h r i n k D e c ( s k , c ˉ ) m \leftarrow ShrinkDec(sk,\bar c) m←ShrinkDec(sk,cˉ):对 shrunk ciphertext 解密
[BDGM19] 将 LHE 的解密函数中的纠错码解码(舍入、取模)分离出来,使得 D e c ( ⋅ ) Dec(\cdot) Dec(⋅) 仅仅是一个线性函数。令编码矩阵 T ∈ Z q k × l T \in \mathbb Z_q^{k \times l} T∈Zqk×l 指定了消息 m ∈ { 0 , 1 } l m \in \{0,1\}^l m∈{0,1}l 如何编码到空间 Z q k \mathbb Z_q^k Zqk 中,
假设私钥 S ∈ Z q k × n S \in \mathbb Z_q^{k \times n} S∈Zqk×n,密文形如 ( c 1 , c 2 ) (c_1,c_2) (c1,c2),解密算法写作
D e c S ( c 1 , c 2 ) = F ( c 2 ) − S ⋅ H ( c 1 ) Dec_S(c_1,c_2) = F(c_2) - S \cdot H(c_1) DecS(c1,c2)=F(c2)−S⋅H(c1)
其中 F , H F,H F,H 是公开函数,于是解密函数就是关于 S S S 的线性函数,常数是 F ( c 2 ) ∈ Z q k , H ( c 1 ) ∈ Z q n F(c_2) \in \mathbb Z_q^k,H(c_1) \in \mathbb Z_q^n F(c2)∈Zqk,H(c1)∈Zqn
假设噪声规模为 B B B,编码矩阵为 T = q 2 I , k = l T=\frac{q}{2}I, k=l T=2qI,k=l,那么危险区是 [ q / 4 − B , q / 4 + B ] [q/4-B,q/4+B] [q/4−B,q/4+B] 以及 [ − q / 4 − B , − q / 4 + B ] [-q/4-B, -q/4+B] [−q/4−B,−q/4+B]。只要 q m / 2 qm/2 qm/2 不落在危险区内,解码时就不会出现错误。
密文收缩算法如下:
-
S h r i n k ( p k , ( c 1 , c 2 ) ) Shrink(pk,(c_1,c_2)) Shrink(pk,(c1,c2)):计算 F ( c 2 ) F(c_2) F(c2) 得到 ( y 1 , ⋯ , y l ) ∈ Z q l (y_1,\cdots,y_l) \in \mathbb Z_q^l (y1,⋯,yl)∈Zql,定义区域
U = ⋃ i = 1 l [ q / 4 − B − y i , q / 4 + B − y i ] ∪ [ − q / 4 − B − y i , − q / 4 + B − y i ] U = \bigcup_{i=1}^l [q/4-B-y_i,q/4+B-y_i] \cup [-q/4-B-y_i,-q/4+B-y_i] U=i=1⋃l[q/4−B−yi,q/4+B−yi]∪[−q/4−B−yi,−q/4+B−yi]我们任意选取 r ∈ Z q − U r \in \mathbb Z_q - U r∈Zq−U(只要 q q q 足够大,总会存在),计算 w i = ⌈ y i + r ⌋ 2 w_i = \lceil y_i+r \rfloor_2 wi=⌈yi+r⌋2,输出收缩的密文 c ˉ = ( r , c 1 , w 1 , ⋯ , w l ) \bar c = (r,c_1,w_1,\cdots,w_l) cˉ=(r,c1,w1,⋯,wl)
-
S h r i n k D e c ( S , c ˉ ) ShrinkDec(S,\bar c) ShrinkDec(S,cˉ):计算 S ⋅ H ( c 1 ) S \cdot H(c_1) S⋅H(c1) 得到 ( v 1 , ⋯ , v l ) ∈ Z q l (v_1,\cdots,v_l) \in \mathbb Z_q^l (v1,⋯,vl)∈Zql,然后计算 m i = w i − ⌈ v i + r ⌋ 2 ( m o d 2 ) m_i = w_i-\lceil v_i+r \rfloor_2 \pmod 2 mi=wi−⌈vi+r⌋2(mod2),输出消息 m = ( m 1 . ⋯ , m l ) m=(m_1.\cdots,m_l) m=(m1.⋯,ml)
因为 r ∉ U r \not\in U r∈U,因此 ∀ y i , y i + r ∉ [ q / 4 − B , q / 4 + B ] ∪ [ − q / 4 − B , − q / 4 + B ] \forall y_i, y_i+r \not\in [q/4-B,q/4+B] \cup [-q/4-B,-q/4+B] ∀yi,yi+r∈[q/4−B,q/4+B]∪[−q/4−B,−q/4+B]。根据解密函数等式 y i − v i = q m i / 2 + e i y_i-v_i = qm_i/2+e_i yi−vi=qmi/2+ei,得到
w i = ⌈ y i + r ⌋ 2 = ⌈ y i + r − e i ⌋ 2 = ⌈ q m i / 2 + v i + r ⌋ 2 = ⌈ v i + r ⌋ 2 + m i ( m o d 2 ) w_i=\lceil y_i+r \rfloor_2 = \lceil y_i+r-e_i \rfloor_2 = \lceil qm_i/2+v_i+r \rfloor_2 = \lceil v_i+r \rfloor_2+m_i \pmod 2 wi=⌈yi+r⌋2=⌈yi+r−ei⌋2=⌈qmi/2+vi+r⌋2=⌈vi+r⌋2+mi(mod2)
因为共有 l l l 个危险区 [ q / 4 − B − y i , q / 4 + B − y i ] ∪ [ − q / 4 − B − y i , − q / 4 + B − y i ] [q/4-B-y_i,q/4+B-y_i] \cup [-q/4-B-y_i,-q/4+B-y_i] [q/4−B−yi,q/4+B−yi]∪[−q/4−B−yi,−q/4+B−yi],每个危险区长度为 4 B 4B 4B,因此只要模数 q > 4 l B q>4lB q>4lB,就可以找到 r ∉ U r \not\in U r∈U。上述密文收缩过程,把密文分量 c 2 c_2 c2 压缩到了 log q + l \log q + l logq+l 比特( r r r 和 w i w_i wi),而消息长度为 l l l 比特。接下来,我们让多个 LHE 密文共用分量 c 1 c_1 c1,于是均摊之后将得到 rate-1 的 LHE 方案。
令 k = log q k=\log q k=logq,设 g = ( 1 , 2 , ⋯ , 2 k ) g=(1,2,\cdots,2^k) g=(1,2,⋯,2k) 是 Gadget 行矢,那么 y = g x ∈ Z q y=gx \in \mathbb Z_q y=gx∈Zq 就是二进制合成,而对应的 g − 1 ( y ) g^{-1}(y) g−1(y) 就是二进制分解。我们记 G i ∈ Z q l × k G_i \in \mathbb Z_q^{l \times k} Gi∈Zql×k 是除了第 i i i 行是 g g g 其他的位置都是零的矩阵。
由于 Regev 方案仅仅是加法同态的,为了支持任意标量的数乘,使用 g , g − 1 g,g^{-1} g,g−1 将消息 m i m_i mi 扩展为向量。我们定义 Packed Regev Encryption 线性同态加密方案,
只要 m > ( n + l ) log q + w ( log λ ) m>(n+l)\log q+w(\log \lambda) m>(n+l)logq+w(logλ),那么根据 Leftover-Hash Lamma [ILL89] 可知密文 ( C 1 , C 2 ) (C_1,C_2) (C1,C2) 统计接近均匀分布。经过 E v a l Eval Eval 后,噪声为 e = E ⋅ ∑ i R i ⋅ g − 1 ( f i ) e=E \cdot \sum_i R_i \cdot g^{-1}(f_i) e=E⋅∑iRi⋅g−1(fi),规模 ∥ e ∥ ∞ ≤ t k m B \|e\|_\infty \le tkmB ∥e∥∞≤tkmB。因此我们选取 q ≈ 4 l t k m B q \approx 4ltkmB q≈4ltkmB,使得存在 r r r 来收缩密文得到 ( r , c 1 , w 1 , ⋯ , w l ) (r,c_1,w_1,\cdots,w_l) (r,c1,w1,⋯,wl),密文规模为 ( n + 1 ) log q + l (n+1)\log q+l (n+1)logq+l,码率为
ρ = l ( n + 1 ) log q + l ≥ 1 − ( n + 1 ) log q l \rho = \dfrac{l}{(n+1)\log q+l} \ge 1 - \dfrac{(n+1)\log q}{l} ρ=(n+1)logq+ll≥1−l(n+1)logq
对于 q = p o l y ( λ ) q=poly(\lambda) q=poly(λ),可界定 log q ≤ ( log λ ) 2 \log q \le (\log \lambda)^2 logq≤(logλ)2,选取充分大的 l ≥ n λ ( log λ ) 2 l \ge n\lambda(\log \lambda)^2 l≥nλ(logλ)2 可以使得 ρ ≥ 1 − 1 / λ \rho \ge 1-1/\lambda ρ≥1−1/λ。这就得到了 Rate-1 LHE。
扩展的 Paillier
[DJ01] 扩展了 Paillier 算法,将群 Z n 2 ∗ \mathbb Z_{n^2}^* Zn2∗ 推广到了 Z n s + 1 ∗ , ∀ s ≥ 1 \mathbb Z_{n^{s+1}}^*, \forall s\ge 1 Zns+1∗,∀s≥1,使得码率接近于 1 1 1。而 Paillier 本身是一个 LHE,这是另一种 Rate-1 LHE,好处是计算无噪声,但是安全性基于数论假设而非格上困难问题。
令 p , q p,q p,q 是安全素数, n = p q n=pq n=pq 是个 RSA 模数。对于 ∀ s < p , q \forall s < p,q ∀s<p,q,可以证明乘法群 Z n s + 1 ∗ ≅ G × H \mathbb Z_{n^{s+1}}^* \cong G \times H Zns+1∗≅G×H,其中 G G G 是 n s n^s ns 阶循环群,且 H ≅ Z n ∗ H \cong \mathbb Z_n^* H≅Zn∗。可以证明在 Z n s + 1 ∗ \mathbb Z_{n^{s+1}}^* Zns+1∗ 中有 o r d ( n + 1 ) = n s ord(n+1)=n^s ord(n+1)=ns,于是 G ˉ : = Z n s + 1 ∗ / H = ⟨ ( n + 1 ) H ⟩ \bar G := \mathbb Z_{n^{s+1}}^*/H = \langle (n+1)H \rangle Gˉ:=Zns+1∗/H=⟨(n+1)H⟩ 是循环群,陪集 ( n + 1 ) i H ⊆ Z n s + 1 ∗ (n+1)^iH \subseteq \mathbb Z_{n^{s+1}}^* (n+1)iH⊆Zns+1∗ 可以用自然数编号。
循环群 G ˉ \bar G Gˉ 上的 DL 问题是简单的。定义函数 L ( b ) = ( b − 1 ) / n L(b)=(b-1)/n L(b)=(b−1)/n(这儿就是整数除法,并非求逆元),那么
L ( ( n + 1 ) i ( m o d n s + 1 ) ) = ( i 1 ) + ( i 2 ) n + ⋯ + ( i s ) n s − 1 ( m o d n s ) L((n+1)^i \pmod{n^{s+1}}) = {i \choose 1}+{i \choose 2}n +\cdots+ {i \choose s}n^{s-1} \pmod{n^s} L((n+1)i(modns+1))=(1i)+(2i)n+⋯+(si)ns−1(modns)
为了提取出 ( n + 1 ) i ( m o d n s + 1 ) (n+1)^i \pmod{n^{s+1}} (n+1)i(modns+1) 的指数 i i i,我们依次计算 i j : = i ( m o d n j + 1 ) i_j:=i \pmod{n^{j+1}} ij:=i(modnj+1),易知
i 1 = L ( ( n + 1 ) i ( m o d n 2 ) ) = i ( m o d n ) i_1 =L((n+1)^i \pmod{n^{2}}) = i \pmod n i1=L((n+1)i(modn2))=i(modn)
假设已知 i j − 1 i_{j-1} ij−1,我们计算 i j = i j − 1 + k ⋅ n j − 1 i_j = i_{j-1}+k \cdot n^{j-1} ij=ij−1+k⋅nj−1,
L ( ( n + 1 ) i ( m o d n j + 1 ) ) = ( i j 1 ) + ( i j 2 ) n + ⋯ + ( i j j ) n j − 1 ( m o d n j ) = ( i j − 1 + k ⋅ n j − 1 ) + ( i j − 1 2 ) n + ⋯ + ( i j − 1 j ) n j − 1 ( m o d n j ) \begin{aligned} L((n+1)^{i} \pmod{n^{j+1}}) &= {i_j \choose 1}+{i_j \choose 2}n +\cdots+ {i_j \choose j}n^{j-1} \pmod{n^j}\\ &= (i_{j-1}+k \cdot n^{j-1}) + {i_{j-1} \choose 2}n +\cdots+ {i_{j-1} \choose j}n^{j-1} \pmod{n^j} \end{aligned} L((n+1)i(modnj+1))=(1ij)+(2ij)n+⋯+(jij)nj−1(modnj)=(ij−1+k⋅nj−1)+(2ij−1)n+⋯+(jij−1)nj−1(modnj)
于是重写为迭代公式:
i j = i j − 1 + k ⋅ n j − 1 = L ( ( n + 1 ) i ( m o d n j + 1 ) ) − ( i j − 1 2 ) n − ⋯ − ( i j − 1 j ) n j − 1 ( m o d n j ) \begin{aligned} i_j &= i_{j-1}+k \cdot n^{j-1}\\ &= L((n+1)^{i} \pmod{n^{j+1}}) - {i_{j-1} \choose 2}n -\cdots- {i_{j-1} \choose j}n^{j-1} \pmod{n^j} \end{aligned} ij=ij−1+k⋅nj−1=L((n+1)i(modnj+1))−(2ij−1)n−⋯−(jij−1)nj−1(modnj)
从 i 1 i_1 i1 开始,迭代到 i s i_s is 结束,输出指数 i = i s ∈ Z n s i=i_s \in \mathbb Z_{n^s} i=is∈Zns
[DJ01] 给出的加密算法如下:
消息空间 Z n s \mathbb Z_{n^s} Zns,密文空间 Z n s + 1 ∗ \mathbb Z_{n^{s+1}}^* Zns+1∗,因此码率为
ρ = log ( n s ) log ( n s + 1 ) \rho = \dfrac{\log(n^{s})}{\log(n^{s+1})} ρ=log(ns+1)log(ns)
当选取足够大的 s s s,就得到了 Rate-1 LHE。我们使用 T = ( 2 log B , 2 log B + 1 , ⋯ , 2 ⌈ s log n ⌉ ) T=(2^{\log B},2^{\log B+1},\cdots,2^{\lceil s\log n\rceil}) T=(2logB,2logB+1,⋯,2⌈slogn⌉) 作为编码矩阵,抵御 B B B-bounded 的噪声。
Rate-1 FHE Construction
现在我们给出 Rate-1 FHE 的构造。除了原始 FHE 方案的 ( K e y G e n , E n c , D e c , E v a l ) (KeyGen, Enc, Dec, Eval) (KeyGen,Enc,Dec,Eval),我们额外添加两个功能:
- c ∗ ← C o m p r e s s ( p k , c 1 , ⋯ , c l ) c^* \leftarrow Compress(pk,c_1,\cdots,c_l) c∗←Compress(pk,c1,⋯,cl):将多个FHE 密文压缩为一个 compressed ciphertext
- ( m 1 , ⋯ , m l ) ← C o m p r e s s D e c ( s k , c ∗ ) (m_1,\cdots,m_l) \leftarrow CompressDec(sk,c^*) (m1,⋯,ml)←CompressDec(sk,c∗):对 compressed ciphertext 解密得到多个消息
基于 FHE 以及 Rate-1 LHE,我们构造 Rate-1 FHE:
FH-TLP
Time-lock puzzles
时间锁谜题(Time-lock puzzles)最早在 [RSW96] 中作为一种 “时间依赖的密码” 被提出。谜题是基于困难问题的,并且被设置为无法并行加速,为了得到秘密,人们不得不持续运行求解器。[RSW96] 给出了一种基于 RSA 问题的 TLP,
- Alice 生成一对安全素数 p , q p,q p,q,计算 n = p q n=pq n=pq, ϕ ( n ) = ( p − 1 ) ( q − 1 ) \phi(n)=(p-1)(q-1) ϕ(n)=(p−1)(q−1)
- Alice 生成对称秘钥 K K K,加密消息 M M M 为 C M = E n c K ( M ) C_M=Enc_K(M) CM=EncK(M)
- Alice 随机生成 a ∈ [ n ] a \in [n] a∈[n],加密秘钥 K K K 为 C K = K + a 2 t C_K = K+a^{2^t} CK=K+a2t,其中 t t t 是预设的延迟时间。由于 Alice 持有 ϕ ( n ) \phi(n) ϕ(n),因此 e = 2 t ( m o d ϕ ( n ) ) e=2^t \pmod {\phi(n)} e=2t(modϕ(n)) 是容易计算的。
- Alice 发布 ( C M , C K , n , a , t ) (C_M,C_K,n,a,t) (CM,CK,n,a,t) 作为谜题。由于 Bob 不知道 ϕ ( n ) \phi(n) ϕ(n),因此他只能串行计算一系列的模平方 e 2 , e 4 , ⋯ , e 2 t e^2,e^4,\cdots,e^{2^t} e2,e4,⋯,e2t,花费的时间是 t t t
想要更快的完成 t t t 次模平方,除非 Bob 拥有 IPS 特别高的 CPU,别无他法。
Rate-1 FH-TLP
同态的时间锁谜题,他可以对加密在多个时间锁谜题中的消息做同态计算,得到一个新的时间锁谜题,而无需爆破每一个谜题。定义如下:
在 [MT19] 中提出了一种线性同态的时间锁谜题:公钥 ( N = p q , g ∈ Z N ∗ , h = g 2 T ) (N=pq, g \in \mathbb Z_N^*, h=g^{2^T}) (N=pq,g∈ZN∗,h=g2T),秘密 s ∈ Z N s \in \mathbb Z_N s∈ZN,谜题为 ( g r ( m o d N ) , h r N ( N + 1 ) s ( m o d N 2 ) ) \left(g^r \pmod N, h^{rN}(N+1)^s \pmod{N^2}\right) (gr(modN),hrN(N+1)s(modN2)),其中 r ← R Z N 2 r \leftarrow_R \mathbb Z_{N^2} r←RZN2 是随机数。Alice 知道 r r r,因此可以用快速幂算法计算 h r N ( m o d N 2 ) h^{rN} \pmod{N^2} hrN(modN2);而 Bob 只知道 g r ( m o d N ) g^r \pmod N gr(modN),只能串行计算 T T T 次模平方,恢复出 ( N + 1 ) s ( m o d N 2 ) (N+1)^s \pmod{N^2} (N+1)s(modN2) 则指数 s s s 容易计算。它是线性同态的,类似于 [DJ01] 可以获得 Rate-1 LH-TLP。
因为全同态 TLP 的各个谜题可能来自多个用户,我们需要用到 MK-FHE,使用上面的技术可以做到 Rate-1 的。基于 MK-FHE 和 LH-TLP,可以得到 Rate-1 FH-TLP:
这篇关于Linear Decryption: Rate-1 FHE TLP的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!