| |
|
开发:
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 |
参考文献:
文章目录基础知识快速数论变换 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 的不交并。做商环: 最简单的,可令 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
p≡1mod2d,那么在
R
p
R_p
Rp? 上多项式
f
(
x
)
f(x)
f(x) 可以完全分解为线性的互素因式, 从而根据 CRT,令
P
i
=
(
x
?
ξ
i
,
?
p
)
P_i = (x-\xi_i,\, p)
Pi?=(x?ξi?,p) 为彼此互素的理想,有: 简记 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 的描述为: 其中 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]
BGVBasic Encryption SchemeBGV 方案基于 BV 方案(在文章 全同态加密(FHE) 中介绍)。在 BGV 中,首先表述了基于 GLWE 的 BV 方案:
在 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}
A∈Rm×n,B∈Rp×q的 Kronecker product 定义为:
根据上述性质,易知 因此,
然而,上述的同态乘法有很大的缺陷:密文和私钥的规模指数级增大,噪声指数级增大。 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,易知: 密钥切换的程序为: 可以理解为:寻找 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)),而噪声比率约束了密文的同态能力。似乎降低噪音绝对大小并不会提高同态能力。然而,对于乘法来说:
模切换的程序为: (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 作为优化(而非必需)。 OptimizationsBatching上述的 BGV 方案中,设置了 p = 2 p=2 p=2,从而可以对商环 R 2 R_2 R2? 上的明文做运算。 奇素数
p
≡
1
m
o
d
??
2
d
p \equiv 1 \mod 2d
p≡1mod2d,根据数论可以知道, 其中 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}
σi→j?,使得
σ
i
→
j
(
P
i
)
=
P
j
\sigma_{i \to j}(P_i)=P_j
σi→j?(Pi?)=Pj?,确切地说: 其中 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 方案,
注意,这里的 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自举的优点为:
对于 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? 上的算术电路来计算它:
对于 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 层才自举一次,其他层都不执行自举程序。经最优化,得到: Batching the Bootstrapping Operation上述的 Batching 方案,每个明文槽都只能和对应的明文槽内的明文做运算。如果我们想让它们之间也可以交互计算怎么办呢? 思路是,
实现 Pack 和 Unpack 函数,进行 normal homomorphic operation 和 batch operation 之间的转换:
利用上述的 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
[R;I]=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 为: 从 R q j + 1 R_{q_{j+1}} Rqj+1?? 模切换到 R q j R_{q_j} Rqj?? 的算法为: 说实话,这一节博主我没怎么看懂 (╥﹏╥) ,
先写在这儿等以后回顾。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |