《全同态加密理论、生态现状与未来展望》系列由lynndell2010@gmail.com和mutourend2010@gmail.com整理原创发布,分为上中下三个系列:
- 全同态加密理论、生态现状与未来展望(上):专注于介绍全同态加密理论知识。
- 全同态加密理论、生态现状与未来展望(中1):专注于介绍全同态加密四代算法中第一代第二代FHE算法的衍化历程。
- 全同态加密理论、生态现状与未来展望(中2):专注于介绍全同态加密四代算法中第三代第四代FHE算法的衍化历程。
- 全同态加密理论、生态现状与未来展望(下):专注于介绍当前全同态加密生态现状及未来展望。
整个系列内容可能存在纰漏,希望能得到大家的反馈,有任何问题欢迎邮件联系lynndell2010@gmail.com和mutourend2010@gmail.com,或在本文下方评论留言。
1. 引言
1.1 格基本概念
1.1.1 格定义
定义 1 (格). 设
v
1
,
v
2
,
⋯
,
v
n
∈
R
m
\mathbf{v}_1, \mathbf{v}_2, \cdots, \mathbf{v}_n \in \mathbb{R}^m
v1,v2,⋯,vn∈Rm为一组线性无关的向量。由
v
1
,
v
2
,
⋯
,
v
n
\mathbf{v}_1, \mathbf{v}_2, \cdots, \mathbf{v}_n
v1,v2,⋯,vn 生成的格
L
L
L 指的是向量
v
1
,
v
2
,
⋯
,
v
n
\mathbf{v}_1, \mathbf{v}_2, \cdots, \mathbf{v}_n
v1,v2,⋯,vn的线性组合构成的向量集合,且其所有的系数均在
Z
\mathbb{Z}
Z 中,即:
L
=
{
a
1
v
1
+
a
2
v
2
+
⋯
+
a
n
v
n
:
a
1
,
a
2
,
⋯
,
a
n
∈
Z
,
v
1
,
v
2
,
⋯
,
v
n
∈
R
m
}
.
L = \{ a_1\mathbf{v}_1 + a_2\mathbf{v}_2 + \cdots + a_n\mathbf{v}_n : a_1, a_2, \cdots, a_n \in \mathbb{Z},\mathbf{v}_1, \mathbf{v}_2, \cdots, \mathbf{v}_n \in \mathbb{R}^m\}.
L={a1v1+a2v2+⋯+anvn:a1,a2,⋯,an∈Z,v1,v2,⋯,vn∈Rm}.
任意一组可以生成格的线性无关的向量称为格的基,格基的向量个数称为格的维度。
1.1.2 格计算困难问题
-
最短向量问题(SVP):
在格 L L L中求一个非零向量 v ∈ L \mathbf{v} \in L v∈L,使它的欧几里得范数 ∣ ∣ v ∣ ∣ = v ⋅ v ||\mathbf{v}||=\sqrt {\mathbf{v} \cdot \mathbf{v}} ∣∣v∣∣=v⋅v最小。 -
最近向量问题(CVP):
已知一个不在格 L L L中的向量 w ∈ R m \mathbf{w} \in \mathbb{R}^m w∈Rm,求一个向量 v ∈ L \mathbf{v} \in L v∈L,使它最接近 w \mathbf{w} w。换言之,求一个向量 v ∈ L \mathbf{v} \in L v∈L,使欧几里得范数 ∣ ∣ w − v ∣ ∣ ||\mathbf{w}-\mathbf{v}|| ∣∣w−v∣∣最小。
在格中可能存在不止一个最短的非零向量(找出一个即可)。例如,在 Z 2 Z^2 Z2中, ( 0 , ± 1 ) (0,\pm1) (0,±1)和 ( ± 1 , 0 ) (\pm 1,0) (±1,0)这四个向量都是SVP解。这种情形也适用于CVP。
随着格的维度 n n n的增加,在计算上也越来越难解。另外,即使是对SVP和CVP的近似解,在理论和应用数学的诸多领域都有许多应用。通常,CVP被认为是NP难问题,SVP在特定的"随机规约假设"下也被认为是NP难问题。
1.1.3 最短基问题(SBP)
在实际应用中,有一些很重要的SVP和CVP的变形SBP:
求一个格基
v
1
,
v
2
,
…
,
v
n
\mathbf{v}_1,\mathbf{v}_2,\dots,\mathbf{v}_n
v1,v2,…,vn,使它在某些情况下最短。如可能需要使下式最小:
m
a
x
1
≤
i
≤
n
∣
∣
v
i
∣
∣
∨
∑
i
=
1
n
∣
∣
v
i
∣
∣
2
max_{1 \leq i \leq n}||\mathbf{v}_i||~~~\vee~~~ \sum_{i=1}^n||\mathbf{v}_i||^2
max1≤i≤n∣∣vi∣∣ ∨ i=1∑n∣∣vi∣∣2
因此,可能有许多版本的SBP,这取决于如何定义基的"大小"。
1.1.4 近似最短/最近向量问题
近似最短向量问题(apprSVP): 设
Ψ
(
n
)
\Psi (n)
Ψ(n)是
n
n
n的一个函数。在
n
n
n维格
L
L
L中,求一个非零向量,使其不大于最短非零向量的
Ψ
(
n
)
\Psi (n)
Ψ(n)倍。
换言之,如果
v
shortest
\mathbf{v}_{\text{shortest}}
vshortest是格
L
L
L的最短非零向量,则求一个非零向量
v
∈
L
\mathbf{v} \in L
v∈L,使其满足:
∣
∣
v
∣
∣
≤
Ψ
(
n
)
∣
∣
v
shortest
∣
∣
||\mathbf{v}|| \leq \Psi (n) ||\mathbf{v}_\text{shortest}||
∣∣v∣∣≤Ψ(n)∣∣vshortest∣∣
不同函数
Ψ
(
n
)
\Psi(n)
Ψ(n)可形成不同的apprSVP。如要求设计一个算法,用于求非零的向量
v
∈
L
\mathbf{v} \in L
v∈L,满足:
∣
∣
v
∣
∣
≤
3
n
∣
∣
v
shortest
∣
∣
∨
∣
∣
v
∣
∣
≤
2
n
/
2
∣
∣
v
shortest
∣
∣
||\mathbf{v}|| \leq 3 \sqrt{n}||\mathbf{v}_{\text{shortest}}||~~~\vee~~~ ||\mathbf{v}|| \leq 2^{n/2}||\mathbf{v}_{\text{shortest}}||
∣∣v∣∣≤3n∣∣vshortest∣∣ ∨ ∣∣v∣∣≤2n/2∣∣vshortest∣∣
很明显,前者的算法比后者要强,但如果格的维度不大,即使对后者的解也可能是非常有用的。
近似最近向量问题(apprCVP): 与apprSVP类似,需要求CVP的近似解。
1.1.5 LWE困难问题
LWE搜索困难问题: 已知矩阵
A
∈
Z
q
m
n
\mathbf{A}\in \mathbb{Z}_q^{mn}
A∈Zqmn和向量
b
∈
Z
q
m
\mathbf{b}\in \mathbb{Z}_q^{m}
b∈Zqm,求向量
s
∈
Z
q
n
\mathbf{s}\in\mathbb{Z}_q^{n}
s∈Zqn是困难的。其中,
b
=
A
s
+
e
m
o
d
q
.
\mathbf{b}=\mathbf{A}\mathbf{s}+\mathbf{e}\mod q.
b=As+emodq.
e
∈
Z
N
m
\mathbf{e}\in \mathbb{Z}_N^{m}
e∈ZNm是噪声(欧几里得范数很小)。
图1:LWE 搜索困难问题
LWE判决困难问题: 已知矩阵 A ∈ Z q m n \mathbf{A}\in \mathbb{Z}_q^{mn} A∈Zqmn和向量 b ∈ Z q m \mathbf{b}\in \mathbb{Z}_q^{m} b∈Zqm,判断是LWE实例,还是随机数实例。
1.1.6 环LWE困难问题
模
q
≥
2
q\ge 2
q≥2,多项式次数
n
≥
1
n\ge 1
n≥1是2的幂次方,多项式为
f
(
x
)
=
x
n
+
1
f(x)=x^n+1
f(x)=xn+1。环
R
=
Z
[
x
]
/
f
(
x
)
R=\mathbb{Z}[x]/f(x)
R=Z[x]/f(x),环
R
q
=
Z
q
[
x
]
/
f
(
x
)
R_q=\mathbb{Z}_q[x]/f(x)
Rq=Zq[x]/f(x)。
χ
\chi
χ是
R
R
R上的一个噪声概率分布。
A
ˉ
s
,
χ
\bar A_{s,\chi}
Aˉs,χ是
R
q
×
R
q
R_q\times R_q
Rq×Rq上的一个概率分布。该分布以如下方式获得:随机选择
a
∈
R
q
\mathbf{a}\in R_q
a∈Rq,根据分布
χ
\chi
χ选择噪声向量
e
∈
R
q
\mathbf{e}\in R_q
e∈Rq,则
A
ˉ
s
,
χ
=
(
a
,
b
)
=
(
a
,
a
∙
s
+
e
)
∈
R
q
×
R
q
\bar A_{s,\chi }=(\mathbf{a},\mathbf{b})=(\mathbf{a},\mathbf{a}\bullet \mathbf{s}+\mathbf{e})\in R_q\times R_q
Aˉs,χ=(a,b)=(a,a∙s+e)∈Rq×Rq
环LWE搜索困难问题: 已知
(
a
,
b
)
∈
R
q
×
R
q
(\mathbf{a},\mathbf{b})\in R_q\times R_q
(a,b)∈Rq×Rq,求
s
∈
R
q
\mathbf{s}\in R_q
s∈Rq是困难的。
环LWE判决困难问题: 已知环LEW
(
a
,
b
)
∈
R
q
×
R
q
(\mathbf{a},\mathbf{b})\in R_q\times R_q
(a,b)∈Rq×Rq实例与随机均匀分布实例
(
a
′
,
b
′
)
(\mathbf{a}',\mathbf{b}')
(a′,b′),无法区分。
1.1.7 优质基与劣质基
图2:优质基与劣质基
-
优质基: 向量角度比较大(Hadamard比率较大,接近1)。使用优质基,调用Babai算法,能在多项式时间内求解CVP困难问题;
-
劣质基: 向量角度比较小(Hadamard比率较小,接近0)。使用劣质基,不能在多项式时间内求解CVP困难问题。
已知优质基
V
=
(
v
1
,
.
.
.
,
v
n
)
\mathbf{V}=(\mathbf{v}_1,...,\mathbf{v}_n)
V=(v1,...,vn),能在多项式时间内求劣质基
W
=
(
w
1
,
.
.
.
,
w
n
)
\mathbf{W}=(\mathbf{w}_1,...,\mathbf{w}_n)
W=(w1,...,wn)。
求解方法: 选择随机矩阵
A
\mathbf{A}
A,要求
det
(
A
)
=
±
1
\det (\mathbf{A})=\pm1
det(A)=±1,则
W
:
=
A
V
\mathbf{W}:=\mathbf{A}\mathbf{V}
W:=AV
反之,已知劣质基
W
\mathbf{W}
W,不能在多项式时间内求优质基
V
\mathbf{V}
V。
1.1.8 Babai算法
已知优质基
V
=
(
v
1
,
.
.
.
,
v
n
)
\mathbf{V}=(\mathbf{v}_1,...,\mathbf{v}_n)
V=(v1,...,vn),求目标向量
w
\mathbf{w}
w的最近向量,即解决CVP困难问题。
Babai算法包括以下三个步骤:
-
使用优质基,能在多项式时间内求实数 t i ∈ R t_i\in \mathbb{R} ti∈R,使得 w = t 1 v 1 + . . . + t n v n \mathbf{w}=t_1\mathbf{v}_1+...+t_n\mathbf{v}_n w=t1v1+...+tnvn,即任意向量由基线性表达。
-
对于实数 t i ∈ R t_i\in \mathbb{R} ti∈R,取四舍五入 a i = ⌈ t i ⌋ a_i = \lceil t_i \rfloor ai=⌈ti⌋。
-
计算向量 w ′ : = a 1 v 1 + . . . + a n v n \mathbf{w}':=a_1\mathbf{v}_1+...+a_n\mathbf{v}_n w′:=a1v1+...+anvn,则 w ′ \mathbf{w}' w′是 w \mathbf{w} w的最近向量。
分析:
使用优质基
(
v
1
,
.
.
.
,
v
n
)
(\mathbf{v}_1,...,\mathbf{v}_n)
(v1,...,vn),使得对
t
i
t_i
ti四舍五入时,误差较小,所以最终结果正确。
如果使用劣质基
(
w
1
,
.
.
.
,
w
n
)
(\mathbf{w}_1,...,\mathbf{w}_n)
(w1,...,wn)在多项式时间内求实数
t
i
∈
R
t_i\in \mathbb{R}
ti∈R,则四舍五入的误差较大,无法获得正确结果。
如果目标向量是一个噪声(欧几里得范数很小),则
t
i
t_i
ti非常接近0,四舍五入后获得的
a
i
a_i
ai等于0,因此Babai算法是去噪声算法,能找到最近向量,解决CVP困难问题。
1.1.9 GGH公钥密码系统
Public-key cryptosystems from lattice reduction problems
-
密钥生成: 选择一个优质基 V = ( v 1 , . . . , v n ) \mathbf{V}=(\mathbf{v}_1,...,\mathbf{v}_n) V=(v1,...,vn)作为私钥。选择一个整数矩阵 U \mathbf{U} U,使得 det ( U ) = ± 1 \det (\mathbf{U})= \pm 1 det(U)=±1。计算 W : = U V \mathbf{W}:=\mathbf{U}\mathbf{V} W:=UV,则获得劣质基 W = ( w 1 , . . . , w n ) \mathbf{W}=(\mathbf{w}_1,...,\mathbf{w}_n) W=(w1,...,wn)作为公钥。
-
加密: 消息为小向量 m \mathbf{m} m,选择噪声 r \mathbf{r} r,输入公钥 W \mathbf{W} W,如下计算:
c = m ⋅ W + r \mathbf{c}=\mathbf{m}\cdot\mathbf{W}+\mathbf{r} c=m⋅W+r
则密文为 c \mathbf{c} c。 -
解密: 使用私钥(优质基) V \mathbf{V} V,输入Babai算法,如下解密:
⌈ c V − 1 ⌋ ∙ V W − 1 = ⌈ ( m ⋅ W + r ) V − 1 ⌋ ∙ U − 1 = ⌈ m ⋅ W V − 1 + r V − 1 ⌋ ∙ U − 1 = ⌈ m ⋅ U V V − 1 + r V − 1 ⌋ ∙ U − 1 = ⌈ m ⋅ U + r V − 1 ⌋ ∙ U − 1 ≈ m ⋅ U ∙ U − 1 = m \begin{aligned} &\lceil \mathbf{c}\mathbf{V}^{-1}\rfloor \bullet\mathbf{V}\mathbf{W}^{-1}\\ &=\lceil (\mathbf{m}\cdot\mathbf{W}+\mathbf{r})\mathbf{V}^{-1}\rfloor\bullet \mathbf{U}^{-1} \\ &=\lceil\mathbf{m}\cdot\mathbf{W}\mathbf{V}^{-1}+\mathbf{r}\mathbf{V}^{-1}\rfloor\bullet \mathbf{U}^{-1}\\ &=\lceil\mathbf{m}\cdot\mathbf{U}\mathbf{V}\mathbf{V}^{-1}+\mathbf{r}\mathbf{V}^{-1}\rfloor\bullet \mathbf{U}^{-1}\\ &=\lceil\mathbf{m}\cdot\mathbf{U}+\mathbf{r}\mathbf{V}^{-1}\rfloor\bullet \mathbf{U}^{-1}\\ &\approx\mathbf{m}\cdot\mathbf{U}\bullet \mathbf{U}^{-1}\\ &=\mathbf{m} \end{aligned} ⌈cV−1⌋∙VW−1=⌈(m⋅W+r)V−1⌋∙U−1=⌈m⋅WV−1+rV−1⌋∙U−1=⌈m⋅UVV−1+rV−1⌋∙U−1=⌈m⋅U+rV−1⌋∙U−1≈m⋅U∙U−1=m
Babai算法中,如果噪声 r \mathbf{r} r欧几里得范数很小,则步骤1的 t i t_i ti一定更小,四舍五入后就是0,所以 ⌈ r V − 1 ⌋ ≈ 0 \lceil\mathbf{r}\mathbf{V}^{-1}\rfloor\approx 0 ⌈rV−1⌋≈0。
举例:
-
密钥生成: 私钥使用如下优质基:
V = [ v 1 v 2 v 3 v 4 v 5 ] = [ 81 15 17 60 29 − 53 7 49 46 − 11 2 84 − 6 − 68 − 97 11 − 96 92 70 − 70 28 − 58 98 − 89 24 ] \mathbf{V} = \left[ \begin{array}{l} {\mathbf{v}_1}\\ {\mathbf{v}_2}\\ {\mathbf{v}_3}\\ {\mathbf{v}_4}\\ {\mathbf{v}_5} \end{array} \right] = \left[ \begin{matrix} 81 & 15 & 17 & 60 & 29 \\ -53 & 7 & 49 & 46 & -11 \\ 2 & 84 & -6 & -68 & -97 \\ 11 & -96 & 92 & 70 & -70 \\ 28 & -58 & 98 & -89 & 24 \\ \end{matrix} \right] V= v1v2v3v4v5 = 81−532112815784−96−581749−692986046−6870−8929−11−97−7024
由 v 1 , v 2 , … , v 5 v_1, v_2, \dots, v_5 v1,v2,…,v5 作为基构成的格 L L L 的行列式值为
det ( L ) = 22655546896 \text{det}(L) = 22655546896 det(L)=22655546896 该基的 Hadamard 比率为
H ( v 1 , v 2 , … , v 5 ) = [ det ( L ) ∥ v 1 ∥ ∥ v 2 ∥ ∥ v 3 ∥ ∥ v 4 ∥ ∥ v 5 ∥ ] 1 / 5 ≈ 0.9249 \mathcal{H}(v_1, v_2, \dots, v_5) = \left[\frac{\text{det}(L)}{\|v_1\| \|v_2\| \|v_3\| \|v_4\| \|v_5\|}\right]^{1/5} \approx 0.9249 H(v1,v2,…,v5)=[∥v1∥∥v2∥∥v3∥∥v4∥∥v5∥det(L)]1/5≈0.9249
接近1,所以是优质基。选择如下随机矩阵: U = [ 16 111 139 − 16 − 95 − 91 − 642 − 747 185 471 − 103 − 677 − 1133 492 524 − 21 − 145 − 190 55 111 − 10 86 9 − 82 62 ] \mathbf{U} = \begin{bmatrix} 16 & 111 & 139 & -16 & -95 \\ -91 & -642 & -747 & 185 & 471 \\ -103 & -677 & -1133 & 492 & 524 \\ -21 & -145 & -190 & 55 & 111 \\ -10 & 86 & 9 & -82 & 62 \end{bmatrix} U= 16−91−103−21−10111−642−677−14586139−747−1133−1909−1618549255−82−9547152411162
满足 det ( U ) = 1 \text{det}(\mathbf{U}) = 1 det(U)=1。然后与私钥相乘,得到劣质基作为公钥:
W = U V = [ − 7145 19739 − 4237 3949 − 15400 40384 − 113685 25691 − 13165 75236 45356 − 179080 54894 27526 92497 9137 − 29008 7336 − 1039 18230 4600 4280 − 5798 − 16426 7011 ] \mathbf{W} = \mathbf{U}\mathbf{V} = \begin{bmatrix} -7145 & 19739 & -4237 & 3949 & -15400 \\ 40384 & -113685 & 25691 & -13165 & 75236 \\ 45356 & -179080 & 54894 & 27526 & 92497 \\ 9137 & -29008 & 7336 & -1039 & 18230 \\ 4600 & 4280 & -5798 & -16426 & 7011 \end{bmatrix} W=UV= −714540384453569137460019739−113685−179080−290084280−423725691548947336−57983949−1316527526−1039−16426−154007523692497182307011 可以看出,这组公钥基的 Hadamard
比率相对于私钥基来说非常小:
H ( w 1 , w 2 , … , w 5 ) = [ det ( L ) ∥ w 1 ∥ ∥ w 2 ∥ ∥ w 3 ∥ ∥ w 4 ∥ ∥ w 5 ∥ ] 1 / 5 ≈ 0.0021 \mathcal{H}(w_1, w_2, \dots, w_5) = \left[\frac{\text{det}(L)}{\|w_1\| \|w_2\| \|w_3\| \|w_4\| \|w_5\|}\right]^{1/5} \approx 0.0021 H(w1,w2,…,w5)=[∥w1∥∥w2∥∥w3∥∥w4∥∥w5∥det(L)]1/5≈0.0021
接近0,所以是劣质基。 -
加密: 消息为 m = ( − 78 , 48 , 5 , 66 , 89 ) \mathbf{m} = (-78, 48, 5, 66, 89) m=(−78,48,5,66,89),
选择随机噪声 r = ( − 9 , − 5 , 1 , − 2 , 4 ) \mathbf{r} = (-9, -5, 1, -2, 4) r=(−9,−5,1,−2,4), 使用如下公式加密:
c = m W + r \mathbf{c} = \mathbf{m}\mathbf{W} + \mathbf{r} c=mW+r 计算得到:
c = [ − 78 48 5 66 89 ] ⋅ [ − 7145 19739 − 4237 3949 − 15400 40384 − 113685 25691 − 13165 75236 45356 − 179080 54894 27526 92497 9137 − 29008 7336 − 1039 18230 4600 4280 − 5798 − 16426 7011 ] + [ − 9 − 5 1 − 2 4 ] = ( 3746835 , − 9425535 , 1806279 , − 2332802 , 7102176 ) \begin{aligned} \mathbf{c} &= \begin{bmatrix} -78 & 48 & 5 & 66 & 89 \end{bmatrix} \cdot \begin{bmatrix} -7145 & 19739 & -4237 & 3949 & -15400 \\ 40384 & -113685 & 25691 & -13165 & 75236 \\ 45356 & -179080 & 54894 & 27526 & 92497 \\ 9137 & -29008 & 7336 & -1039 & 18230 \\ 4600 & 4280 & -5798 & -16426 & 7011 \end{bmatrix} + \begin{bmatrix} -9 \\ -5\\1\\ -2 \\ 4 \end{bmatrix} \\ &= (3746835, -9425535, 1806279, -2332802, 7102176) \end{aligned} c=[−784856689]⋅ −714540384453569137460019739−113685−179080−290084280−423725691548947336−57983949−1316527526−1039−16426−154007523692497182307011 + −9−51−24 =(3746835,−9425535,1806279,−2332802,7102176) -
解密: 使用Babai算法解密。将 c \mathbf{c} c用私钥(优质基) v 1 , v 2 , … , v 5 v_1, v_2, \dots, v_5 v1,v2,…,v5表达。
由于 c \mathbf{c} c 中含有噪声 r \mathbf{r} r,因此有:
c ⋅ V − 1 ≈ [ − 8407.083 − 60082.952 − 64102.054 8919.983 45482.020 ] \mathbf{c} \cdot \mathbf{V}^{-1} \approx \begin{bmatrix} -8407.083 \\ -60082.952 \\ -64102.054 \\ 8919.983 \\ 45482.020 \end{bmatrix} c⋅V−1≈ −8407.083−60082.952−64102.0548919.98345482.020
四舍五入,再与私钥(优质基) V \mathbf{V} V相乘,即得到一个最近格向量(解决了CVP问题):
v ′ = ⌈ c ⋅ V − 1 ⌋ ⋅ V = [ − 8407 , − 60083 , − 64102 , 8920 , 45482 ] ⋅ V = [ 3746844 , − 9425530 , 1806278 , − 2332800 , 7102172 ] \begin{aligned} \mathbf{v'} &=\lceil \mathbf{c} \cdot \mathbf{V}^{-1}\rfloor\cdot \mathbf{V}\\ &=\begin{bmatrix}-8407 , -60083 , -64102 , 8920 , 45482\end{bmatrix}\cdot \mathbf{V}\\ &=\begin{bmatrix}3746844, -9425530, 1806278, -2332800, 7102172\end{bmatrix} \end{aligned} v′=⌈c⋅V−1⌋⋅V=[−8407,−60083,−64102,8920,45482]⋅V=[3746844,−9425530,1806278,−2332800,7102172]
这个结果等于前面的 m W \mathbf{m}\mathbf{W} mW,即密文 c \mathbf{c} c去掉了噪声。即 v ′ = c − r = m W \mathbf{v'} =\mathbf{c}- \mathbf{r} = \mathbf{m}\mathbf{W} v′=c−r=mW。
接下来计算: m = v ′ ⋅ W − 1 = [ 3746844 , − 9425530 , 1806278 , − 2332800 , 7102172 ] ⋅ W − 1 = [ − 78 , 48 , 5 , 66 , 89 ] \mathbf{m} = \mathbf{v}' \cdot \mathbf{W}^{-1} = \begin{bmatrix}3746844, -9425530, 1806278, -2332800, 7102172\end{bmatrix}\cdot W^{-1} =\begin{bmatrix}-78, 48, 5, 66, 89\end{bmatrix} m=v′⋅W−1=[3746844,−9425530,1806278,−2332800,7102172]⋅W−1=[−78,48,5,66,89] 解密成功。 -
攻击:
假设攻击者试图去破解密文,但只知道公钥(劣质基) W \mathbf{W} W。如果它对于公钥 W \mathbf{W} W应用
Babai算法的话,会得到:
c ⋅ W − 1 ≈ [ 3417.187 , 5205.909 , − 62877.902 , 351125.565 , − 130786.869 ] \mathbf{c} \cdot \mathbf{W} ^{-1}\approx \begin{bmatrix}3417.187,5205.909,-62877.902,351125.565, -130786.869 \end{bmatrix} c⋅W−1≈[3417.187,5205.909,−62877.902,351125.565,−130786.869]
然后四舍五入,同样会得到一个格向量:
v ′ ′ = ⌈ c ⋅ W − 1 ⌋ = [ 3417 , 5206 , − 62878 , 351126 , − 130787 ] \mathbf{v}'' = \lceil \mathbf{c} \cdot \mathbf{W} ^{-1} \rfloor = \begin{bmatrix} 3417, 5206, -62878, 351126, -130787 \end{bmatrix} v′′=⌈c⋅W−1⌋=[3417,5206,−62878,351126,−130787]
然后与公钥 W \mathbf{W} W相乘,即 v ′ ′ ⋅ W = ⌈ c ⋅ W − 1 ⌋ ⋅ W \mathbf{v}''\cdot \mathbf{W}= \lceil \mathbf{c} \cdot \mathbf{W} ^{-1} \rfloor\cdot \mathbf{W} v′′⋅W=⌈c⋅W−1⌋⋅W。
很明显,攻击者找到的是一个不正确的明文向量: m = [ 3417 , 5206 , − 62878 , 351126 , − 130787 ] m = \begin{bmatrix} 3417, 5206, -62878, 351126, -130787 \end{bmatrix} m=[3417,5206,−62878,351126,−130787]
对于不同的基,使用Babai算法的效果如下:
∥
c
−
v
′
∥
=
∥
c
−
⌈
c
V
−
1
⌋
∙
V
∥
=
11.2694
∥
c
−
v
′
′
∥
=
∥
c
−
⌈
c
W
−
1
⌋
∙
W
∥
≈
13264.50
\begin{aligned} &\| \mathbf{c} - \mathbf{v}' \| =\| \mathbf{c} - \lceil \mathbf{c}\mathbf{V}^{-1} \rfloor\bullet\mathbf{V} \|= 11.2694 \\ &\| \mathbf{c} - \mathbf{v}'' \| =\| \mathbf{c} - \lceil \mathbf{c}\mathbf{W}^{-1} \rfloor\bullet\mathbf{W} \|\approx 13264.50 \end{aligned}
∥c−v′∥=∥c−⌈cV−1⌋∙V∥=11.2694∥c−v′′∥=∥c−⌈cW−1⌋∙W∥≈13264.50
因此,对于劣质基
W
\mathbf{W}
W,Babai算法的结果不能作为CVP的解。
1.2 典型方案
1.2.1 Regev05:加密1比特
On Lattices, Learning with Errors, Random Linear Codes, and Cryptography
格的维数为 n n n, χ \chi χ是 Z \mathbb{Z} Z上的噪声高斯分布,其欧几里得范数较小。
-
密钥生成: 私钥为随机向量 s k = s ← Z q n sk=\mathbf{s}\leftarrow \mathbb{Z}_q^{n} sk=s←Zqn。
随机均匀选取矩阵 A ← Z q N × n \mathbf{A}\leftarrow \mathbb{Z}_q^{N\times n} A←ZqN×n和噪声 e ← χ N \mathbf{e}\leftarrow \chi^N e←χN,如下计算
b : = A s + e \mathbf{b}:=\mathbf{A}\mathbf{s}+\mathbf{e} b:=As+e
则公钥为 P K = ( A , b ) PK=(\mathbf{A},\mathbf{b}) PK=(A,b)。 -
加密: 对于消息 m ∈ { 0 , 1 } m\in \{0,1\} m∈{0,1},选择随机数 r ∈ { 0 , 1 } N \mathbf{r}\in \{0,1\}^{N} r∈{0,1}N,如下计算
c 1 : = ⌊ q 2 ⌋ ⋅ m + r T ⋅ b ∈ Z q c 2 : = r T A ∈ Z q n \begin{aligned} & c_1 := \left\lfloor {\frac{q}{2}} \right\rfloor \cdot m + \mathbf{r}^T \cdot \mathbf{b} \in \mathbb{Z}_q\\ & \mathbf{c}_2 := \mathbf{r}^T\mathbf{A} \in \mathbb{Z}_q^{n} \end{aligned} c1:=⌊2q⌋⋅m+rT⋅b∈Zqc2:=rTA∈Zqn 则密文为 ( c 1 , c 2 ) (c_1,\mathbf{c}_2) (c1,c2)。 -
解密: 输入私钥 s \mathbf{s} s和密文 ( c 1 , c 2 ) (c_1,\mathbf{c}_2) (c1,c2),如下计算
⌊ 2 q [ ( c 1 − c 2 ⋅ s ) m o d q ] ⌋ m o d 2 \left\lfloor {\frac{2}{q} \left[(c_1 - \mathbf{c}_2\cdot \mathbf{s})\mod q\right]} \right\rfloor \mod 2 ⌊q2[(c1−c2⋅s)modq]⌋mod2
展开如下 ⌊ 2 q [ ( c 1 − c 2 ⋅ s ) m o d q ] ⌋ = 2 q [ ⌊ q 2 ⌋ ⋅ m + r T ⋅ b − r T A s ] = 2 q [ ⌊ q 2 ⌋ ⋅ m + r T ⋅ ( A s + e ) − r T A s ] = 2 q [ ⌊ q 2 ⌋ ⋅ m + r T ⋅ e ] = m + e ∗ \begin{aligned} &\left\lfloor {\frac{2}{q} \left[(c_1 - \mathbf{c}_2\cdot \mathbf{s})\mod q\right]} \right\rfloor \\ &=\frac{2}{q} \left[\left\lfloor {\frac{q}{2}} \right\rfloor \cdot m + \mathbf{r}^T \cdot \mathbf{b} - \mathbf{r}^T \mathbf{A}\mathbf{s}\right]\\ &=\frac{2}{q} \left[\left\lfloor {\frac{q}{2}} \right\rfloor \cdot m + \mathbf{r}^T \cdot (\mathbf{A}\mathbf{s}+\mathbf{e}) - \mathbf{r}^T \mathbf{A}\mathbf{s}\right]\\ &=\frac{2}{q} \left[\left\lfloor {\frac{q}{2}} \right\rfloor \cdot m + \mathbf{r}^T \cdot \mathbf{e}\right]\\ &=m + e^* \end{aligned} ⌊q2[(c1−c2⋅s)modq]⌋=q2[⌊2q⌋⋅m+rT⋅b−rTAs]=q2[⌊2q⌋⋅m+rT⋅(As+e)−rTAs]=q2[⌊2q⌋⋅m+rT⋅e]=m+e∗
当噪声 e ∗ e^* e∗小于 ⌊ q 2 ⌋ / 2 \left\lfloor \frac{q}{2} \right\rfloor/2 ⌊2q⌋/2时,解密是精确的。注意,噪声 r T ⋅ e \mathbf{r}^T \cdot \mathbf{e} rT⋅e被放大了。
1.2.2 BV11:加密1比特
Efficient Fully Homomorphic Encryption from (Standard) LWE
-
密钥生成: 私钥为随机向量 s k = s ← Z q n sk=\mathbf{s}\leftarrow \mathbb{Z}_q^{n} sk=s←Zqn。
随机均匀选取矩阵 A ← Z q N × n \mathbf{A}\leftarrow \mathbb{Z}_q^{N\times n} A←ZqN×n和噪声 e ← χ N \mathbf{e}\leftarrow \chi^N e←χN,如下计算
b : = A s + 2 e \mathbf{b}:=\mathbf{A}\mathbf{s}+2\mathbf{e} b:=As+2e
则公钥为 P K = ( A , b ) PK=(\mathbf{A},\mathbf{b}) PK=(A,b)。注意噪声为偶数倍。 -
加密: 对于消息 m ∈ { 0 , 1 } m\in \{0,1\} m∈{0,1},选择随机数 r ∈ { 0 , 1 } N \mathbf{r}\in \{0,1\}^{N} r∈{0,1}N,如下计算
c 1 : = m + b T ⋅ r ∈ Z q c 2 : = A T r ∈ Z q n \begin{aligned} & c_1 := m + \mathbf{b}^T \cdot \mathbf{r} \in \mathbb{Z}_q\\ & \mathbf{c}_2 := \mathbf{A}^T \mathbf{r} \in \mathbb{Z}_q^{n} \end{aligned} c1:=m+bT⋅r∈Zqc2:=ATr∈Zqn -
解密: 输入私钥 s \mathbf{s} s和密文 ( c 1 , c 2 ) (c_1,\mathbf{c}_2) (c1,c2),如下计算
( c 1 − c 2 ⋅ s ) m o d q m o d 2 (c_1 - \mathbf{c}_2\cdot \mathbf{s})\mod q \mod 2 (c1−c2⋅s)modqmod2 展开如下
( c 1 − c 2 ⋅ s ) m o d q m o d 2 = ( m + b T ⋅ r − A T r ⋅ s ) m o d q m o d 2 = ( m + ( A s + 2 e ) T ⋅ r − A T r ⋅ s ) m o d q m o d 2 = m + 2 e T r m o d 2 \begin{aligned} &(c_1 - \mathbf{c}_2\cdot \mathbf{s})\mod q \mod 2\\ &= (m + \mathbf{b}^T \cdot \mathbf{r} - \mathbf{A}^T \mathbf{r}\cdot \mathbf{s})\mod q \mod 2\\ &= (m + (\mathbf{A}\mathbf{s}+2\mathbf{e})^T \cdot \mathbf{r} - \mathbf{A}^T \mathbf{r}\cdot \mathbf{s})\mod q \mod 2\\ &= m + 2\mathbf{e}^T\mathbf{r}\mod 2 \end{aligned} (c1−c2⋅s)modqmod2=(m+bT⋅r−ATr⋅s)modqmod2=(m+(As+2e)T⋅r−ATr⋅s)modqmod2=m+2eTrmod2 注意,噪声 2 e T r 2\mathbf{e}^T\mathbf{r} 2eTr被放大了。
1.2.3 KTX07:加密 l l l比特
-
密钥生成: 选择随机矩阵 S ′ ← Z q n × l \mathbf{S}'\leftarrow \mathbb{Z}_q^{n\times l} S′←Zqn×l,则私钥为 s k = S = ( 1 , . . . , 1 ∣ ∣ S ′ ) ∈ Z q ( n + l ) × l sk=\mathbf{S}=(1,...,1||\mathbf{S}')\in \mathbb{Z}_q^{(n+l)\times l} sk=S=(1,...,1∣∣S′)∈Zq(n+l)×l。其中, l l l维单位阵与矩阵 S ′ \mathbf{S}' S′拼接。
随机均匀选取矩阵 A ′ ← Z q N × n \mathbf{A}'\leftarrow \mathbb{Z}_q^{N\times n} A′←ZqN×n 和噪声矩阵 E ← χ N × l \mathbf{E}\leftarrow \chi^{N\times l} E←χN×l,如下计算
b : = A ′ S ′ + E ∈ Z q N × l \mathbf{b}:=\mathbf{A}'\mathbf{S}'+\mathbf{E}\in \mathbb{Z}_q^{N\times l} b:=A′S′+E∈ZqN×l
令
A : = [ b ∣ − A ′ ] ∈ Z q N × ( n + l ) \mathbf{A}:=[\mathbf{b}|-\mathbf{A}']\in \mathbb{Z}_q^{N\times (n+l)} A:=[b∣−A′]∈ZqN×(n+l)
则公钥为 P K = A PK=\mathbf{A} PK=A。以下等式成立: A ⋅ S = [ b ∣ − A ′ ] ⋅ S = [ A ′ S ′ + E ∣ − A ′ ] ⋅ S = [ A ′ S ′ + E ∣ − A ′ ] ⋅ ( 1 , . . . , 1 ∣ ∣ S ′ ) = E \mathbf{A}\cdot \mathbf{S} =[\mathbf{b}|-\mathbf{A}']\cdot \mathbf{S} = [\mathbf{A}'\mathbf{S}'+\mathbf{E}|-\mathbf{A}']\cdot \mathbf{S} =[\mathbf{A}'\mathbf{S}'+\mathbf{E}|-\mathbf{A}']\cdot (1,...,1||\mathbf{S}') = \mathbf{E} A⋅S=[b∣−A′]⋅S=[A′S′+E∣−A′]⋅S=[A′S′+E∣−A′]⋅(1,...,1∣∣S′)=E -
加密: 消息为 l l l维向量 m ∈ Z t l \mathbf{m}\in \mathbb{Z}_t^l m∈Ztl,令 m ′ = ( m , 0 , . . . , 0 ) ∈ { 0 , 1 } n + l \mathbf{m}'=(\mathbf{m},0,...,0)\in \{0,1\}^{n+l} m′=(m,0,...,0)∈{0,1}n+l。
选择随机向量 r ∈ { − a , − a + 1 , . . . , a } N \mathbf{r}\in \{-a,-a+1,...,a\}^{N} r∈{−a,−a+1,...,a}N,计算
c : = ⌈ ( q t ) m ′ ⌋ + A T ⋅ r ∈ Z q ( n + l ) \mathbf{c}:=\left\lceil {(\frac{q}{t})\mathbf{m}'} \right\rfloor + \mathbf{A}^T \cdot \mathbf{r} \in \mathbb{Z}_q^{ (n + l)} c:=⌈(tq)m′⌋+AT⋅r∈Zq(n+l)
则密文为 c \mathbf{c} c。 -
解密: 输入私钥 S \mathbf{S} S和密文 c \mathbf{c} c,如下解密
m : = ⌈ t q ( S T c ) ⌋ m:=\left\lceil {\frac{t}{q}(\mathbf{S}^T\mathbf{c})} \right\rfloor m:=⌈qt(STc)⌋
展开如下 ⌈ t q ( S T c ) ⌋ = ⌈ t q ( S T ( ⌈ ( q t ) m ′ ⌋ + A T ⋅ r ) ) ⌋ = ⌈ t q ( ( ( 1 , . . . , 1 ∣ ∣ S ′ ) ) T ( ⌈ ( q t ) ( ( m , 0 , . . . , 0 ) ) ⌋ + ( [ b ∣ − A ′ ] ) T ⋅ r ) ) ⌋ \begin{aligned} \left\lceil {\frac{t}{q}(\mathbf{S}^T\mathbf{c})} \right\rfloor = \left\lceil {\frac{t}{q}\left(\mathbf{S}^T \left(\left\lceil {(\frac{q}{t})\mathbf{m}'} \right\rfloor + \mathbf{A}^T \cdot \mathbf{r} \right)\right)} \right\rfloor = \left\lceil {\frac{t}{q}\left(((1,...,1||\mathbf{S}'))^T \left(\left\lceil {(\frac{q}{t})((\mathbf{m},0,...,0))} \right\rfloor + ([\mathbf{b}|-\mathbf{A}'])^T \cdot \mathbf{r} \right)\right)} \right\rfloor \end{aligned} ⌈qt(STc)⌋=⌈qt(ST(⌈(tq)m′⌋+AT⋅r))⌋=⌈qt(((1,...,1∣∣S′))T(⌈(tq)((m,0,...,0))⌋+([b∣−A′])T⋅r))⌋ 注意,噪声 t q E T r \frac{t}{q}\mathbf{E}^T\mathbf{r} qtETr被放大了。
1.2.4 DGHV10:基于整数的FHE
Fully homomorphic encryption over the integers
-
密钥生成: 私钥为随机整数 p p p。公钥为 p q pq pq。 q q q是另外一个随机整数。
-
加密: 对于消息 m ∈ { 0 , 1 } m\in \{0,1\} m∈{0,1},选择噪声 e e e,计算 c : = m + 2 e + p q c:=m+2e+pq c:=m+2e+pq
则密文为 c c c。 -
解密: 输入私钥 p p p和密文 c c c,计算 ( c m o d p ) m o d 2. (c\mod p)\mod 2. (cmodp)mod2.
模 p p p去掉了 p q pq pq,模 2 2 2去掉了噪声,留下消息 m m m。 -
同态加法: c + c ′ = ( m + m ′ ) + 2 ( r + r ′ ) + p ( q + q ′ ) c+c' = (m+m')+ 2(r + r') + p(q+q') c+c′=(m+m′)+2(r+r′)+p(q+q′)
-
解密: ( c + c ′ m o d p ) m o d 2 = m + m ′ (c+c'\mod p)\mod 2 = m + m' (c+c′modp)mod2=m+m′。加法对噪声影响较小
-
同态乘法: c ⋅ c ′ = ( m + 2 r ) ( m ′ + 2 r ′ ) + p ( p q q ′ + m q ′ + m ′ q + 2 r q ′ + 2 r ′ q ) c\cdot c' = (m+ 2r)(m'+ 2r') + p(pqq' + mq' + m'q + 2rq' + 2r'q) c⋅c′=(m+2r)(m′+2r′)+p(pqq′+mq′+m′q+2rq′+2r′q)
-
解密: ( c ⋅ c ′ m o d p ) m o d 2 = ( m + 2 r ) ( m ′ + 2 r ′ ) m o d p m o d 2 (c\cdot c'\mod p)\mod 2 = (m +2r)(m' +2r')\mod p\mod 2 (c⋅c′modp)mod2=(m+2r)(m′+2r′)modpmod2。
关键项 ( m + 2 r ) ( m ′ + 2 r ′ ) m o d p (m +2r)(m' +2r')\mod p (m+2r)(m′+2r′)modp乘积后变大,可能超过 p p p,导致解密出错。
举例: p = 11 , q = 5 , m = 0 , m ′ = 1 , r = − 1 , r ′ = 1 p=11,q=5,m=0,m'=1,r=-1,r'=1 p=11,q=5,m=0,m′=1,r=−1,r′=1
c = m + 2 e + p q = 53 c=m+2e+pq=53 c=m+2e+pq=53。 c m o d 11 = − 2 c\mod 11 = -2 cmod11=−2再模2,则等于0。计算正确。
c ′ = m ′ + 2 e ′ + p q ′ = 58 c'=m'+2e'+pq'=58 c′=m′+2e′+pq′=58。 c ′ m o d 11 = 3 c'\mod 11 = 3 c′mod11=3再模2,则等于1。计算正确。
同态乘法对噪声影响较大。
( c ⋅ c ′ ) = 53 ⋅ 58 = 3074 (c\cdot c') = 53\cdot 58=3074 (c⋅c′)=53⋅58=3074,模 p p p等于 5 5 5,在模 2 2 2等于 1 1 1。但是 m ⋅ m ′ = 0 m\cdot m'=0 m⋅m′=0。计算错误。
乘法导致噪声快速增大,所以解密出错。
1.2.5 LV10:环LEW公钥加密
-
多项式的模运算非常适合图灵计算架构(分配的内存宽度有限)。
-
矩阵计算需要根据计算需求额外分配内存,所以效率稍微差点。
LV10环LEW公钥加密看作Regev的LEW公钥加密在环上的推广。
On Ideal Lattices and Learning with Errors over Rings
模 q ≥ 2 q\ge 2 q≥2,多项式次数 n ≥ 1 n\ge 1 n≥1是2的幂次方,多项式为 f ( x ) = x n + 1 f(x)=x^n+1 f(x)=xn+1。环 R = Z [ x ] / f ( x ) R=\mathbb{Z}[x]/f(x) R=Z[x]/f(x),环 R q = Z q [ x ] / f ( x ) R_q=\mathbb{Z}_q[x]/f(x) Rq=Zq[x]/f(x)。 χ \chi χ是 R R R上的一个噪声概率分布。
-
密钥生成: 随机选择 s ∈ χ \mathbf{s}\in \chi s∈χ,作为私钥。随机选择 a ∈ R q \mathbf{a}\in R_q a∈Rq,选择噪声 e 1 ∈ χ e_1\in \chi e1∈χ,计算
b = a s + e 1 \mathbf{b}=\mathbf{a}\mathbf{s}+e_1 b=as+e1
则公钥为 ( b , a ) ∈ R q × R q (\mathbf{b},\mathbf{a})\in R_q\times R_q (b,a)∈Rq×Rq。 -
加密: 消息为 m ∈ { 0 , 1 } n \mathbf{m}\in \{0,1\}^n m∈{0,1}n,其多项式系数 m ∈ R 2 m\in R_2 m∈R2。随机选择 e 2 , e 3 , e 4 ∈ χ e_2,e_3,e_4\in \chi e2,e3,e4∈χ,如下计算
c 1 = ⌊ q / 2 ⌋ ⋅ m + b e 2 + e 3 ∈ R q c 2 = a e 2 + e 4 ∈ R q \begin{aligned} &c_1=\lfloor q/2 \rfloor \cdot m + \mathbf{b}e_2 + e_3\in R_q\\ &c_2=\mathbf{a}e_2+e_4\in R_q \end{aligned} c1=⌊q/2⌋⋅m+be2+e3∈Rqc2=ae2+e4∈Rq 则密文为 c = ( c 1 , c 2 ) \mathbf{c}=(c_1,c_2) c=(c1,c2)。 -
解密: 输入私钥 s \mathbf{s} s和密文 c \mathbf{c} c,如下解密
m : = 2 q ⌊ c 1 − c 2 s m o d q ⌉ m o d 2 m:=\frac{2}{q}\lfloor c_1-c_2\mathbf{s} \mod q \rceil \mod 2 m:=q2⌊c1−c2smodq⌉mod2
展开如下: 2 q ⌊ c 1 − c 2 s ⌉ = 2 q ( ⌊ q / 2 ⌋ ⋅ m + b e 2 + e 3 − ( a e 2 + e 4 ) s ) = 2 q ( ⌊ q / 2 ⌋ ⋅ m + ( a s + e 1 ) e 2 + e 3 − ( a e 2 + e 4 ) s ) = 2 q ( ⌊ q / 2 ⌋ ⋅ m + e 1 e 2 + e 3 − e 4 s ) = m + 2 q ( e 1 e 2 + e 3 − e 4 s ) = m + e ∗ \begin{aligned} & \frac{2}{q}\lfloor c_1-c_2\mathbf{s} \rceil \\ &=\frac{2}{q}(\lfloor q/2 \rfloor \cdot m + \mathbf{b}e_2 + e_3-(\mathbf{a}e_2+e_4)\mathbf{s})\\ &=\frac{2}{q}(\lfloor q/2 \rfloor \cdot m + (\mathbf{a}\mathbf{s}+e_1)e_2 + e_3-(\mathbf{a}e_2+e_4)\mathbf{s})\\ &=\frac{2}{q}(\lfloor q/2 \rfloor \cdot m +e_1e_2 + e_3 - e_4\mathbf{s})\\ &=m + \frac{2}{q}(e_1e_2 + e_3 - e_4\mathbf{s})\\ &=m + e^*\\ \end{aligned} q2⌊c1−c2s⌉=q2(⌊q/2⌋⋅m+be2+e3−(ae2+e4)s)=q2(⌊q/2⌋⋅m+(as+e1)e2+e3−(ae2+e4)s)=q2(⌊q/2⌋⋅m+e1e2+e3−e4s)=m+q2(e1e2+e3−e4s)=m+e∗
1.2.6 LV10变形
方案特点:2倍噪声,则加密不需要放大消息,解密不需要缩小消息。
模 q ≥ 2 q\ge 2 q≥2,多项式次数 n ≥ 1 n\ge 1 n≥1是2的幂次方,多项式为 f ( x ) = x n + 1 f(x)=x^n+1 f(x)=xn+1。环 R = Z [ x ] / f ( x ) R=\mathbb{Z}[x]/f(x) R=Z[x]/f(x),环 R q = Z q [ x ] / f ( x ) R_q=\mathbb{Z}_q[x]/f(x) Rq=Zq[x]/f(x)。 χ \chi χ是 R R R上的一个噪声概率分布。
-
密钥生成: 随机选择 s ∈ χ \mathbf{s}\in \chi s∈χ,作为私钥。随机选择 a ∈ R q \mathbf{a}\in R_q a∈Rq,选择 e 1 ∈ χ e_1\in \chi e1∈χ,计算
b = a s + 2 e 1 \mathbf{b}=\mathbf{a}\mathbf{s}+2e_1 b=as+2e1
则公钥为 ( b , a ) (\mathbf{b},\mathbf{a}) (b,a)。 -
加密: 消息为 m ∈ { 0 , 1 } n \mathbf{m}\in \{0,1\}^n m∈{0,1}n,其多项式系数 m ∈ R 2 m\in R_2 m∈R2。随机选择 e 2 , e 3 , e 4 ∈ χ e_2,e_3,e_4\in \chi e2,e3,e4∈χ,如下计算
c 1 = m + b e 2 + e 3 ∈ R q c 2 = a e 2 + 2 e 4 \begin{aligned} &c_1=m + \mathbf{b}e_2 + e_3 \in R_q\\ &c_2=\mathbf{a}e_2+2e_4 \end{aligned} c1=m+be2+e3∈Rqc2=ae2+2e4 则密文为 c = ( c 1 , c 2 ) \mathbf{c}=(c_1,c_2) c=(c1,c2)。 -
解密: 输入私钥 s \mathbf{s} s和密文 c \mathbf{c} c,如下解密
m : = c 1 − c 2 s m o d q m o d 2 m:=c_1-c_2\mathbf{s} \mod q\mod 2 m:=c1−c2smodqmod2 展开如下: c 1 − c 2 s m o d q m o d 2 = m + b e 2 + 2 e 3 − ( a e 2 + 2 e 4 ) s ) m o d q m o d 2 = m + ( a s + 2 e 1 ) e 2 + 2 e 3 − ( a e 2 + 2 e 4 ) s ) m o d q m o d 2 = m + 2 e 1 e 2 + 2 e 3 − 2 e 4 s m o d q m o d 2 = m + 2 e ∗ m o d 2 = m \begin{aligned} & c_1-c_2\mathbf{s} \mod q\mod 2\\ &= m + \mathbf{b}e_2 + 2e_3-(\mathbf{a}e_2+2e_4)\mathbf{s}) \mod q\mod 2\\ &= m + (\mathbf{a}\mathbf{s}+2e_1)e_2 + 2e_3-(\mathbf{a}e_2+2e_4)\mathbf{s}) \mod q\mod 2\\ &= m + 2e_1e_2 + 2e_3-2e_4\mathbf{s} \mod q\mod 2\\ &=m + 2e^*\mod 2\\ &=m \end{aligned} c1−c2smodqmod2=m+be2+2e3−(ae2+2e4)s)modqmod2=m+(as+2e1)e2+2e3−(ae2+2e4)s)modqmod2=m+2e1e2+2e3−2e4smodqmod2=m+2e∗mod2=m
1.3 FHE基本概念
全同态加密(Fully Homomorphic Encryption, FHE)是一种加密方案,它允许在密文上直接进行运算,从而在无需解密的情况下实现对明文的任意操作。这种功能的实现仅在加法和乘法操作可以同态执行的条件下才可能,因为这两种操作在有限环上构成一个功能完备的集合。
具体而言,任何布尔(或算术)电路都可以仅通过 XOR(加法)和 AND(乘法)门表示。 换句话说,给定两个密文 Enc ( x ) \text{Enc}(x) Enc(x) 和 Enc ( y ) \text{Enc}(y) Enc(y) (其中, x x x 和 y y y 是明文, Enc \text{Enc} Enc 是加密操作),可以通过直接对密文进行加法(或乘法)运算,得到 x + y x + y x+y (或 x ⋅ y x \cdot y x⋅y )的加密结果,而无需解密 Enc ( x ) \text{Enc}(x) Enc(x) 和 Enc ( y ) \text{Enc}(y) Enc(y) 。这足以对加密数据进行任何函数的评估,满足以下性质: Dec ( Enc ( x ) Δ Enc ( y ) ) = x Δ y , \text{Dec}(\text{Enc}(x) \, \Delta \, \text{Enc}(y)) = x \, \Delta \, y, Dec(Enc(x)ΔEnc(y))=xΔy, 其中, Δ \Delta Δ 表示加法或乘法, Dec \text{Dec} Dec 是解密操作。
全同态加密方案由一组概率多项式时间(PPT)算法 ( KeyGen , Enc , Dec , Eval ) (\text{KeyGen}, \text{Enc}, \text{Dec}, \text{Eval}) (KeyGen,Enc,Dec,Eval) 组成,满足以下性质:
- 密钥生成 ( KeyGen \text{KeyGen} KeyGen ): 该算法以安全参数 λ \lambda λ 作为输入,输出密钥对 ( sk , pk ) (\text{sk}, \text{pk}) (sk,pk) 和用于在密文上执行同态操作的评估密钥 evk \text{evk} evk 。
- 加密 (
Enc
\text{Enc}
Enc ): 该算法以公钥
pk
\text{pk}
pk 和消息
m
m
m
(来自消息空间)为输入,输出密文 c c c 。 - 解密( Dec \text{Dec} Dec ): 该算法以私钥 sk \text{sk} sk 和密文 c c c 为输入,输出消息 m m m 。如果解密算法无法成功恢复加密的消息 m m m,则输出 ⊥ \perp ⊥ 。
- 评估 ( Eval \text{Eval} Eval ): 该算法以评估密钥 evk \text{evk} evk、一个函数 f f f 和一组密文 ( c 1 , … , c t ) (c_1, \dots, c_t) (c1,…,ct) 为输入,输出密文 c f c_f cf。解密 c f c_f cf 后得到 f ( m 1 , … , m t ) f(m_1, \dots, m_t) f(m1,…,mt) 的结果,即: c f = Eval evk ( f , ( c 1 , … , c t ) ) , Dec sk ( c f ) = f ( m 1 , … , m t ) c_f = \text{Eval}_{\text{evk}}(f, (c_1, \dots, c_t)), \quad \text{Dec}_{\text{sk}}(c_f) = f(m_1, \dots, m_t) cf=Evalevk(f,(c1,…,ct)),Decsk(cf)=f(m1,…,mt)。 注意,密文 c f c_f cf 和 c ← Enc pk ( f ( m 1 , … , m t ) ) c \leftarrow \text{Enc}_{\text{pk}}(f(m_1, \dots, m_t)) c←Encpk(f(m1,…,mt))在解密后得到相同的明文,但其构造方式可能不同(如噪声水平可能不同)。
同态加密方案的两个基本特性为:
-
所支持函数的最大degree: 该特性定义了方案 E E E 能正确评估的函数范围。具体而言,若 E E E 能正确评估函数集合 F F F 中的任何函数 f f f ,即存在评估算法 Eval \text{Eval} Eval ,满足:
Dec sk ( Eval evk ( f , c 1 , … , c t ) ) = f ( m 1 , … , m d ) , ∀ f ∈ F , \text{Dec}_{\text{sk}}(\text{Eval}_{\text{evk}}(f, c_1, \dots, c_t)) = f(m_1, \dots, m_d), \quad \forall f \in F, Decsk(Evalevk(f,c1,…,ct))=f(m1,…,md),∀f∈F,
其中, c i ← Enc pk ( m i ) , ∀ i ∈ { 1 , … , t } c_i \leftarrow \text{Enc}_{\text{pk}}(m_i), \, \forall i \in \{1, \dots, t\} ci←Encpk(mi),∀i∈{1,…,t}。此外,该特性决定了评估密文 c f c_f cf (即 Eval \text{Eval} Eval的输出)是否能用作后续评估算法的输入。在多跳同态加密方案中,可以对加密消息 m m m 生成的密文 c c c 逐一进行一系列多项式degree的函数同态评估。 -
密文长度的增长: 该特性描述了每次评估后密文bit长度的增长情况。如果密文长度增长的上限与函数 f f f 的复杂度无关,则称该方案为紧凑型方案。
根据上述特性,同态加密方案可分为以下几类:
- Partially HE (PHE) 只能评估包含一种算术门(即加法或乘法)的电路,且电路深度不受限制的方案。
- Leveled HE (LHE) 能够评估包含加法和乘法门的电路,但仅限于预定的乘法深度L的方案。
- Somewhat HE (SHE) 能够评估包含加法和乘法门的电路子集,其复杂度随着电路深度增加而增加。SHE比LHE更为通用。示例包括Gentry(2009, 2010)。
- Leveled Fully HE 几乎与有级同态加密相同,但这些方案能够评估深度为L的所有电路。示例包括Brakerski和Vaikuntanathan(2014);Brakerski等(2014);Brakerski(2012)。
- Fully HE (FHE) 能够评估包含加法和乘法门的所有电路,且电路深度不受限制的方案。示例包括Gentry(2009)和Brakerski及Vaikuntanathan(2014);Brakerski等(2014);Brakerski(2012),在弱环形安全模型下,这种模型保证在只使用一对私钥和公钥时的安全性。
根据FHE方案如何建模计算,FHE方案可以分为3种类型:
-
将计算建模为boolean circuit 布尔电路(即bits位)。如TFHE方案。
-
将计算建模为modular arithmetic 模运算(即"clock"运算)。如BGV和BFV方案。
-
将计算建模为floating point arithmetic 浮点算法。如CKKS方案。
值得强调的是,具有足够同态评估能力的部分同态加密方案(或分层全同态加密方案)可以通过"引导"技术转化为全同态加密方案。
FHE(Fully Homomorphic Encryption,全同态加密)在不解密的情况下,能够对密文执行任意计算。计算后的密文结果解密后,等于对明文做同样计算的结果。即,对于任意有效的函数 f f f 和明文 m m m ,FHE具备的性质为: f ( E n c ( m ) ) = E n c ( f ( m ) ) f(Enc(m))=Enc(f(m)) f(Enc(m))=Enc(f(m))。
定义 2 (全同态加密). 全同态加密算法包含4个概率多项式时间算法:密钥生成,加密,解密,密文计算。
- 密钥生成KeyGen ( 1 λ ) (1^\lambda) (1λ): 输出公钥 p k pk pk,计算公钥 e v k evk evk和私钥 s k sk sk。
- 加密Enc ( p k , m ) (pk, m) (pk,m): 使用公钥 p k pk pk 加密一位消息 m ∈ { 0 , 1 } m \in \{0,1\} m∈{0,1},输出密文 c c c。
- 解密Dec ( s k , c ) (sk, c) (sk,c): 使用密钥 s k sk sk 解密密文 c c c,恢复消息 m m m。
- 同态计算Eval ( e v k , f , c 1 , ⋯ , c t ) (evk, f, c_1, \cdots, c_t) (evk,f,c1,⋯,ct): 使用计算公钥 e v k evk evk,将 c 1 , c 2 , ⋯ , c t c_1, c_2, \cdots, c_t c1,c2,⋯,ct 输入函数 f f f。其中, f : { 0 , 1 } ∗ → { 0 , 1 } f: \{0,1\}^* \rightarrow \{0,1\} f:{0,1}∗→{0,1},输出密文 c f c_f cf。
函数 f f f 可表示成有限域 G F ( 2 ) GF(2) GF(2) 上的算术电路形式。全同态加密算法是安全的,指满足语义安全。
全同态加密分类
根据计算电路的深度,全同态加密算法可以分为两种形式:
- 一是"纯"的全同态加密算法,即可以执行任意深度的电路计算算法,但是目前"纯"的全同态加密算法只能依靠同态解密技术(Bootstrap)和循环安全假设来实现;
- 二是层次型全同态加密算法,即算法只能执行深度为 L L L 的计算电路,算法的参数依赖于 L L L。
L-同态: 对于一个同态加密算法HE,在存在
L
=
L
(
λ
)
L = L(\lambda)
L=L(λ),如果对于深度为
L
L
L 的任何有限域
G
F
(
2
)
GF(2)
GF(2) 上的算术电路
f
f
f,以及任意输入
m
1
,
m
2
,
⋯
,
m
t
m_1, m_2, \cdots, m_t
m1,m2,⋯,mt 满足以下条件:
Pr
[
HE.Dec
s
k
(
HE.Eval
e
v
k
(
f
,
c
1
,
c
2
,
⋯
,
c
t
)
)
≠
f
(
m
1
,
m
2
,
⋯
,
m
t
)
]
=
negl
(
λ
)
,
\Pr[\text{HE.Dec}_{sk}(\text{HE.Eval}_{evk}(f, c_1, c_2, \cdots, c_t)) \neq f(m_1, m_2, \cdots, m_t)] = \text{negl}(\lambda),
Pr[HE.Decsk(HE.Evalevk(f,c1,c2,⋯,ct))=f(m1,m2,⋯,mt)]=negl(λ),
其中,Dec是HE的解密算法,Eval 是密文计算算法,
s
k
sk
sk 是密钥,
e
v
k
evk
evk 是密文计算公钥。通常称为同态加密算法 HE 是 L-同态。
部分同态加密(Somewhat Homomorphic Encryption, SWHE): 算法只能执行有限电路深度的密文计算,部分同态加密算法是L同态的。
紧凑性:
如果一个同态加密算法的解密电路是独立于计算深度的,即密文的长度与计算电路的深度无关,则称该同态加密算法是紧凑的。
全同态: 如果一个紧凑的同态加密算法是
L
L
L同态的且
L
=
∞
L = \infty
L=∞,即可以任意多项式深度的计算电路,则称该算法是全同态的。
层次型全同态:
如果某全同态加密算法的公钥/密钥生成算法中,将作为输入参数的
L
L
L 明确嵌入了电路计算深度
L
L
L,则称该算法是层次型全同态算法。
2. 关键技术
格上加密算法产生的密文是一种噪声密文,即在明文里叠加噪声,因此密文计算时会导致密文中的噪声增长,当噪声增长超过某个界限时,就不能正确解密。因此,实现金全同态加密的关键是对密文计算过程中的噪声增长进行管理。
目前有3种噪声管理技术:
- 同态解密/自举(bootstrapping);
- 模交换(modulus switching),在3.2.5节阐述;
- 位展开(bit decomposition)。
2.1 Bootstrapping自举
自举技术是 Gentry 实现全同态加密的奠基石。Gentry 在实现全同态加密时,注意到如果同时执行自己的解密算法,即输入的密文是对原密文中每一位加密的结果,输入的密钥是对原密文密钥每一位加密的结果,那么经过同态执行解密算法就会得到一个新的密文,这个新的密文噪声是固定的。因此,可以通过同态解密技术约束(管理)密文的噪声。
-
密钥生成: 私钥和公钥对分别为 ( s k 1 , p k 1 ) , ( s k 2 , p k 2 ) (sk_1,pk_1),(sk_2,pk_2) (sk1,pk1),(sk2,pk2)。
-
加密: 使用 p k 1 pk_1 pk1对明文 m m m加密 ⟨ m ⟩ = Enc ( p k 1 , m ) \langle m \rangle = \text{Enc}(pk_1, m) ⟨m⟩=Enc(pk1,m)。注意,私钥 s k 1 sk_1 sk1能脱衣服1 ⟨ ⟩ \langle \ \rangle ⟨ ⟩ 算法:输入 s k 1 sk_1 sk1和 ⟨ m ⟩ \langle m \rangle ⟨m⟩,进行 k 1 k_1 k1次加法和 k 2 k_2 k2次乘法的组合,则脱掉衣服1 ⟨ ⟩ \langle \ \rangle ⟨ ⟩。
-
加密: 使用 p k 2 pk_2 pk2对密文 ⟨ m ⟩ \langle m \rangle ⟨m⟩加密 [ [ ⟨ m ⟩ ] ] = Enc ( p k 2 , ⟨ m ⟩ ) [\kern-0.15em[ \langle m \rangle ]\kern-0.15em] = \text{Enc}(pk_2, \langle m \rangle) [[⟨m⟩]]=Enc(pk2,⟨m⟩)。注意,私钥 s k 2 sk_2 sk2能脱衣服2 [ [ ] ] [\kern-0.15em[ \ ]\kern-0.15em] [[ ]],需要 k 1 k_1 k1次加法和 k 2 k_2 k2次乘法的组合。
-
加密: 使用 p k 2 pk_2 pk2对密文 s k 1 sk_1 sk1加密 [ [ s k 1 ] ] = Enc ( p k 2 , s k 1 ) [\kern-0.15em[ sk_1 ]\kern-0.15em]=\text{Enc}(pk_2, sk_1) [[sk1]]=Enc(pk2,sk1)。
-
**同态运算:**输入 [ [ s k 1 ] ] [\kern-0.15em[ sk_1 ]\kern-0.15em] [[sk1]]和 [ [ ⟨ m ⟩ ] ] [\kern-0.15em[ \langle m \rangle ]\kern-0.15em] [[⟨m⟩]],进行 k 1 k_1 k1次同态加法和 k 2 k_2 k2次同态乘法的组合,脱掉衣服1 ⟨ ⟩ \langle \ \rangle ⟨ ⟩,获得 [ [ m ] ] [\kern-0.15em[m]\kern-0.15em] [[m]]。
等价于同态解密: [ [ m ] ] = Dec ( [ [ s k 1 ] ] , [ [ ⟨ m ⟩ ] ] ) [\kern-0.15em[m]\kern-0.15em] = \text{Dec}( [\kern-0.15em[ sk_1 ]\kern-0.15em], [\kern-0.15em[ \langle m \rangle ]\kern-0.15em] ) [[m]]=Dec([[sk1]],[[⟨m⟩]])。用 [ [ s k 1 ] ] [\kern-0.15em[ sk_1 ]\kern-0.15em] [[sk1]]脱掉衣服1 ⟨ ⟩ \langle \ \rangle ⟨ ⟩,还剩衣服2 [ [ ] ] [\kern-0.15em[ \ ]\kern-0.15em] [[ ]]。
核心思想:步骤3到步骤5,称为换衣服,但不走光(明文 m m m和私钥 s k 1 sk_1 sk1不泄露)
-
假设衣服1密文 ⟨ m ⟩ \langle m \rangle ⟨m⟩,经过 n n n次同态运算变为衣服1密文 ⟨ m ⟩ ′ \langle m \rangle' ⟨m⟩′。此时噪声积累很严重,后续仅能进行 k 1 k_1 k1次同态加法和 k 2 k_2 k2次同态乘法运算了。
-
使用步骤3,4,5【换衣服】,执行 k 1 k_1 k1次同态加法和 k 2 k_2 k2次同态乘法,将衣服1密文 ⟨ m ⟩ ′ \langle m \rangle' ⟨m⟩′变为衣服2密文 [ [ m ] ] [\kern-0.15em[m]\kern-0.15em] [[m]],则能够进行 n n n次同态运算,变为 [ [ m ] ] ′ [\kern-0.15em[m]\kern-0.15em]' [[m]]′。又仅剩余 k 1 k_1 k1次同态加法和 k 2 k_2 k2次同态乘法运算了。
-
再使用步骤3,4,5,继续换衣服,则又可以同态运算 n n n次,而不泄露明文 m m m和私钥 s k 1 sk_1 sk1。
Bootstrapping自举:每同态运算 n n n次后,则换衣服,则再同态运算 n n n次,则再换衣服,以此类推。
由于每层电路( k 1 k_1 k1次加法和 k 2 k_2 k2次乘法运算的组合)都需要密钥对 ( p k 1 , s k 1 ) (pk_1, sk_1) (pk1,sk1),所以层次型全同态加密算法的公钥 ( p k 1 , p k 2 , ⋯ , p k L + 1 ) (pk_1, pk_2, \cdots, pk_{L+1}) (pk1,pk2,⋯,pkL+1) 和 ( s k 1 , s k 2 , ⋯ , s k L ) (sk_1, sk_2, \cdots, sk_L) (sk1,sk2,⋯,skL) 构成。如果是循环安全的,每层电路就可以使用相同的密钥对,减少密钥数量。尽管同态解密是实现全同态加密的基石,但同态解密的效率很低,其复杂度为 O ( λ 3 ) \mathcal{O}(\lambda^3) O(λ3)。
Bootstrapping自举/同态解密【换衣服】是一种通用的管理噪声的技术,可以应用于所有FHE算法, 只要解密电路的深度小于算法本身的同态计算电路的深度。
2.2 位展开
当噪声主要依赖于某一个向量 x ∈ Z q n \mathbf{x} \in \mathbb{Z}_q^n x∈Zqn时,为降低噪声的影响,可将该向量位展开,即将向量中的每个元素展开成二进制形式,从而向量 x \mathbf{x} x的范数 l 1 ( x ) l_1 (\mathbf{x}) l1(x)的最大值从 n q nq nq变成 n log q n\log q nlogq,降低噪声。
BitDecomp(x):
x
∈
Z
n
\mathbf{x} \in \mathbb{Z}^n
x∈Zn,令
w
i
∈
{
0
,
1
}
n
\mathbf{w}_i \in \{0, 1\}^n
wi∈{0,1}n,满足:
x
=
∑
i
=
0
⌈
log
q
⌉
−
1
2
i
⋅
w
i
(
m
o
d
q
)
\mathbf{x} = \sum_{i=0}^{\lceil \log q \rceil - 1} 2^i \cdot \mathbf{w}_i (\mod q)
x=∑i=0⌈logq⌉−12i⋅wi(modq),
输出:
(
w
0
,
w
1
,
⋯
,
w
⌈
log
q
⌉
−
1
)
∈
{
0
,
1
}
n
⌈
log
q
⌉
(\mathbf{w}_0, \mathbf{w}_1, \cdots, \mathbf{w}_{\lceil \log q \rceil - 1}) \in \{0, 1\}^{n \lceil \log q \rceil}
(w0,w1,⋯,w⌈logq⌉−1)∈{0,1}n⌈logq⌉
BitDecomp
−
1
^{-1}
−1(y):是BitDecomp
(
x
)
(x)
(x)的逆运算。令:
y
=
(
w
0
,
w
1
,
⋯
,
w
⌈
log
q
⌉
−
1
)
\mathbf{y} = (\mathbf{w}_0, \mathbf{w}_1, \cdots, \mathbf{w}_{\lceil \log q \rceil - 1})
y=(w0,w1,⋯,w⌈logq⌉−1)
则BitDecomp
−
1
^{-1}
−1(
y
\mathbf{y}
y) 输出:
∑
i
=
0
⌈
log
q
⌉
−
1
2
i
⋅
w
i
(
m
o
d
q
)
\sum_{i=0}^{\lceil \log q \rceil - 1} 2^i \cdot \mathbf{w}_i (\mod q)
i=0∑⌈logq⌉−12i⋅wi(modq)
即使向量
w
\mathbf{w}
w中的元素不是0和1,该定义依然成立。
Flatten(
y
\mathbf{y}
y): 令Flatten(
y
\mathbf{y}
y) = BitDecomp(BitDecomp
−
1
^{-1}
−1(
y
\mathbf{y}
y)),则 Flatten(
y
\mathbf{y}
y) 是一个元素为 0 和 1 构成的向量。因此,Flatten 能够将一个元素不是 0 和 1 的向量转化成一个元素为0和1的向量,而维数不变。Gentry等在2013年提出使用 Flatten 技术作为密文噪声管理。
向量位展开后,为了使得向量的内积保持不变,需要另外一个向量变成如下形式:
Powersof2(y): 输入
y
∈
Z
n
\mathbf{y} \in \mathbb{Z}^n
y∈Zn,输出
(
y
,
2
y
,
⋯
,
2
⌈
log
q
⌉
−
1
y
)
m
o
d
q
∈
Z
n
⋅
⌈
log
q
⌉
(\mathbf{y}, 2\mathbf{y}, \cdots, 2^{\lceil \log q \rceil - 1}\mathbf{y}) \mod q \in \mathbb{Z}^{n \cdot \lceil \log q \rceil}
(y,2y,⋯,2⌈logq⌉−1y)modq∈Zn⋅⌈logq⌉
对于所有
x
∈
Z
q
n
\mathbf{x} \in \mathbb{Z}_q^n
x∈Zqn和
y
∈
Z
q
n
\mathbf{y} \in \mathbb{Z}_q^n
y∈Zqn,有如下性质:
⟨
x
,
y
⟩
=
⟨
BitDecomp
(
x
)
,
Powersof2
(
y
)
⟩
=
⟨
Powersof2
(
x
)
,
BitDecomp
(
y
)
⟩
\langle\mathbf{x}, \mathbf{y}\rangle = \langle\text{BitDecomp}(\mathbf{x}), \text{Powersof2}(\mathbf{y})\rangle =\langle\text{Powersof2}(\mathbf{x}), \text{BitDecomp}(\mathbf{y})\rangle
⟨x,y⟩=⟨BitDecomp(x),Powersof2(y)⟩=⟨Powersof2(x),BitDecomp(y)⟩
同理,对于任何一个
n
⋅
⌈
log
q
⌉
n \cdot \lceil \log q \rceil
n⋅⌈logq⌉维向量
a
\mathbf{a}
a,有:
⟨
a
,
Powersof2
(
y
)
⟩
=
⟨
BitDecomp
−
1
(
a
)
,
y
⟩
=
⟨
Flatten
(
a
)
,
Powersof2
(
y
)
⟩
\langle\mathbf{a}, \text{Powersof2}(\mathbf{y})\rangle = \langle\text{BitDecomp}^{-1}(\mathbf{a}), \mathbf{y}\rangle =\langle\text{Flatten}(\mathbf{a}), \text{Powersof2}(\mathbf{y})\rangle
⟨a,Powersof2(y)⟩=⟨BitDecomp−1(a),y⟩=⟨Flatten(a),Powersof2(y)⟩
参考文献
-
GGH公钥密码系统 Public-key cryptosystems from lattice reduction problems
-
Regev05论文On Lattices, Learning with Errors, Random Linear Codes, and Cryptography
-
Brakerski12论文Fully Homomorphic Encryption without Modulus Switching from Classical GapSVP
-
Micciancio-Regev书 Lattice-based cryptography
-
CR16论文Recovering Short Generators of Principal Ideals in Cyclotomic Rings
-
BV11论文Efficient Fully Homomorphic Encryption from (Standard)LWE
-
LTV13论文On-the-fly multiparty computation on the cloud via multikey fully homomorphic encryption
-
TRLWE18论文TFHE: Fast Fully Homomorphic Encryption over the Torus
-
陈智罡 全同态加密:从理论到实践
-
周福才、徐剑 格理论与密码学
-
Google Jeremy Kun 2024.5博客 A High-Level Technical Overview of Fully Homomorphic Encryption
-
Optalysys团队2024年10月博客 Fully Homomorphic Encryption industry leaders join forces to form global FHE Hardware Consortium
-
Fhenix团队2023年10月17日博客 The Holy Grail of Encryption: The Rise of FHE Technology
-
NGC Ventures团队2024年1月12日博客 Introduction to FHE and Blockchain: Implications for Scalability and Privacy
-
Awesome Fully Homomorphic Encryption (FHE) x Blockchain resources, libraries, projects, and more
-
PANews 2024年9月17日文章 全同态加密(FHE)的进展与应用
-
2022年论文《Survey on Fully Homomorphic Encryption, Theory, and Applications》
-
Craig Gentry 2022年论文《Homomorphic encryption: a mathematical survey》
-
2024年12月20日Jorge Myszne,Niobium Microsystems 首席产品官 博客 3 Homomorphic Encryption Trends for 2025
-
HCLTech团队2024年6月研报 Homomorphic encryption: Exploring technology trends and future approach
-
PPS Lab团队2023年10月博客 Arithmetizing FHE in Circom
-
PPS Lab团队2023年10月博客 A primer on the FHEW & TFHE schemes
-
2023年10月论文《A Survey on Implementations of Homomorphic Encryption Schemes》
-
Sunscreen团队2021年8月博客 An Intro to Fully Homomorphic Encryption for Engineers
-
TFHE:2016年论文《Faster Fully Homomorphic Encryption: Bootstrapping in less than 0.1 Seconds》
-
BGV:2011年论文 《Fully Homomorphic Encryption without Bootstrapping》
-
BFV:2012年论文《Somewhat Practical Fully Homomorphic Encryption》
-
CKKS:2016年论文《Homomorphic Encryption for Arithmetic of Approximate Numbers》
-
HomomorphicEncryption.org 2018年slide Building Applications with Homomorphic Encryption
-
Greenfield Capital 2024年7月博客 The muted Seven – 7 things you should consider re confidential compute
-
Sunscreen 2023年8月博客 How SNARKs fall short for FHE
-
2024年4月18日BigBrainVC团队博客 Flawed Homomorphic Encryption
-
2024年Verisense Network slide An Introduction To FHE and Its Application in Rust
-
Vitalik 2020年7月20日博客 Exploring Fully Homomorphic Encryption
-
Sunscreen团队2023年5月博客 Building an FHE compiler for the real world
-
Zama团队2023年5月23日博客 Private Smart Contracts Using Homomorphic Encryption
-
Craig Gentry 2024年6月分享视频 FHE: Past, Present and Future