概述
2013 年,Gentry 等人使用近似特征向量技术,设计了一个无需计算密钥的全同态加密方案:GSW,拉开了第三代全同态加密的帷幕。2014年,Chris Peikert 等人提出了一个更简单的对称 GSW 方案,并用之设计了一个快速的自举算法。
首先看 2013 年 GSW 方案的论文标题:Homomorphic Encryption from Learning with Errors Conceptually-Simpler,Asymptotically-Faster, Attribute-Based
- 同态加密和 LWE 问题不再赘述。
- Conceptually-Simpler:从概念上更加简单。因为在 GSW 方案中所使用的的密文都是矩阵。因此在进行同态运算加或乘的时候,只需将矩阵进行加或乘即可。在这之前,同态加密运算乘法非常复杂。
- Asymptotically-Faster:渐进更快。在理论上每次乘法的计算量为 n ω n^{\omega} nω ,其中 ω < 2.3727 \omega < 2.3727 ω<2.3727 是矩阵乘法常数。以往的方案中重线性化都需要 n 3 n^3 n3 的计算量。
- First identity-based FHE scheme:本文提出了第一个基于身份的 FHE 方案,即相同身份 (ID) 下的密文可以进行同态运算。
- First attribute-based FHE scheme:本文提出了第一个基于属性的 FHE 方案,即相同属性下的密文可以进行同态运算。
此外,由于该方案是基于 BGV 方案设计的同态加密方案,因此从 BGV 方案中继承了许多优点:
- 这是一个不需要自举的层次同态(多项式层)
- 没有模转换 (modulus switching)
- 安全性保障:
- Based on classical GapSVP (基于经典 GapSVP)
- 如果使用自举:Based on LWE for quasi-polynomial factors (基于拟多项式参数的 LWE)
GSW 方案整体思想:近似特征向量技术
基础设置
首先假设我们有这样的一个设置:一个矩阵
C
{\color{blue}C}
C 乘以
v
{\color{green}v}
v 等于一个特征值乘以
v
{\color{green}v}
v ,
v
{\color{green}v}
v 是这个矩阵的特征向量,这里的
μ
{\color{red}\mu}
μ 是特征值:
现在想象一下,把
C
{\color{blue}C}
C 看作密文,
v
{\color{green}v}
v 看作密钥,要加密的消息是
μ
{\color{red}\mu}
μ :
很容易可以发现这个形式具有同态的性质:密文的加或乘相当于明文的加或者乘。即假设
C
1
⋅
v
=
μ
1
⋅
v
{\color{blue}C_1} \sdot {\color{green}v} = \mu_1 \sdot {\color{green}v}
C1⋅v=μ1⋅v mod
q
q
q ,并且
C
2
⋅
v
=
μ
2
⋅
v
{\color{blue}C_2} \sdot {\color{green}v} = \mu_2 \sdot {\color{green}v}
C2⋅v=μ2⋅v mod
q
q
q ,则
C
1
⋅
C
2
⋅
v
=
μ
1
⋅
μ
2
⋅
v
{\color{blue}C_1} \sdot {\color{blue}C_2} \sdot {\color{green}v} = \mu_1 \sdot \mu_2 \sdot {\color{green}v}
C1⋅C2⋅v=μ1⋅μ2⋅v mod
q
q
q
然而,这个形式虽然具有同态的性质,但是很明显非常的不安全,因为找到一个矩阵的特征向量很简单,密钥很容易得到。为了保证安全性,我们可以将其转换为 LWE 的形式:
- e e e 是系数很小的噪声向量 (<<q)
- v {\color{green}v} v 是一个近似特征向量 (approximate eigenvector)
方案的同态性质
现在我们来看看同态的性质是否还在:
发现同态加和乘仍然成立,但是乘法中有新的噪声项。
方案的噪声处理
为了让这个噪声项尽量小,我们对这个新的噪声进行分析:
- 可以减小 μ 2 {\color{red}\mu_2} μ2 ,即让消息空间变小。要达到这个目的仅需将消息空间设置成 { 0 , 1 } \{0, 1\} {0,1} 即可。GSW 方案中使用与非门 (NAND gats) 可将消息空间设置成 { 0 , 1 } \{0, 1\} {0,1} 。
- 可以使密文 C {\color{blue}C} C 变小。密文可能是两个密文的乘法,即使初始的密文很小,计算后也可能得到较大的密文。是否能有什么技术能够使得密文一直保持在很小的范围内(甚至在 {0, 1} 内)?文中提出一种 Flatten ciphertext 的技术。
如果我们能够限制密文的大小:
- 同态乘法会将噪声扩大至多 n + 1 n + 1 n+1 倍(全部代入 1 可得)
- 在噪声达到 q q q 之前可以评估深度为 Θ ( l o g n + 1 q ) \Theta(log_{n + 1} q) Θ(logn+1q) 的电路
- 令 q q q 足够大,例如令 q = 2 n Θ ( 1 ) q = 2 ^{n^{\Theta(1)}} q=2nΘ(1) ,则我们可以评估多项式深度,并且得到一个层次全同态方案。
限制密文大小
那么我们怎么限制密文的大小?这里需要使用分解技术。
首先先定义一些符号:
- a ∈ Z q k \pmb{a} \in \mathbb{Z}_q^k aaa∈Zqk 其中 k k k 是维度, q q q 是模。
- l = ⌊ l o g q ⌋ + 1 l = \lfloor log_q \rfloor + 1 l=⌊logq⌋+1 是 q q q 的对数
- N = k ⋅ l N = k \sdot l N=k⋅l
定义一些函数:
- B i t D e c o m p ( a ) = ( a 1 , 0 , . . . , a 1 , l − 1 , . . . , a k , 0 , . . . , a k , l − 1 ) BitDecomp(\pmb{a}) = (a_{1, 0}, ..., a_{1, l-1}, ..., a_{k, 0}, ..., a_{k, l-1}) BitDecomp(aaa)=(a1,0,...,a1,l−1,...,ak,0,...,ak,l−1) 是 a \pmb{a} aaa 的每个系数的比特分解,从最低位到最高位 (least to most significant)。
- B i t D e c o m p − 1 ( b ∈ Z q N ) = ( ∑ j 2 j b 1 , j m o d q , . . . , ∑ j 2 j b k , j m o d q ) BitDecomp^{-1}(\pmb{b} \in \mathbb{Z}_q^N) = (\sum_j 2^j b_{1, j}\; mod \; q, ..., \sum_j 2^j b_{k, j} \; mod \; q) BitDecomp−1(bbb∈ZqN)=(∑j2jb1,jmodq,...,∑j2jbk,jmodq) 是上面那个比特分解函数的逆函数。
- F l a t t e n ( b ∈ Z q N ) = B i t D e c o m p ( B i t D e c o m p − 1 ( b ) ) Flatten(\pmb{b} \in \mathbb{Z}_q^N) = BitDecomp(BitDecomp^{-1} (\pmb{b})) Flatten(bbb∈ZqN)=BitDecomp(BitDecomp−1(bbb)) 是一个系数都在 { 0 , 1 } \{0, 1\} {0,1} 中的向量。
- P o w e r s o f 2 ( s ) = ( s 1 , 2 s 1 , . . . , 2 l − 1 s 1 , . . . , s k , 2 s k , . . . , 2 l − 1 s k ) m o d q Powersof2(s) = (s_1, 2s_1, ..., 2^{l - 1}s_1, ..., s_k, 2s_k, ..., 2^{l -1}s_k) \; mod \; q Powersof2(s)=(s1,2s1,...,2l−1s1,...,sk,2sk,...,2l−1sk)modq
有一些显而易见的结论:
- 对于任意 a , s ∈ Z q k \pmb{a}, \pmb{s} \in \mathbb{Z}_q^k aaa,sss∈Zqk ,有 < a , s > = < B i t D e c o m p ( a ) , P o w e r s o f 2 ( s ) > <\pmb{a}, \pmb{s}> = <BitDecomp(\pmb{a}), Powersof2(\pmb{s})> <aaa,sss>=<BitDecomp(aaa),Powersof2(sss)>
- 对于任意 b ∈ Z q N \pmb{b} \in \mathbb{Z}_q^N bbb∈ZqN 和 s ∈ Z q k \pmb{s} \in \mathbb{Z}_q^k sss∈Zqk ,有 < b , P o w e r s o f 2 ( s ) > = < B i t D e c o m p − 1 ( b ) , s > = < F l a t t e n ( b ) , P o w e r s o f 2 ( s ) > <\pmb{b}, Powersof2(\pmb{s})> = <BitDecomp^{-1}(\pmb{b}), \pmb{s}> = <Flatten(\pmb{b}), Powersof2(\pmb{s})> <bbb,Powersof2(sss)>=<BitDecomp−1(bbb),sss>=<Flatten(bbb),Powersof2(sss)>
这些函数和结论如何在同态加密方案中应用呢?
现在我们给出近似特征向量的一个特殊形式:
- v = P o w e r s o f 2 ( s ) {\color{green}v} = Powersof2(s) v=Powersof2(s) 其中 s s s 是随机的
开始 Flatten Ciphertext (展平密文):
- 假设对于一个与非门(NAND): C N A N D = I N − C 1 ⋅ C 2 m o d q {\color{blue}C^{NAND}} = I_N - {\color{blue}C_1} \sdot {\color{blue}C_2} \; mod \; q CNAND=IN−C1⋅C2modq
- 令 C 3 ← F l a t t e n ( C N A N D ) {\color{blue}C_3} \leftarrow Flatten({\color{blue}C^{NAND}}) C3←Flatten(CNAND) 为 C N A N D {\color{blue}C^{NAND}} CNAND 每一行的展平结果, C 3 {\color{blue}C_3} C3 中所有的系数都在集合 { 0 , 1 } \{0, 1\} {0,1} 中。
- 则 C 3 ⋅ v = C N A N D ⋅ v m o d q {\color{blue}C_3} \sdot {\color{green}v} = {\color{blue}C^{NAND}} \sdot {\color{green}v} \; mod \; q C3⋅v=CNAND⋅vmodq ,我们没有改变加密的消息,甚至没有增加噪声。
现在,我们拥有了一个层次全同态。
GSW 基本加密方案
- 设置
S
e
t
u
p
(
1
n
,
1
L
)
Setup(1^n, 1^L)
Setup(1n,1L) :选择一个
k
=
k
(
λ
,
L
)
k = k(\lambda, L)
k=k(λ,L) bit 的模
q
q
q ,格的维度参数是
n
=
n
(
λ
,
L
)
n = n(\lambda, L)
n=n(λ,L) ,适当地为 LWE 取误差分布
X
=
X
(
λ
,
L
)
X = X(\lambda, L)
X=X(λ,L) 使得在已知攻击下达到
2
λ
2^{\lambda}
2λ 的安全性。同时,选择参数
m
=
m
(
λ
,
L
)
=
O
(
n
l
o
g
q
)
m = m(\lambda, L) = O(n log \, q)
m=m(λ,L)=O(nlogq) 。令参数集
p
a
r
a
m
s
=
(
n
,
q
,
X
,
m
)
params = (n, q, X, m)
params=(n,q,X,m) ,令
l
=
⌊
l
o
g
q
⌋
+
1
,
N
=
(
n
+
1
)
⋅
l
l = \lfloor log _q \rfloor + 1, N = (n + 1) \sdot l
l=⌊logq⌋+1,N=(n+1)⋅l 。
- 密钥生成 S e c r e t K e y G e n ( p a r a m s ) SecretKeyGen(params) SecretKeyGen(params) :采样 t ⃗ ← Z q n \vec{t} \leftarrow \mathbb{Z}_q^n t←Zqn ,输出 s k = s ⃗ ← ( 1 , − t 1 , . . . , − t n ) ∈ Z q n + 1 sk = \vec{s} \leftarrow (1, -t_1, ..., -t_n) \in \mathbb{Z}_q^{n + 1} sk=s←(1,−t1,...,−tn)∈Zqn+1 。令 v ← P o w e r s o f 2 ( s ) ∈ Z q N v \leftarrow Powersof2(s) \in \mathbb{Z}_q^N v←Powersof2(s)∈ZqN
- 公钥生成
P
u
b
l
i
c
K
e
y
G
e
n
(
p
a
r
a
m
s
,
s
k
)
PublicKeyGen(params, sk)
PublicKeyGen(params,sk) :均匀生成一个矩阵
B
←
Z
q
m
×
n
B \leftarrow \mathbb{Z}_q^{m \times n}
B←Zqm×n 和一个向量
e
⃗
←
χ
m
\vec{e} \leftarrow \chi^m
e←χm ,设
b
⃗
=
B
⋅
t
⃗
+
e
⃗
\vec{b} = B \sdot \vec{t} + \vec{e}
b=B⋅t+e ,设
A
A
A 为
(
n
+
1
)
(n + 1)
(n+1)-列矩阵,由
b
⃗
\vec{b}
b 和
B
B
B 的
n
n
n 列组成。设置公钥为
p
k
=
A
pk = A
pk=A (注意:观察到
A
⋅
s
⃗
=
e
⃗
A \sdot \vec{s} = \vec{e}
A⋅s=e ),这里公钥看作一个LWE实例,是由向量组成的矩阵,且与密钥点积得到的结果很小。
- 加密 E n c ( A , μ ) Enc(A, \mu) Enc(A,μ) :为了加密消息 μ ∈ Z q \mu \in \mathbb{Z}_q μ∈Zq ,均匀采样一个矩阵 R ∈ { 0 , 1 } N × m R \in \{ 0, 1 \}^{N \times m} R∈{0,1}N×m ,可得 A ⋅ R A \sdot R A⋅R 的每一行为 0 0 0 的加密,因为他们与密钥的点积的结果非常小。同时输出如下的密文 C C C : C = F l a t t e n ( μ ⋅ I N + B i t D e c o m p ( R ⋅ A ) ) ∈ Z q N × N C = Flatten(\mu \sdot I_N + BitDecomp(R \sdot A)) \in \mathbb{Z}_q^{N \times N} C=Flatten(μ⋅IN+BitDecomp(R⋅A))∈ZqN×N
- 解密
D
e
c
(
C
,
v
)
Dec(C, v)
Dec(C,v) :计算
C
⋅
v
=
μ
⋅
v
+
B
i
t
d
e
s
o
m
p
(
R
⋅
A
)
⋅
v
=
μ
⋅
v
+
R
⋅
A
⋅
s
=
μ
⋅
v
+
s
m
a
l
l
C \sdot v = \mu \sdot v + Bitdesomp(\pmb{R} \sdot \pmb{A}) \sdot v = \mu \sdot v + \pmb{R} \sdot \pmb{A} \sdot \pmb{s} = \mu \sdot v + small
C⋅v=μ⋅v+Bitdesomp(RRR⋅AAA)⋅v=μ⋅v+RRR⋅AAA⋅sss=μ⋅v+small ,从
2
l
−
1
+
s
m
a
l
l
2^{l - 1} + small
2l−1+small 中获得明文
μ
\mu
μ 。
- 同态操作:在密文上进行加法/乘法后,展平密文。
整个方案的安全性可规约到 LWE 困难问题(通过左哈希引理 leftover hash lemma)。
基于该方案可构造 IBE 或 ABE
参考资料
- 参考论文:Gentry C, Sahai A, Waters B. Homomorphic encryption from learning with errors: Conceptually-simpler, asymptotically-faster, attribute-based[C]//Annual Cryptology Conference. Springer, Berlin, Heidelberg, 2013: 75-92.
- 参考论文:Alperin-Sheriff, Jacob, and Chris Peikert. “Faster bootstrapping with polynomial error.” Annual Cryptology Conference. Springer, Berlin, Heidelberg, 2014.
- 参考视频:https://www.youtube.com/watch?v=uabmoq4-tGQ
- 参考视频:https://www.youtube.com/watch?v=tczcle2T-Ak
- 参考 PPT :http://yuyu.hk/files/FHE.pdf
- 参考文章:https://blog.csdn.net/Artisgrammer/article/details/99436600
- 参考文章:https://blog.csdn.net/yuxinqingge/article/details/104566212