IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 区块链 -> 全同态加密:BGV -> 正文阅读

[区块链]全同态加密: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 方案中,使用多项式环 R = Z [ x ] / ( f ( x ) ) R = \mathbb Z[x]/(f(x)) R=Z[x]/(f(x)),其中 f ( x ) = x d + 1 f(x)=x^d+1 f(x)=xd+1 是分圆多项式, d = 2 k d=2^k d=2k 是二的幂次。环 R R R 包含所有次数小于 d d d 的整系数多项式。然后,选取它的一个主理想 I = ( q ( x ) ) I=(q(x)) I=(q(x)),满足它的指数 [ R : I ] = p [R:I]=p [R:I]=p 是个素数,即环 R R R p p p 个陪集 a i + I , ? a i ∈ R a_i+I,\, a_i \in R ai?+I,ai?R 的不交并。做商环:
R q = R / I = R = Z [ x ] / ( q ( x ) , f ( x ) ) R_q = R/I = R = \mathbb Z[x]/(q(x),f(x)) Rq?=R/I=R=Z[x]/(q(x),f(x))

最简单的,可令 q ( x ) = p q(x)=p q(x)=p 是个素数,那么 R q = Z p [ x ] / ( f ( x ) ) R_q = \mathbb Z_p[x]/(f(x)) Rq?=Zp?[x]/(f(x))

假如 p ≡ 1 m o d ?? 2 d p \equiv 1 \mod 2d p1mod2d,那么在 R p R_p Rp? 上多项式 f ( x ) f(x) f(x) 可以完全分解为线性的互素因式,
f ( x ) = x d + 1 = ∏ i = 1 d ( x ? ξ i ) f(x) = x^d+1 = \prod_{i=1}^d (x-\xi_i) f(x)=xd+1=i=1d?(x?ξi?)

从而根据 CRT,令 P i = ( x ? ξ i , ? p ) P_i = (x-\xi_i,\, p) Pi?=(x?ξi?,p) 为彼此互素的理想,有:
R p ? Z [ x ] / P 1 × ? Z [ x ] / P d R_p \cong \mathbb Z[x]/P_1 \times \cdots \mathbb Z[x]/P_d Rp??Z[x]/P1?×?Z[x]/Pd?

简记 Z [ x ] / P i = R P i \mathbb Z[x]/P_i = R_{P_i} Z[x]/Pi?=RPi??

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

在这里插入图片描述

其中的噪声分布(一般取做离散高斯分布) χ \chi χB-bounded distributions,定义如下:

在这里插入图片描述

格上的陷门,在文章 格密码:陷门OWF 中介绍。在 BGV 中对 Gadget 的描述为:
G : = I n ? g = [ g 0 ? 0 g 0 ? 0 ? ? . . . g ] ∈ Z q n × n l 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} G:=In??g=? ??g0??0g0??0?...??g??? ??Zqn×nl?

其中 q q q 是素数, l = ? log ? q ? l = \lceil \log q \rceil l=?logq? g = [ 1 , 2 , 4 , ? ? , 2 l ] g=[1,2,4,\cdots,2^{l}] 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} u R2nl? 分成 n n n块,每个长为 l l l的 block 做二进制合成,得到向量 x ? ∈ R q n \vec x \in R_q^n x Rqn?
  2. u ? = G ? 1 ( x ) \vec u = G^{-1}(x) u =G?1(x):将向量 x ? ∈ R q n \vec x \in R_q^n x Rqn? 的每个分量都做二进制分解,得到向量 u ? ∈ R 2 n l \vec u \in R_2^{nl} u R2nl?

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=1(LWE),如果 b = 1 b=1 b=1,那么设置 n = 1 n=1 n=1(RLWE)。甚至,可以设置这两个极端之间的参数?
    • 选取 μ \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 p?q是素数(例如 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,χ)
  2. 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?
  3. 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}) AU(RqN×n?),采样 e ← χ N e \leftarrow \chi^N eχN
    • 计算 b = A ′ s ′ + p e b=A's'+pe b=As+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)
  4. 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?

  5. 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 中 m ≡ [ < c , s > ] q m o d ?? p m \equiv [<c,s>]_q \mod p m[<c,s>]q?modp,可将 [ < c , s > ] q ∈ R q [<c,s>]_q \in R_q [<c,s>]q?Rq? 视为由明文 m m m 编码的噪声

Homomorphic Operations

矩阵 A ∈ R m × n , ? B ∈ R p × q A \in R^{m \times n},\, B \in R^{p \times q} ARm×n,BRp×qKronecker product 定义为:
A ? B = [ A i j ? B ] i j ∈ R m p × n q A \otimes B = \left[ A_{ij} \cdot B \right]_{ij} \in R^{mp \times nq} A?B=[Aij??B]ij?Rmp×nq

  1. 克罗内克积是结合的,但不是交换的
  2. 克罗内克积与矩阵加法间,满足左右分配律
  3. ( A ? B ) T = A T ? B T (A \otimes B)^T = A^T \otimes B^T (A?B)T=AT?BT ( A ? B ) ? 1 = A ? 1 ? B ? 1 (A \otimes B)^{-1} = A^{-1} \otimes B^{-1} (A?B)?1=A?1?B?1,注意对比 ( 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=B?1A?1 ( A B ) ? = B ? A ? (AB)^* = B^*A^* (AB)?=B?A?(穿脱原理)
  4. ( X ? Y ) ( U ? V ) = ( X U ) ? ( Y V ) (X\otimes Y)(U \otimes V) = (XU) \otimes (YV) (X?Y)(U?V)=(XU)?(YV)
  5. 对于 A ∈ R m × m , B ∈ R n × n A \in R^{m \times m},B \in R^{n \times n} ARm×m,BRn×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
  6. 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(A?B)=rank(A)?rank(B)

根据上述性质,易知
< c 1 ? c 2 , ? s 1 ? s 2 > = ( c 1 ? c 2 ) T ( s 1 ? s 2 ) = ( c 1 T ? c 2 T ) ( s 1 ? s 2 ) = ( c 1 T s 1 ) ? ( c 2 T s 2 ) = < c 1 , s 1 > ? < c 2 , s 2 > \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} <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 视为二进制合并和分解,

在这里插入图片描述

B i t D e c o m p ( c ) = G ? 1 ( c ) , ? P o w e r s o f ( s ) = s T G BitDecomp(c)=G^{-1}(c),\, Powersof(s)=s^TG BitDecomp(c)=G?1(c),Powersof(s)=sTG,易知:
< B i t D e c o m p ( c , q ) , P o w e r s o f ( s , q ) > = ∑ j = 0 l ? 1 < u j , 2 j s > = < c , s > = s T G ? G ? 1 ( c ) \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} ?<BitDecomp(c,q),Powersof(s,q)>=j=0l?1?<uj?,2js>=<c,s>=sTG?G?1(c)?

密钥切换的程序为:

在这里插入图片描述

可以理解为:寻找 s 2 T K = s 1 T G s_2^TK=s_1^TG s2T?K=s1T?G K K K,设置 c 2 = K ? G ? 1 ( c 1 ) c_2=K \cdot G^{-1}(c_1) c2?=K?G?1(c1?),于是 s 2 T c 2 = ( s 1 T G ) ? G ? 1 ( c 1 ) = s 1 T c 1 s_2^Tc_2 = (s_1^TG) \cdot G^{-1}(c_1) = s_1^Tc_1 s2T?c2?=(s1T?G)?G?1(c1?)=s1T?c1?

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 qxk,于是噪声比率为 x / q ≈ x 1 ? k x/q \approx x^{1-k} x/qx1?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 的明文空间为 R 2 R_2 R2?,那么 BGV 方案如下:

在这里插入图片描述

其同态运算为:

在这里插入图片描述

由于密钥切换和模切换,都是算术电路上计算的,因此它们比 Bootstrapping 的布尔电路计算要高效的多。为了计算深度 d d d 的算术电路,只要在初始化的时候设置 L = d L=d L=d 即可。

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

Optimizations

Batching

上述的 BGV 方案中,设置了 p = 2 p=2 p=2,从而可以对商环 R 2 R_2 R2? 上的明文做运算。

奇素数 p ≡ 1 m o d ?? 2 d p \equiv 1 \mod 2d p1mod2d,根据数论可以知道,
R p ? R P 1 × ? R P d R_p \cong R_{P_1} \times \cdots \mathbb R_{P_d} Rp??RP1??×?RPd??

其中 P i = ( p , x ? ξ i ) P_i = (p,x-\xi_i) Pi?=(p,x?ξi?),且陪集 0 + P i , ? ? , ( p ? 1 ) + P i 0+P_i,\cdots,(p-1)+P_i 0+Pi?,?,(p?1)+Pi? 恰好拼成整个环 R = Z [ x ] / ( f ( x ) ) R=\mathbb Z[x]/(f(x)) R=Z[x]/(f(x)),或者说 I I I作为加群的指数为 [ R : I ] = p [R:I]=p [R:I]=p(Emmmm, 怎么觉得不太对呢?)

上述的每个理想都是同构的,存在环 R R R自同构(automorphism) σ i → j \sigma_{i \to j} σij?,使得 σ i → j ( P i ) = P j \sigma_{i \to j}(P_i)=P_j σij?(Pi?)=Pj?,确切地说:
σ i → j ( ∑ i = 0 d ? 1 r i x d ? 1 ∈ P i ) = ∑ i = 0 d ? 1 r i x e i j ( d ? 1 ) m o d ?? 2 d ∈ P j \sigma_{i \to j}\left(\sum_{i=0}^{d-1}r_ix^{d-1} \in P_i \right) = \sum_{i=0}^{d-1}r_ix^{e_{ij}(d-1) \mod 2d} \in P_j σij?(i=0d?1?ri?xd?1Pi?)=i=0d?1?ri?xeij?(d?1)mod2dPj?

其中 e i j ∈ [ 1 , 2 d ] e_{ij} \in [1,2d] eij?[1,2d] 是奇数。

于是,我们可以将一个密文上划分出 d d d(或者 d d d 的因子,类似不完全NTT)个明文槽plaintext slots),第 i i i 个明文的取值范围是理想 P i P_i Pi? 对应的商环 R P i R_{P_i} 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 p1mod2d
  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 的电路上的

注意,这里的 p = O ( p o l y ( λ ) ) p=O(poly(\lambda)) p=O(poly(λ)),此时同态运算的额外的噪声是多项式的。对于超多项式的 p p p ,噪音增长严重,从而无法使用。

使用 Batching 技术,计算一个密文的同态运算,就达到了 d d d 个明文的运算,因此效率几乎(因为模数 q ( x ) q(x) q(x) 2 2 2增大到了 p p p,算术运算会慢一些)提高了 d d d

Bootstrapping as an Optimization

自举的优点为:

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

对于 LWE 版本的 BGV,解密函数为: m = [ [ < c , s > ] q ] 2 m = [[<c,s>]_q]_2 m=[[<c,s>]q?]2?,可以用 R 2 = Z 2 R_2=\mathbb Z_2 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,解密函数中的向量长度为 2 2 2,每个分量都是多项式环 Z 2 [ x ] / ( f ( x ) ) \mathbb Z_2[x]/(f(x)) Z2?[x]/(f(x)) 上的乘积,可以使用 DFT 来计算。其 Bootstrapping 的电路规模与 LWE 版本的类似。

由于噪声增长的没那么快,因此我们可以 Bootstrapping Lazily,每 L L L 层才自举一次,其他层都不执行自举程序。经最优化,得到:
L = θ ( log ? λ ) L = \theta(\log \lambda) 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 0RPi??,i=1

  2. 利用理想之间的环 R R R 自同构映射 σ i → j \sigma_{i \to j} σij?,将各个槽里的明文进行搬移
    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=[[<σij?(c),σij?(s)>]q?]Pj??

  3. 选取 u ∈ 1 + P 1 u \in 1+P_1 u1+P1?,且 u ∈ P i , i ≠ 1 u \in P_i,i \neq 1 uPi?,i=1,这用于将其他槽的内容清零

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

在这里插入图片描述
在这里插入图片描述
只要上边的私钥链 s 1 , s 2 , ? s_1,s_2,\cdots s1?,s2?,? 是无环的,那么就可以避免 circular security problem,但需要存储的密钥切换映射 τ \tau τ 就会多一些。如果我们假设它是循环安全的,那么就只需要存储一个私钥 s s s 的那些映射即可。

利用上述的 Pack 和 Unpack,就可以对电路同一层的密文执行并行的 Bootstrapping。如果电路的宽度足够大(每一层的宽度为 O ( λ ) O(\lambda) O(λ)),那么 Bootstrapping 的计算复杂度可以降低一个 log ? λ \log \lambda logλ 因子

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

Plaintext Spaces

上述的方案中, R q R_q Rq?上的 q j ( x ) q_j(x) qj?(x) 都选做了素数。如果我们想要在很大的明文空间 Z p \mathbb Z_p Zp?上运算,那么 q j q_j qj?就不得不选取为安全参数 λ \lambda λ的指数级。此时 q j / B q_j/B qj?/B B B B是噪声上界)是指数级的,导致 LWE 问题不难。

因此,我们不直接使用 Z p \mathbb Z_p Zp?作为明文空间,而是使用同构的 R / I R/I R/I,其中 [ R ; I ] = p [R;I]=p [RI]=p,同时获得理想 I I I的一组短格基 B I B_I BI? ∥ B I ∥ = O ( p o l y ( d ) ? p 1 / d ) \|B_I\|=O(poly(d) \cdot p^{1/d}) BI?=O(poly(d)?p1/d))。对于“ladder”,我们选取多项式 q j ∈ R q_j \in R qj?R,构造主理想 ( q j ) (q_j) (qj?),使它满足 q j ∈ 1 + I q_j \in 1+I qj?1+I ∥ q j + 1 ∥ / ∥ q j ∥ \|q_{j+1}\|/\|q_j\| qj+1?∥/∥qj? 大约为 2 μ 2^\mu 2μ 大小,令理想 ( q j ) (q_j) (qj?)rotation basis 为:
B q j = { x i q j ( x ) m o d ?? f ( x ) } i = 0 d ? 1 B_{q_j} = \{x^iq_j(x) \mod f(x)\}_{i=0}^{d-1} Bqj??={xiqj?(x)modf(x)}i=0d?1?

R q j + 1 R_{q_{j+1}} Rqj+1?? 模切换到 R q j R_{q_j} 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) 怎么定义的?相邻多项式的范数之比是什么几何意义?

先写在这儿等以后回顾。

  区块链 最新文章
盘点具备盈利潜力的几大加密板块,以及潜在
阅读笔记|让区块空间成为商品,打造Web3云
区块链1.0-比特币的数据结构
Team Finance被黑分析|黑客自建Token“瞒天
区块链≠绿色?波卡或成 Web3“生态环保”标
期货从入门到高深之手动交易系列D1课
以太坊基础---区块验证
进入以太坊合并的五个数字
经典同态加密算法Paillier解读 - 原理、实现
IPFS/Filecoin学习知识科普(四)
上一篇文章      下一篇文章      查看所有文章
加:2022-10-17 12:39:00  更:2022-10-17 12:39:24 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:16:54-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码