0


全同态加密:BGV

参考文献:

  1. Brakerski Z, Vaikuntanathan V. Efficient fully homomorphic encryption from (standard) LWE[J]. SIAM Journal on computing, 2014, 43(2): 831-871.
  2. Brakerski Z, Gentry C, Vaikuntanathan V. (Leveled) fully homomorphic encryption without bootstrapping[J]. ACM Transactions on Computation Theory (TOCT), 2014, 6(3): 1-36.
  3. Peikert C. A decade of lattice cryptography[J]. Foundations and trends® in theoretical computer science, 2016, 10(4): 283-424.

文章目录

基础知识

快速数论变换 NTT,在文章 深入理解NTT 中介绍。BGV 方案中,使用多项式环

  1. R
  2. =
  3. Z
  4. [
  5. x
  6. ]
  7. /
  8. (
  9. f
  10. (
  11. x
  12. )
  13. )
  14. R = \mathbb Z[x]/(f(x))
  15. R=Z[x]/(f(x)),其中
  16. f
  17. (
  18. x
  19. )
  20. =
  21. x
  22. d
  23. +
  24. 1
  25. f(x)=x^d+1
  26. f(x)=xd+1 是分圆多项式,
  27. d
  28. =
  29. 2
  30. k
  31. d=2^k
  32. d=2k 是二的幂次。环
  33. R
  34. R
  35. R 包含所有次数小于
  36. d
  37. d
  38. d 的整系数多项式。然后,选取它的一个主理想
  39. I
  40. =
  41. (
  42. q
  43. (
  44. x
  45. )
  46. )
  47. I=(q(x))
  48. I=(q(x)),满足它的指数
  49. [
  50. R
  51. :
  52. I
  53. ]
  54. =
  55. p
  56. [R:I]=p
  57. [R:I]=p 是个素数,即环
  58. R
  59. R
  60. R
  61. p
  62. p
  63. p 个陪集
  64. a
  65. i
  66. +
  67. I
  68. ,
  69. a
  70. i
  71. R
  72. a_i+I,\, a_i \in R
  73. ai​+I,ai​∈R 的不交并。做商环:
  74. R
  75. q
  76. =
  77. R
  78. /
  79. I
  80. =
  81. R
  82. =
  83. Z
  84. [
  85. x
  86. ]
  87. /
  88. (
  89. q
  90. (
  91. x
  92. )
  93. ,
  94. f
  95. (
  96. x
  97. )
  98. )
  99. R_q = R/I = R = \mathbb Z[x]/(q(x),f(x))
  100. Rq​=R/I=R=Z[x]/(q(x),f(x))

最简单的,可令

  1. q
  2. (
  3. x
  4. )
  5. =
  6. p
  7. q(x)=p
  8. q(x)=p 是个素数,那么
  9. R
  10. q
  11. =
  12. Z
  13. p
  14. [
  15. x
  16. ]
  17. /
  18. (
  19. f
  20. (
  21. x
  22. )
  23. )
  24. R_q = \mathbb Z_p[x]/(f(x))
  25. Rq​=Zp​[x]/(f(x))

假如

  1. p
  2. 1
  3. m
  4. o
  5. d
  6.   
  7. 2
  8. d
  9. p \equiv 1 \mod 2d
  10. p1mod2d,那么在
  11. R
  12. p
  13. R_p
  14. Rp 上多项式
  15. f
  16. (
  17. x
  18. )
  19. f(x)
  20. f(x) 可以完全分解为线性的互素因式,
  21. f
  22. (
  23. x
  24. )
  25. =
  26. x
  27. d
  28. +
  29. 1
  30. =
  31. i
  32. =
  33. 1
  34. d
  35. (
  36. x
  37. ξ
  38. i
  39. )
  40. f(x) = x^d+1 = \prod_{i=1}^d (x-\xi_i)
  41. f(x)=xd+1=i=1d​(x−ξi​)

从而根据 CRT,令

  1. P
  2. i
  3. =
  4. (
  5. x
  6. ξ
  7. i
  8. ,
  9. p
  10. )
  11. P_i = (x-\xi_i,\, p)
  12. Pi​=(x−ξi​,p) 为彼此互素的理想,有:
  13. R
  14. p
  15. Z
  16. [
  17. x
  18. ]
  19. /
  20. P
  21. 1
  22. ×
  23. Z
  24. [
  25. x
  26. ]
  27. /
  28. P
  29. d
  30. R_p \cong \mathbb Z[x]/P_1 \times \cdots \mathbb Z[x]/P_d
  31. Rp​≅Z[x]/P1​×⋯Z[x]/Pd

简记

  1. Z
  2. [
  3. x
  4. ]
  5. /
  6. P
  7. i
  8. =
  9. R
  10. P
  11. i
  12. \mathbb Z[x]/P_i = R_{P_i}
  13. Z[x]/Pi​=RPi​​

LWE 和 RLWE 问题,在文章 格上困难问题 中介绍。为了方便方案的描述,BGV 不想对两种格困难问题分别构造方案,因此定义了 General Learning with Errors (GLWE) Problem

在这里插入图片描述

其中的噪声分布(一般取做离散高斯分布)

  1. χ
  2. \chi
  3. χ ***B*-bounded distributions**,定义如下:

在这里插入图片描述

格上的陷门,在文章 格密码:陷门OWF 中介绍。在 BGV 中对 Gadget 的描述为:

  1. G
  2. :
  3. =
  4. I
  5. n
  6. g
  7. =
  8. [
  9. g
  10. 0
  11. 0
  12. g
  13. 0
  14. 0
  15. .
  16. .
  17. .
  18. g
  19. ]
  20. Z
  21. q
  22. n
  23. ×
  24. n
  25. l
  26. G:=I_n \otimes g= \left[ \begin{array}{c | c c c} g & 0 & \cdots \\ \hline 0 & g & 0 \\ \vdots & 0 & \ddots & \vdots\\ & & ... & g\\ \end{array} \right] \in \mathbb Z_q^{n \times nl}
  27. G:=In​⊗g=⎣⎡​g0⋮​0g0​⋯0⋱...​⋮g​​⎦⎤​∈Zqn×nl

其中

  1. q
  2. q
  3. q 是素数,
  4. l
  5. =
  6. log
  7. q
  8. l = \lceil \log q \rceil
  9. l=⌈logq⌉,
  10. g
  11. =
  12. [
  13. 1
  14. ,
  15. 2
  16. ,
  17. 4
  18. ,
  19. ,
  20. 2
  21. l
  22. ]
  23. g=[1,2,4,\cdots,2^{l}]
  24. g=[1,2,4,⋯,2l]
    1. x = G u \vec x = G \vec u x=Gu:将向量 u R 2 n l \vec u \in R_2^{nl} uR2nl 分成 n n n块,每个长为 l l l block 做**二进制合成**,得到向量 x R q n \vec x \in R_q^n xRqn
    1. u = G 1 ( x ) \vec u = G^{-1}(x) u=G1(x):将向量 x R q n \vec x \in R_q^n xRqn 的每个分量都做**二进制分解**,得到向量 u R 2 n l \vec u \in R_2^{nl} uR2nl

BGV

Basic Encryption Scheme

BGV 方案基于 BV 方案(在文章 全同态加密(FHE) 中介绍)。在 BGV 中,首先表述了基于 GLWE 的 BV 方案:

    1. E . S e t u p ( 1 λ , 1 μ , b ) E.Setup(1^\lambda,1^\mu,b) E.Setup(1λ,1μ,b):- 如果 b = 0 b=0 b=0,那么设置 d = 1 d=1 d=1LWE),如果 b = 1 b=1 b=1,那么设置 n = 1 n=1 n=1RLWE)。甚至,可以设置这两个极端之间的参数?- 选取 μ \mu μ比特的素数模 q q q,设置 d = d ( λ , μ , b ) d=d(\lambda,\mu,b) d=d(λ,μ,b), n = n ( λ , μ , b ) n=n(\lambda,\mu,b) n=n(λ,μ,b), N = ( 2 n + 1 ) log q N=\lceil (2n+1)\log q \rceil N=⌈(2n+1)logq⌉, χ = χ ( λ , μ , b ) \chi = \chi(\lambda,\mu,b) χ=χ(λ,μ,b),使得 GLWE 实例的强度为 2 λ 2^\lambda 2λ- R = Z [ x ] / ( x d + 1 ) R=\mathbb Z[x]/(x^d+1) R=Z[x]/(xd+1),明文空间为 R p R_p Rp​,其中 p q p \ll q pq是素数(例如 p = 2 p=2 p=2),密文空间为 R q n + 1 R_q^{n+1} Rqn+1​- 设置 p a r a m s = ( R , p , q , d , n , N , χ ) params=(R,p,q,d,n,N,\chi) params=(R,p,q,d,n,N,χ)
    1. E . S e c r e t K e y G e n ( p a r a m s ) E.SecretKeyGen(params) E.SecretKeyGen(params):- 采样 s χ n s' \leftarrow \chi^n s′←χn,设置 s k = s = ( 1 , s ) ∈ R q n + 1 sk = s = (1,s) \in R_q^{n+1} sk=s=(1,s)∈Rqn+1​
    1. E . P u b l i c K e y G e n ( p a r a m s ,   s k ) E.PublicKeyGen(params,\, sk) E.PublicKeyGen(params,sk):- 生成均匀随机矩阵 A U ( R q N × n ) A' \leftarrow U(R_q^{N \times n}) A′←U(RqN×n​),采样 e ← χ N e \leftarrow \chi^N e←χN- 计算 b = A ′ s ′ + p e b=A's'+pe b=A′s′+pe,**使得噪音 p e pe pe 属于理想 ( p ) (p) (p)**- 设置 p k = A = ( b , − A ′ ) ∈ R q N × ( n + 1 ) pk = A = (b,-A') \in R_q^{N \times (n+1)} pk=A=(b,−A′)∈RqN×(n+1)​,易知 A s = p e 0 m o d    ( p ) As=pe \equiv 0 \mod (p) As=pe0mod(p)
    1. E . E n c ( p a r a m s ,   p k ,   m ) E.Enc(params,\, pk,\, m) E.Enc(params,pk,m):- 给定明文 m R p m \in R_p mRp​,设置行向量 m = ( m , 0 , , 0 ) R q n + 1 \vec m = (m,0,\cdots,0) \in R_q^{n+1} m=(m,0,⋯,0)∈Rqn+1​- 采样行向量 r R p N r \leftarrow R_p^N rRpN​,输出密文 c = m + r A R q n + 1 c = \vec m+rA \in R_q^{n+1} c=m+rARqn+1
    1. E . D e c ( p a r a m s ,   s k ,   c ) E.Dec(params,\, sk,\, c) E.Dec(params,sk,c):- 给定密文 c R q n + 1 c \in R_q^{n+1} cRqn+1​,输出明文 m = [ [ < c , s > ] q ] p R p m=[[<c,s>]_q]_p \in R_p m=[[<c,s>]q​]p​∈Rp​其中 [ ] q [\cdot]_q [⋅]q 表示模 q q q的余数,范围 ( q / 2 , q / 2 ] (-q/2,q/2] (−q/2,q/2]

在 BGV 中

  1. m
  2. [
  3. <
  4. c
  5. ,
  6. s
  7. >
  8. ]
  9. q
  10. m
  11. o
  12. d
  13.   
  14. p
  15. m \equiv [<c,s>]_q \mod p
  16. m≡[<c,s>]qmodp,可将
  17. [
  18. <
  19. c
  20. ,
  21. s
  22. >
  23. ]
  24. q
  25. R
  26. q
  27. [<c,s>]_q \in R_q
  28. [<c,s>]q​∈Rq 视为**由明文
  29. m
  30. m
  31. m 编码的噪声**。

Homomorphic Operations

矩阵

  1. A
  2. R
  3. m
  4. ×
  5. n
  6. ,
  7. B
  8. R
  9. p
  10. ×
  11. q
  12. A \in R^{m \times n},\, B \in R^{p \times q}
  13. ARm×n,BRp×q **Kronecker product** 定义为:
  14. A
  15. B
  16. =
  17. [
  18. A
  19. i
  20. j
  21. B
  22. ]
  23. i
  24. j
  25. R
  26. m
  27. p
  28. ×
  29. n
  30. q
  31. A \otimes B = \left[ A_{ij} \cdot B \right]_{ij} \in R^{mp \times nq}
  32. AB=[Aij​⋅B]ij​∈Rmp×nq
  1. 克罗内克积是结合的,但不是交换的
  2. 克罗内克积与矩阵加法间,满足左右分配律
    1. ( A B ) T = A T B T (A \otimes B)^T = A^T \otimes B^T (AB)T=ATBT ( A B ) 1 = A 1 B 1 (A \otimes B)^{-1} = A^{-1} \otimes B^{-1} (AB)−1=A1B1,注意对比 ( A B ) T = B T A T (AB)^T = B^TA^T (AB)T=BTAT ( A B ) 1 = B 1 A 1 (AB)^{-1} = B^{-1}A^{-1} (AB)−1=B1A1 ( A B ) = B A (AB)^* = B^*A^* (AB)∗=BA∗(穿脱原理)
    1. ( X Y ) ( U V ) = ( X U ) ( Y V ) (X\otimes Y)(U \otimes V) = (XU) \otimes (YV) (XY)(UV)=(XU)⊗(YV)
  3. 对于 A ∈ R m × m , B ∈ R n × n A \in R^{m \times m},B \in R^{n \times n} A∈Rm×m,B∈Rn×n,有 d e t ( A ⊗ B ) = d e t ( A ) n ⋅ d e t ( B ) m det(A \otimes B)=det(A)^n \cdot det(B)^m det(A⊗B)=det(A)n⋅det(B)m
    1. r a n k ( A B ) = r a n k ( A ) r a n k ( B ) rank(A \otimes B) = rank(A) \cdot rank(B) rank(AB)=rank(A)⋅rank(B)

根据上述性质,易知

  1. <
  2. c
  3. 1
  4. c
  5. 2
  6. ,
  7. s
  8. 1
  9. s
  10. 2
  11. >
  12. =
  13. (
  14. c
  15. 1
  16. c
  17. 2
  18. )
  19. T
  20. (
  21. s
  22. 1
  23. s
  24. 2
  25. )
  26. =
  27. (
  28. c
  29. 1
  30. T
  31. c
  32. 2
  33. T
  34. )
  35. (
  36. s
  37. 1
  38. s
  39. 2
  40. )
  41. =
  42. (
  43. c
  44. 1
  45. T
  46. s
  47. 1
  48. )
  49. (
  50. c
  51. 2
  52. T
  53. s
  54. 2
  55. )
  56. =
  57. <
  58. c
  59. 1
  60. ,
  61. s
  62. 1
  63. >
  64. <
  65. c
  66. 2
  67. ,
  68. s
  69. 2
  70. >
  71. \begin{aligned} <c_1 \otimes c_2,\, s_1 \otimes s_2> &= (c_1 \otimes c_2)^T (s_1 \otimes s_2)\\ &= (c_1^T \otimes c_2^T)(s_1 \otimes s_2)\\ &= (c_1^T s_1) \otimes (c_2^T s_2)\\ &= <c_1,s_1> \cdot <c_2,s_2> \end{aligned}
  72. <c1​⊗c2​,s1​⊗s2>​=(c1​⊗c2​)T(s1​⊗s2​)=(c1T​⊗c2T​)(s1​⊗s2​)=(c1T​s1​)⊗(c2T​s2​)=<c1​,s1><c2​,s2>

因此,

  1. 同态加法: D e c ( c 1 + c 2 ,   s ) = D e c ( c 1 , s ) + D e c ( c 2 , s ) Dec(c_1+c_2,, s) = Dec(c_1,s)+Dec(c_2,s) Dec(c1​+c2​,s)=Dec(c1​,s)+Dec(c2​,s)
  2. 同态乘法: D e c ( c 1 ⊗ c 2 ,   s ⊗ s ) = D e c ( c 1 , s ) ⋅ D e c ( c 2 , s ) Dec(c_1 \otimes c_2,, s \otimes s) = Dec(c_1,s) \cdot Dec(c_2,s) Dec(c1​⊗c2​,s⊗s)=Dec(c1​,s)⋅Dec(c2​,s)

然而,上述的同态乘法有很大的缺陷:密文和私钥的规模指数级增大,噪声指数级增大。

Key Switching

密钥切换技术,用于降低密文和密钥的维度。

BGV 将 Gadget 视为二进制合并和分解,

在这里插入图片描述

  1. B
  2. i
  3. t
  4. D
  5. e
  6. c
  7. o
  8. m
  9. p
  10. (
  11. c
  12. )
  13. =
  14. G
  15. 1
  16. (
  17. c
  18. )
  19. ,
  20. P
  21. o
  22. w
  23. e
  24. r
  25. s
  26. o
  27. f
  28. (
  29. s
  30. )
  31. =
  32. s
  33. T
  34. G
  35. BitDecomp(c)=G^{-1}(c),\, Powersof(s)=s^TG
  36. BitDecomp(c)=G1(c),Powersof(s)=sTG,易知:
  37. <
  38. B
  39. i
  40. t
  41. D
  42. e
  43. c
  44. o
  45. m
  46. p
  47. (
  48. c
  49. ,
  50. q
  51. )
  52. ,
  53. P
  54. o
  55. w
  56. e
  57. r
  58. s
  59. o
  60. f
  61. (
  62. s
  63. ,
  64. q
  65. )
  66. >
  67. =
  68. j
  69. =
  70. 0
  71. l
  72. 1
  73. <
  74. u
  75. j
  76. ,
  77. 2
  78. j
  79. s
  80. >
  81. =
  82. <
  83. c
  84. ,
  85. s
  86. >
  87. =
  88. s
  89. T
  90. G
  91. G
  92. 1
  93. (
  94. c
  95. )
  96. \begin{aligned} &<BitDecomp(c,q),Powersof(s,q)> \\ &= \sum_{j=0}^{l-1}<u_j,2^j s> \\ &= <c,s> \\ &= s^TG \cdot G^{-1}(c) \end{aligned}
  97. ​<BitDecomp(c,q),Powersof(s,q)>=j=0l1​<uj​,2js>=<c,s>=sTGG1(c)​

密钥切换的程序为:

在这里插入图片描述

可以理解为:寻找

  1. s
  2. 2
  3. T
  4. K
  5. =
  6. s
  7. 1
  8. T
  9. G
  10. s_2^TK=s_1^TG
  11. s2TK=s1TG
  12. K
  13. K
  14. K,设置
  15. c
  16. 2
  17. =
  18. K
  19. G
  20. 1
  21. (
  22. c
  23. 1
  24. )
  25. c_2=K \cdot G^{-1}(c_1)
  26. c2​=KG1(c1​),于是
  27. s
  28. 2
  29. T
  30. c
  31. 2
  32. =
  33. (
  34. s
  35. 1
  36. T
  37. G
  38. )
  39. G
  40. 1
  41. (
  42. c
  43. 1
  44. )
  45. =
  46. s
  47. 1
  48. T
  49. c
  50. 1
  51. s_2^Tc_2 = (s_1^TG) \cdot G^{-1}(c_1) = s_1^Tc_1
  52. s2Tc2​=(s1TG)⋅G1(c1​)=s1Tc1

Modulus Switching

模切换技术,用于降低噪声的绝对大小(相对大小略有上升)。

模切换技术并不能降低噪声比率(*the ratio of the noise to the “noise ceiling” (the modulus size)*),而噪声比率约束了密文的同态能力。似乎降低噪音绝对大小并不会提高同态能力。然而,对于乘法来说:

  1. 噪声大小为 x x x,假设 q ≈ x k q\approx x^k q≈xk,于是噪声比率为 x / q ≈ x 1 − k x/q \approx x^{1-k} x/q≈x1−k
  2. 选择 a ladder of gradually decreasing moduli { q i ≈ q x i } {q_i \approx \dfrac{q}{x^i}} {qi​≈xiq​}
  3. 每次密文乘法,导致结果的噪声从 x a x^a xa成为 x 2 a x^{2a} x2a
  4. 假设不做模切换,那么下一次乘法将会达到 x 4 x^4 x4的噪声,最多只能做 log ⁡ k \log k logk次乘法,噪声就会达到 x k = q x^k=q xk=q,导致不可解密。
  5. 如果每次都做模切换,第 j j j次乘法后,从 q j − 1 q_{j-1} qj−1​切换到 q j q_{j} qj​上,同时噪声从 x 2 x^2 x2降低到 x x x,比率为 x / q j = x j − k x/q_{j} = x^{j-k} x/qj​=xj−k,因此最多可以做 k k k次乘法

模切换的程序为:

在这里插入图片描述

(Leveled) FHE Based on GLWE without Bootstrapping

如果设置 Basic Encryption Scheme 的明文空间为

  1. R
  2. 2
  3. R_2
  4. R2​,那么 BGV 方案如下:

在这里插入图片描述

其同态运算为:

在这里插入图片描述

由于密钥切换和模切换,都是算术电路上计算的,因此它们比 Bootstrapping 的布尔电路计算要高效的多。为了计算深度

  1. d
  2. d
  3. d 的算术电路,只要在初始化的时候设置
  4. L
  5. =
  6. d
  7. L=d
  8. L=d 即可。

但随着

  1. L
  2. L
  3. L 增大,模数
  4. q
  5. L
  6. q_L
  7. qL​的比特长度会线性增长,从而导致每个 Gate 的计算复杂度上升。对于很深的电路,我们可以重新引入 Bootstrapping 作为优化(而非必需)。

Optimizations

Batching

上述的 BGV 方案中,设置了

  1. p
  2. =
  3. 2
  4. p=2
  5. p=2,从而可以对商环
  6. R
  7. 2
  8. R_2
  9. R2 上的明文做运算。

奇素数

  1. p
  2. 1
  3. m
  4. o
  5. d
  6.   
  7. 2
  8. d
  9. p \equiv 1 \mod 2d
  10. p1mod2d,根据数论可以知道,
  11. R
  12. p
  13. R
  14. P
  15. 1
  16. ×
  17. ×
  18. R
  19. P
  20. d
  21. R_p \cong R_{P_1} \times \cdots \times R_{P_d}
  22. Rp​≅RP1​​×⋯×RPd​​

其中

  1. P
  2. i
  3. =
  4. (
  5. p
  6. ,
  7. x
  8. ξ
  9. i
  10. )
  11. P_i = (p,x-\xi_i)
  12. Pi​=(p,x−ξi​),且陪集
  13. 0
  14. +
  15. P
  16. i
  17. ,
  18. ,
  19. (
  20. p
  21. 1
  22. )
  23. +
  24. P
  25. i
  26. 0+P_i,\cdots,(p-1)+P_i
  27. 0+Pi​,⋯,(p1)+Pi 恰好拼成整个环
  28. R
  29. =
  30. Z
  31. [
  32. x
  33. ]
  34. /
  35. (
  36. f
  37. (
  38. x
  39. )
  40. )
  41. R=\mathbb Z[x]/(f(x))
  42. R=Z[x]/(f(x)),或者说
  43. I
  44. I
  45. I作为加群的指数为
  46. [
  47. R
  48. :
  49. I
  50. ]
  51. =
  52. p
  53. [R:I]=p
  54. [R:I]=pEmmmm, 怎么觉得不太对呢?奥,没问题)

上述的每个理想都是同构的,存在环

  1. R
  2. R
  3. R 的**自同构**(automorphism
  4. σ
  5. i
  6. j
  7. \sigma_{i \to j}
  8. σij​,使得
  9. σ
  10. i
  11. j
  12. (
  13. P
  14. i
  15. )
  16. =
  17. P
  18. j
  19. \sigma_{i \to j}(P_i)=P_j
  20. σij​(Pi​)=Pj​,确切地说:
  21. σ
  22. i
  23. j
  24. (
  25. o
  26. =
  27. 0
  28. d
  29. 1
  30. r
  31. o
  32. x
  33. o
  34. P
  35. i
  36. )
  37. =
  38. o
  39. =
  40. 0
  41. d
  42. 1
  43. r
  44. o
  45. x
  46. e
  47. i
  48. j
  49. o
  50. m
  51. o
  52. d
  53.   
  54. 2
  55. d
  56. P
  57. j
  58. \sigma_{i \to j}\left(\sum_{o=0}^{d-1}r_ox^{o} \in P_i \right) = \sum_{o=0}^{d-1}r_ox^{e_{ij}o \mod 2d} \in P_j
  59. σij​(o=0d1roxoPi​)=o=0d1roxeijomod2dPj

其中

  1. 1
  2. <
  3. e
  4. i
  5. j
  6. <
  7. 2
  8. d
  9. 1< e_{ij} <2d
  10. 1<eij​<2d 是奇数(是多少?论文里没说啊!)。

结合文章 全同态加密:CKKS 中内容,应为

  1. e
  2. i
  3. j
  4. =
  5. (
  6. 2
  7. j
  8. +
  9. 1
  10. )
  11. 1
  12. (
  13. 2
  14. i
  15. +
  16. 1
  17. )
  18. m
  19. o
  20. d
  21.   
  22. 2
  23. d
  24. ,
  25. i
  26. ,
  27. j
  28. =
  29. 0
  30. ,
  31. 1
  32. ,
  33. ,
  34. d
  35. 1
  36. e_{ij} = (2j+1)^{-1} \cdot (2i+1) \mod 2d,\, \forall i,j=0,1,\cdots,d-1
  37. eij​=(2j+1)−1⋅(2i+1)mod2d,∀i,j=0,1,⋯,d1。因为
  38. d
  39. d
  40. d 是素数
  41. 2
  42. 2
  43. 2 的幂次,所以
  44. ϕ
  45. (
  46. 2
  47. d
  48. )
  49. =
  50. d
  51. \phi(2d)=d
  52. ϕ(2d)=d,因此有
  53. ϕ
  54. 2
  55. d
  56. (
  57. x
  58. )
  59. =
  60. x
  61. d
  62. +
  63. 1
  64. \phi_{2d}(x) = x^d+1
  65. ϕ2d​(x)=xd+1。这个分圆多项式的
  66. d
  67. d
  68. d 个根就是
  69. 2
  70. d
  71. 2d
  72. 2d 次本原单位根
  73. ξ
  74. 2
  75. d
  76. k
  77. ,
  78. k
  79. Z
  80. 2
  81. d
  82. \xi_{2d}^k,\, \forall k \in \mathbb Z_{2d}^*
  83. ξ2dk​,∀kZ2d∗​。易知,
  84. Z
  85. 2
  86. d
  87. =
  88. {
  89. 1
  90. ,
  91. 3
  92. ,
  93. ,
  94. 2
  95. d
  96. 1
  97. }
  98. Z_{2d}^* = \{1,3,\cdots,2d-1\}
  99. Z2d∗​={1,3,⋯,2d1},因此
  100. k
  101. k
  102. k 都是奇数,从而
  103. e
  104. i
  105. j
  106. =
  107. k
  108. 1
  109. 1
  110. k
  111. 2
  112. m
  113. o
  114. d
  115.   
  116. 2
  117. d
  118. Z
  119. 2
  120. d
  121. e_{ij}=k_1^{-1} \cdot k_2 \mod 2d \in \mathbb Z_{2d}^*
  122. eij​=k11​⋅k2mod2dZ2d∗​ 也是奇数,这里
  123. k
  124. 1
  125. =
  126. 2
  127. j
  128. +
  129. 1
  130. k_1=2j+1
  131. k1​=2j+1
  132. k
  133. 2
  134. =
  135. 2
  136. i
  137. +
  138. 1
  139. k_2=2i+1
  140. k2​=2i+1。此时,
  141. f
  142. (
  143. x
  144. )
  145. =
  146. σ
  147. i
  148. j
  149. (
  150. f
  151. (
  152. x
  153. )
  154. )
  155. =
  156. f
  157. (
  158. x
  159. e
  160. i
  161. j
  162. )
  163. f'(x) = \sigma_{i \to j}(f(x)) = f(x^{e_{ij}})
  164. f′(x)=σi→j​(f(x))=f(xeij​) 满足:
  165. f
  166. (
  167. ξ
  168. 2
  169. d
  170. 2
  171. j
  172. +
  173. 1
  174. )
  175. =
  176. σ
  177. i
  178. j
  179. (
  180. f
  181. (
  182. ξ
  183. 2
  184. d
  185. 2
  186. j
  187. +
  188. 1
  189. )
  190. )
  191. =
  192. f
  193. (
  194. ξ
  195. 2
  196. d
  197. (
  198. 2
  199. j
  200. +
  201. 1
  202. )
  203. e
  204. i
  205. j
  206. )
  207. =
  208. f
  209. (
  210. ξ
  211. 2
  212. d
  213. 2
  214. i
  215. +
  216. 1
  217. )
  218. f'(\xi_{2d}^{2j+1}) = \sigma_{i \to j}(f(\xi_{2d}^{2j+1})) = f(\xi_{2d}^{(2j+1)e_{ij}}) = f(\xi_{2d}^{2i+1})
  219. f′(ξ2d2j+1​)=σij​(f2d2j+1​))=f2d(2j+1)eij​​)=f2d2i+1​)

于是,我们可以将一个密文上划分出

  1. d
  2. d
  3. d(或者
  4. d
  5. d
  6. d 的因子,类似不完全NTT)个**明文槽**(*plaintext slots*),第
  7. i
  8. i
  9. i 个明文的取值范围是理想
  10. P
  11. i
  12. P_i
  13. Pi 对应的商环
  14. R
  15. P
  16. i
  17. R_{P_i}
  18. RPi​​

我们使用 RLWE 版本的 BGV 方案,

  1. 设置 n = 1 n=1 n=1,令 d = 2 k d=2^k d=2k是二的幂次,选取奇素数 p ≡ 1 m o d    2 d p \equiv 1 \mod 2d p≡1mod2d
  2. 在 E . P u b l i c K e y G e n ( ) E.PublicKeyGen() E.PublicKeyGen() 中,设置 A s = p e As=pe As=pe
  3. 在 E . D e c ( ) E.Dec() E.Dec() 中,设置 m = [ [ < c , s > ] q ] p m = [[<c,s>]_q]_p m=[[<c,s>]q​]p​
  4. 在 S c a l e ( ) Scale() Scale() 中,设置 r = p r=p r=p
  5. 同态运算都是在 mod-p gates 的电路上的

注意,这里的

  1. p
  2. =
  3. O
  4. (
  5. p
  6. o
  7. l
  8. y
  9. (
  10. λ
  11. )
  12. )
  13. p=O(poly(\lambda))
  14. p=O(poly(λ)),此时同态运算的额外的噪声是多项式的。对于超多项式的
  15. p
  16. p
  17. p ,噪音增长严重,从而无法使用。

使用 Batching 技术,计算一个密文的同态运算,就达到了

  1. d
  2. d
  3. d 个明文的运算,因此效率几乎(因为模数
  4. q
  5. (
  6. x
  7. )
  8. q(x)
  9. q(x)
  10. 2
  11. 2
  12. 2增大到了
  13. p
  14. p
  15. p,算术运算会慢一些)**提高了
  16. d
  17. d
  18. d 倍**。

Bootstrapping as an Optimization

自举的优点为:

  1. Performance: L L L 不必设置的和电路深度一样大,于是每个门的计算复杂度独立于电路深度,计算效率高。
  2. Flexibility:假设循环安全,那么自举将导致无限深度的电路,而不必预设电路深度上界,更加灵活。
  3. Memory:可以把原始数据的密文用 AES 存储,占内存很小。当需要计算时,用 Bootstrapping 执行解密电路,解压(de-compressed)为长密文,再执行同态运算。解压的长密文没法重新变回 AES 短密文。

对于 LWE 版本的 BGV,解密函数为:

  1. m
  2. =
  3. [
  4. [
  5. <
  6. c
  7. ,
  8. s
  9. >
  10. ]
  11. q
  12. ]
  13. 2
  14. m = [[<c,s>]_q]_2
  15. m=[[<c,s>]q​]2​,可以用
  16. R
  17. 2
  18. =
  19. Z
  20. 2
  21. R_2=\mathbb Z_2
  22. R2​=Z2 上的算术电路来计算它:
  1. 内积中的对应分量两两乘积,由于 c [ i ] c[i] c[i] 有 log ⁡ q \log q logq 比特,因此 c [ i ] ⋅ s [ i ] c[i] \cdot s[i] c[i]⋅s[i] 可以写成至多(比特 0 0 0 的不必相加) log ⁡ q \log q logq 个 s [ i ] s[i] s[i] 的左移的加和。一个 s [ i ] s[i] s[i] 的左移,它的长度至多为 2 log ⁡ q 2 \log q 2logq 比特。
  2. 一个内积有 n n n个对应分量,共需要 n log ⁡ q n \log q nlogq 个 2 log ⁡ q 2 \log q 2logq 比特数的加和。使用二叉树式的电路,深度为 O ( log ⁡ ( n log ⁡ g ) ) = O ( log ⁡ n + log ⁡ log ⁡ q ) O(\log(n \log g)) = O(\log n + \log\log q) O(log(nlogg))=O(logn+loglogq),逻辑门的数量为 O ( n log ⁡ q ⋅ log ⁡ q ) = O ( n log ⁡ 2 q ) O(n \log q \cdot \log q) = O(n \log^2 q) O(nlogq⋅logq)=O(nlog2q)
  3. 然后,计算 < c , s > m o d    q <c,s>\mod q <c,s>modq,除法可以转化为乘法,电路大小为 O ( p o l y log ⁡ ( q ) ) O(poly\log(q)) O(polylog(q)),电路深度为 O ( log ⁡ log ⁡ q ) O(\log\log q) O(loglogq)
  4. 最后,计算 ( < c , s > m o d    q ) m o d    2 (<c,s> \mod q) \mod 2 (<c,s>modq)mod2,仅需要截取最低位比特。
  5. 综上所述,Bootstrapping 的电路深度为: O ( log ⁡ n + log ⁡ log ⁡ q ) O(\log n + \log\log q) O(logn+loglogq)电路大小为: O ( n log ⁡ 2 q ) O(n \log^2 q) O(nlog2q)代入安全参数 n = O ( λ ) n=O(\lambda) n=O(λ) 和 log ⁡ q = O ( log ⁡ λ ) \log q = O(\log \lambda) logq=O(logλ):电路大小为 O ~ ( λ ) \tilde O(\lambda) O~(λ),电路深度为 O ( log ⁡ λ ) O(\log \lambda) O(logλ)

对于 RLWE 版本的 BGV,解密函数中的向量长度为

  1. 2
  2. 2
  3. 2,每个分量都是多项式环
  4. Z
  5. 2
  6. [
  7. x
  8. ]
  9. /
  10. (
  11. f
  12. (
  13. x
  14. )
  15. )
  16. \mathbb Z_2[x]/(f(x))
  17. Z2​[x]/(f(x)) 上的乘积,可以使用 DFT 来计算。其 Bootstrapping 的电路规模与 LWE 版本的类似。

由于噪声增长的没那么快,因此我们可以 Bootstrapping Lazily,每

  1. L
  2. L
  3. L 层才自举一次,其他层都不执行自举程序。经最优化,得到:
  4. L
  5. =
  6. θ
  7. (
  8. log
  9. λ
  10. )
  11. L = \theta(\log \lambda)
  12. L=θ(logλ)

Batching the Bootstrapping Operation

上述的 Batching 方案,每个明文槽都只能和对应的明文槽内的明文做运算。如果我们想让它们之间也可以交互计算怎么办呢?

思路是,

  1. 规定普通密文仅使用第一个明文槽 R P 1 R_{P_1} RP1​​,其他的槽中都是 0 ∈ R P i ,   i ≠ 1 0 \in R_{P_i},, i \neq 1 0∈RPi​​,i=1
  2. 利用理想之间的环 R R R自同构映射 σ i → j \sigma_{i \to j} σi→j​,将各个槽里的明文进行搬移, m = [ [ < c , s > ] q ] P i    ⟺    m = [ [ < σ i → j ( c ) , σ i → j ( s ) > ] q ] P j m=[[<c,s>]q]{P_i} \iff m=[[<\sigma_{i \to j}(c),\sigma_{i \to j}(s)>]q]{P_j} m=[[<c,s>]q​]Pi​​⟺m=[[<σi→j​(c),σi→j​(s)>]q​]Pj​​
  3. 选取 u ∈ 1 + P 1 u \in 1+P_1 u∈1+P1​,且 u ∈ P i , i ≠ 1 u \in P_i,i \neq 1 u∈Pi​,i=1,这用于将其他槽的内容清零

实现 Pack 和 Unpack 函数,进行 normal homomorphic operation 和 batch operation 之间的转换:

在这里插入图片描述
在这里插入图片描述
只要上边的私钥链

  1. s
  2. 1
  3. ,
  4. s
  5. 2
  6. ,
  7. s_1,s_2,\cdots
  8. s1​,s2​,⋯ 是无环的,那么就可以避免 **circular security problem**,但需要存储的密钥切换映射
  9. τ
  10. \tau
  11. τ 就会多一些。如果我们假设它是循环安全的,那么就只需要存储一个私钥
  12. s
  13. s
  14. s 的那些映射即可。

利用上述的 Pack 和 Unpack,就可以对电路同一层的密文执行并行的 Bootstrapping。如果电路的宽度足够大(每一层的宽度为

  1. O
  2. (
  3. λ
  4. )
  5. O(\lambda)
  6. O(λ)),那么 Bootstrapping 的计算复杂度可以**降低一个
  7. log
  8. λ
  9. \log \lambda
  10. logλ 因子**。

其实上边的 Pack 和 Unpack 更重要的是:可以在明文需要串行计算时串行,可以并行计算时并行。从而加速单个算术电路的计算效率。否则,Batching 只能并行计算

  1. d
  2. d
  3. d 个相同电路的 copy,对于不同的明文输入。

Plaintext Spaces

上述的方案中,

  1. R
  2. q
  3. R_q
  4. Rq​上的
  5. q
  6. j
  7. (
  8. x
  9. )
  10. q_j(x)
  11. qj​(x) 都选做了素数。如果我们想要在很大的明文空间
  12. Z
  13. p
  14. \mathbb Z_p
  15. Zp​上运算,那么
  16. q
  17. j
  18. q_j
  19. qj​就不得不选取为安全参数
  20. λ
  21. \lambda
  22. λ的指数级。此时
  23. q
  24. j
  25. /
  26. B
  27. q_j/B
  28. qj​/B
  29. B
  30. B
  31. B是噪声上界)是指数级的,导致 LWE 问题不难。

因此,我们不直接使用

  1. Z
  2. p
  3. \mathbb Z_p
  4. Zp​作为明文空间,而是使用同构的
  5. R
  6. /
  7. I
  8. R/I
  9. R/I,其中理想
  10. I
  11. I
  12. I 作为加群的指数为
  13. [
  14. R
  15. :
  16. I
  17. ]
  18. =
  19. p
  20. [R:I]=p
  21. [R:I]=p,同时获得理想
  22. I
  23. I
  24. I的一组短格基
  25. B
  26. I
  27. B_I
  28. BI​(
  29. B
  30. I
  31. =
  32. O
  33. (
  34. p
  35. o
  36. l
  37. y
  38. (
  39. d
  40. )
  41. p
  42. 1
  43. /
  44. d
  45. )
  46. \|B_I\|=O(poly(d) \cdot p^{1/d})
  47. BI​∥=O(poly(d)⋅p1/d))。对于梯子“ladder”,我们选取多项式
  48. q
  49. j
  50. R
  51. q_j \in R
  52. qj​∈R,构造主理想
  53. (
  54. q
  55. j
  56. )
  57. (q_j)
  58. (qj​),使它满足
  59. q
  60. j
  61. 1
  62. +
  63. I
  64. q_j \in 1+I
  65. qj​∈1+I
  66. q
  67. j
  68. +
  69. 1
  70. /
  71. q
  72. j
  73. \|q_{j+1}\|/\|q_j\|
  74. qj+1​∥/∥qj​∥ 大约为
  75. 2
  76. μ
  77. 2^\mu
  78. 2μ 大小,令理想
  79. (
  80. q
  81. j
  82. )
  83. (q_j)
  84. (qj​) **rotation basis** 为:
  85. B
  86. q
  87. j
  88. =
  89. {
  90. x
  91. i
  92. q
  93. j
  94. (
  95. x
  96. )
  97. m
  98. o
  99. d
  100.   
  101. f
  102. (
  103. x
  104. )
  105. }
  106. i
  107. =
  108. 0
  109. d
  110. 1
  111. B_{q_j} = \{x^iq_j(x) \mod f(x)\}_{i=0}^{d-1}
  112. Bqj​​={xiqj​(x)modf(x)}i=0d1

  1. R
  2. q
  3. j
  4. +
  5. 1
  6. R_{q_{j+1}}
  7. Rqj+1​​ 模切换到
  8. R
  9. q
  10. j
  11. R_{q_j}
  12. Rqj​​ 的算法为:

在这里插入图片描述

说实话,这一节博主我没怎么看懂 (╥﹏╥) ,

  1. 最后一层 ∥ q 0 ∥ ≈ 2 μ |q_0| \approx 2^\mu ∥q0​∥≈2μ,噪音远小于 q 0 q_0 q0​。那么每次 reflesh 都降低 μ \mu μ 比特,是不是太奢侈了?
  2. 理想 I I I 怎么选取?除了 ( p ) (p) (p) 外还能有其他理想的指数也是素数 p p p 么?或者 p p p 不是素数?
  3. 怎么选的多项式 q j ( x ) q_j(x) qj​(x)? I I I 的生成元的某个倍数再加一?
  4. 多项式范数 ∥ q j ( x ) ∥ |q_j(x)| ∥qj​(x)∥ 怎么定义的?是系数向量的无穷范数么?相邻多项式的范数之比是什么几何意义?

先写在这儿等以后回顾。


本文转载自: https://blog.csdn.net/weixin_44885334/article/details/127339960
版权归原作者 山登绝顶我为峰 3(^v^)3 所有, 如有侵权,请联系我们删除。

“全同态加密:BGV”的评论:

还没有评论