全同态加密理论、生态现状与未来展望(上)
《全同态加密理论、生态现状与未来展望》系列由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比特
Lattice-based cryptography
-
密钥生成: 选择随机矩阵 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。
随机均匀选取矩阵 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 -
加密: 消息为 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 1 , p k 1 ) (sk_1,pk_1),(sk_1,pk_1) (sk1,pk1),(sk1,pk1)。
-
加密: 使用 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
-
KTX07论文Multi-bit Cryptosystems Based on Lattice Problems
-
DGHV10论文Fully homomorphic encryption over the integers
-
LV10论文On Ideal Lattices and Learning with Errors over Rings
-
Gentry09论文Fully homomorphic encryption using ideal lattices
-
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
-
GSW13论文Homomorphic Encryption from Learning with Errors:Conceptually-Simpler, Asymptotically-Faster, Attribute-Based
-
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
-
Awesome Homomorphic Encryption
-
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
-
2024年论文《vFHE: Verifiable Fully Homomorphic Encryption》
-
PPS Lab团队2023年10月博客 Arithmetizing FHE in Circom
-
PPS Lab团队2023年10月博客 A primer on the FHEW & TFHE schemes
-
2024年论文《Oraqle: A Depth-Aware Secure Computation Compiler》
-
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
-
2023年论文《Verifiable Fully Homomorphic Encryption》
-
2018年《Homomorphic Encryption Standard v1.1》
-
2021年论文《SoK: Fully Homomorphic Encryption Compilers》
-
2024年论文《SoK: Fully Homomorphic Encryption Accelerators》
-
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
相关文章:
全同态加密理论、生态现状与未来展望(上)
《全同态加密理论、生态现状与未来展望》系列由lynndell2010gmail.com和mutourend2010gmail.com整理原创发布,分为上中下三个系列: 全同态加密理论、生态现状与未来展望(上):专注于介绍全同态加密理论知识。全同态加密…...
cursor重构谷粒商城02——30分钟构建图书管理系统【cursor使用教程番外篇】
前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到中高阶程序员。 本项目将基于谷粒商城…...
提升大语言模型的三大策略
1.概述 随着大语言模型(LLMs)在技术和应用上的不断发展,它们已经深刻地改变了我们与计算机的互动方式。从文本生成到语言理解,LLMs的应用几乎涵盖了各个行业。然而,尽管这些模型已展现出令人印象深刻的能力,…...
Ubuntu 24.04 LTS 安装 Docker Desktop
Docker 简介 Docker 简介和安装Ubuntu上学习使用Docker的详细入门教程Docker 快速入门Ubuntu版(1h速通) Docker 安装 参考 How to Install Docker on Ubuntu 24.04: Step-by-Step Guide。 更新系统和安装依赖 在终端中运行以下命令以确保系统更新并…...
mysql查看binlog日志
mysql 配置、查看binlog日志: 示例为MySQL8.0 1、 检查binlog开启状态 SHOW VARIABLES LIKE ‘log_bin’; 如果未开启,修改配置my.ini 开启日志 安装目录配置my.ini(mysql8在data目录) log-binmysql-bin(开启日志并指定日志前缀ÿ…...
2. Flink分区策略
一. Flink分区策略概述 Flink任务在执行过程中,一个流(stream)包含一个或多个分区(Stream partition),TaskManager中的一个slot的SubTask就是一个stream partition(流分区)。 Flink分区之间进行数据传递模式有两种。 1. one-to-one模式 数据不需要重新…...
Qt 5.14.2 学习记录 —— 십칠 窗口和菜单
文章目录 1、Qt窗口2、菜单栏设置快捷键添加子菜单添加分割线和菜单图标 3、工具栏 QToolBar4、状态栏 QStatusBar5、浮动窗口 QDockWidget 1、Qt窗口 QWidget,即控件,是窗口的一部分。在界面中创建控件组成界面时,Qt自动生成了窗口…...
微信小程序中实现背景图片完全覆盖显示,可以通过设置CSS样式来实现
wxml页面代码 <view class"beijing"></view>wxss样式代码 /* pages/beiJing/beiJing.wxss */ .beijing {background-image: url("https://www.qipa250.com/qipa.jpg");/* 定位:绝对定位 */position: absolute;/* 上下左右都定位到…...
亲测有效!如何快速实现 PostgreSQL 数据迁移到 时序数据库TDengine
小T导读:本篇文章是“2024,我想和 TDengine 谈谈”征文活动的优秀投稿之一,作者从数据库运维的角度出发,分享了利用 TDengine Cloud 提供的迁移工具,从 PostgreSQL 数据库到 TDengine 进行数据迁移的完整实践过程。文章…...
中国综合算力指数(2024年)报告汇总PDF洞察(附原数据表)
原文链接: https://tecdat.cn/?p39061 在全球算力因数字化技术发展而竞争加剧,我国积极推进算力发展并将综合算力作为数字经济核心驱动力的背景下,该报告对我国综合算力进行研究。 中国算力大会发布的《中国综合算力指数(2024年…...
51c~ONNX~合集1
我自己的原文哦~ https://blog.51cto.com/whaosoft/11608027 一、使用Pytorch进行简单的自定义图像分类 ~ONNX 推理 图像分类是计算机视觉中的一项基本任务,涉及训练模型将图像分类为预定义类别。本文中,我们将探讨如何使用 PyTorch 构建一个简单的自定…...
线下陪玩系统架构与功能分析
2015工作至今,10年资深全栈工程师,CTO,擅长带团队、攻克各种技术难题、研发各类软件产品,我的代码态度:代码虐我千百遍,我待代码如初恋,我的工作态度:极致,责任ÿ…...
海康工业相机的应用部署不是简简单单!?
作者:SkyXZ CSDN:SkyXZ~-CSDN博客 博客园:SkyXZ - 博客园 笔者使用的设备及环境:WSL2-Ubuntu22.04MV-CS016-10UC 不会吧?不会吧?不会还有人拿到海康工业相机还是一脸懵叭?不会还有人…...
SAP POC 项目完工进度 - 收入确认方式【工程制造行业】【新准则下工程项目收入确认】
1. SAP POC收入确认基础概念 1.1 定义与原则 SAP POC(Percentage of Completion)收入确认方式是一种基于项目完工进度来确认收入的方法。其核心原则是根据项目实际完成的工作量或成本投入占预计总工作量或总成本的比例,来确定当期应确认的收…...
【Elasticsearch 】 聚合分析:聚合概述
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编…...
【算法】二分
二分 1.二分查找1.在排序数组中查找元素的第一个和最后一个位置2.牛可乐和魔法封印3.A-B 数对4.烦恼的高考志愿 2.二分答案1.木材加工2.砍树3.跳石头 1.二分查找 当我们的解具有二段性(根据最终答案所在的位置判断是否具有二段性)时,就可以使…...
如何将自己本地项目开源到github上?
环境: LLMB项目 问题描述: 如何将自己本地项目开源到github上? 解决方案: 步骤 1: 准备本地项目 确保项目整洁 确认所有的文件都在合适的位置,并且项目的 README.md 文件已经完善。检查是否有敏感信息࿰…...
编辑器Vim基本模式和指令 --【Linux基础开发工具】
文章目录 一、编辑器Vim 键盘布局二、Linux编辑器-vim使用三、vim的基本概念正常/普通/命令模式(Normal mode)插入模式(Insert mode)末行模式(last line mode) 四、vim的基本操作五、vim正常模式命令集插入模式从插入模式切换为命令模式移动光标删除文字复制替换撤销上一次操作…...
Scade 表达式 - 使用索引的迭代器
Scade 表达式中的 map, fold, mapfold,会对输入数组参数中的元素逐个作处理,不需要数组元素的索引信息。若在处理数组元素时,需要数组元素相应的索引信息,则可使用迭代器算子 mapi, foldi, mapfoldi。 mapi 算子 mapi 算子的行为…...
K8s学习
Kubernetes 1. Kubernetes介绍 1.1 应用部署方式演变 在部署应用程序的方式上,主要经历了三个时代: 传统部署:互联网早期,会直接将应用程序部署在物理机上 优点:简单,不需要其它技术的参与 缺点…...
面试--你的数据库中密码是如何存储的?
文章目录 三种分类使用 MD5 加密存储加盐存储Base64 编码:常见的对称加密算法常见的非对称加密算法https 传输加密 在开发中需要存储用户的密码,这个密码一定是加密存储的,如果是明文存储那么如果数据库被攻击了,密码就泄露了。 我们要对数据…...
微服务学习-快速搭建
1. 速通版 1.1. git clone 拉取项目代码,导入 idea 中 git clone icoolkj-microservices-code: 致力于搭建微服务架构平台 1.2. git checkout v1.0.1版本 链接地址:icoolkj-microservices-code 标签 - Gitee.com 2. 项目服务结构 3. 实现重点步骤 …...
兼职全职招聘系统架构与功能分析
2015工作至今,10年资深全栈工程师,CTO,擅长带团队、攻克各种技术难题、研发各类软件产品,我的代码态度:代码虐我千百遍,我待代码如初恋,我的工作态度:极致,责任ÿ…...
【云岚到家】-day03-门户缓存实现实战
【云岚到家】-day03-门户缓存实现实战 1.定时任务更新缓存 1.1 搭建XXL-JOB环境 1.1.1 分布式调度平台XXL-JOB介绍 对于开通区域列表的缓存数据需要由定时任务每天凌晨更新缓存,如何实现定时任务呢? 1.使用jdk提供的Timer定时器 示例代码如下…...
Ubuntu 24.04 LTS 开启 SMB 服务,并通过 windows 访问
Ubuntu 24.04 LTS 背景资料 Ubuntu服务器折腾集Ubuntu linux 文件权限Ubuntu 空闲硬盘挂载到 文件管理器的 other locations Ubuntu开启samba和window共享文件 Ubuntu 配置 SMB 服务 安装 Samba 确保 Samba 已安装。如果未安装,运行以下命令进行安装ÿ…...
“AI人工智能内容辅助创作平台:让创意不再“卡壳”
在如今这个信息爆炸的时代,内容创作成了每个人的“必修课”。无论是自媒体大V、文案策划,还是普通学生写作文,大家都会遇到一个让人抓狂的问题——“创意枯竭”。有时候,脑袋里空空如也,一个字都写不出来,那…...
mac 安装 node
brew versions node // 安装 node brew versions node14 // 安装指定版本 卸载node: sudo npm uninstall npm -g sudo rm -rf /usr/local/lib/node /usr/local/lib/node_modules /var/db/receipts/org.nodejs.* sudo rm -rf /usr/local/include/node /Users/$USER/.npm su…...
VUE之Router使用及工作模式
1、路由的使用 【两个注意点】 1)路由组件通常放在pages 或 views文件夹,一般组件通常放在components文件夹。 2)通过点击导航,视觉效果上"消失"了的路由组件,默认是被"卸载"掉的,需要的时候再去挂载。 // 创建一个路由器,并暴露出去// 第一步:…...
day25_HTML
今日内容 零、 复习昨日 一、HTML 零、 复习昨日 一、Web开发 前端 HTML ,页面展现CSS , 样式JS (JavaScript) , 动起来 二、HTML 2.1 HTML概念 网页,是网站中的一个页面,通常是网页是构成网站的基本元素,是承载各种网站应用的平台。通俗…...
(开源)基于Django+Yolov8+Tensorflow的智能鸟类识别平台
1 项目简介(开源地址在文章结尾) 系统旨在为了帮助鸟类爱好者、学者、动物保护协会等群体更好的了解和保护鸟类动物。用户群体可以通过平台采集野外鸟类的保护动物照片和视频,甄别分类、实况分析鸟类保护动物,与全世界各地的用户&…...
【AI日记】25.01.20
【AI论文解读】【AI知识点】【AI小项目】【AI战略思考】【AI日记】【读书与思考】 AI kaggle 比赛:Forecasting Sticker Sales 读书 书名:自由宪章阅读原因:作者哈耶克,诺贝尔经济学奖得主,之前读过他的 《通往奴役…...
基于机器学习的用户健康风险分类及预测分析
完整源码项目包获取→点击文章末尾名片! 背景描述 在这个日益注重健康与体能的时代,健身已成为许多人追求健康生活的重要组成部分。 本数据集包含若干健身房会员的详细信息,包括年龄、性别、体重、身高、心率、锻炼类型、身体脂肪比例等多项关…...
AI生成内容——JavaScript中的Promise、async和wait
一、Promise *1. 概念: Promise 是 JavaScript 中处理异步操作的一种对象,它表示一个异步操作的最终完成(或失败)及其结果值。一个 Promise 对象处于以下三种状态之一: Pending(进行中)&#…...
Java基于SSM框架的社区团购系统小程序设计与实现(附源码,文档,部署)
Java基于SSM框架的社区团购系统小程序设计与实现 博主介绍:✌程序猿徐师兄、8年大厂程序员经历。全网粉丝15w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 Ǵ…...
Git原理与应用(三)【远程操作 | 理解分布式 | 推送拉取远程仓库 | 标签管理】
Git 理解分布式版本控制系统远程仓库新建远程仓库克隆远程仓库向远程仓库推送配置Git忽略特殊文件 标签管理理解标签创建标签操作标签删除标签 理解分布式版本控制系统 我们⽬前所说的所有内容(工作区,暂存区,版本库等等)&#x…...
【esp32小程序】小程序篇02——连接git
一、创建仓库 进入gitee官网,登录(如果没有gitee账号的就自行注册一下)。 点击号-->新建仓库 填写好必填信息,然后点击“创建” 二、微信开发者工具配置 在微信开发者工具打开我们的项目。按下面的步骤依次点击 三、验证 点…...
MongoDB基本操作
一、实验目的 1. 熟悉MongoDB的基本操作,包括CRUD(增加、读取、更新、删除)。 2. 理解MongoDB的文档型数据库特性和Shell的使用。 3. 培养学生通过命令行操作数据库的能力。 4. 强化数据库操作的实际应用能力。 二、实验环境准备 1.…...
Brooks MagnaTran LEAP User Manual 指导半导体机械手
Brooks MagnaTran LEAP User Manual 指导半导体机械手...
【Red Hat8】:搭建DHCP服务器
1、新建挂载文件 2、挂载 3、关闭防火墙 4、搭建yum源 (搭建的时候用vim 自行定义文件名.repo或者是vi 自行定义文件名.repo) 5、安装dhcp-server 6、复制模板文件 dhcpd.conf 是DHCP服务的配置文件,DHCP服务所有参数都是通过修改dhcpd.co…...
JupyterLab 安装以及部分相关配置
安装 JupyterLab pip install jupyter启动 JupyterLab jupyter lab [--port <指定的端口号>] [--no-browser] # --port 指定端口 # --no-browser 启动时不打开浏览器安装中文 首先安装中文包 pip install jupyterlab-language-pack-zh-CN安装完成后重启 JupyterLab 选…...
深圳桂湾公园的花海
工作日的午休时间我经常骑行到桂湾公园,时不时都能碰上一些阿姨问:小伙子你知道桂湾公园的花海在哪里吗?我找了半天了哈。我发现不少找花海的人是从桂湾地铁或前湾地铁下车,然后在偌大的桂湾公园找寻。其实只要定位前海紫荆园就好…...
寒假刷题Day10
一、220. 存在重复元素 III 两种解法:并没有弄懂,待复盘 class Solution { public:bool containsNearbyAlmostDuplicate(vector<int>& nums, int k, int t) {set<long> st;for (int i 0; i < nums.size(); i) {auto lb st.lower_…...
【Java-图片存储方案】
Java功能相关文章 一、Minio存储大体量图片 上传到Minio指定路径,前端预览时,需要生成临时访问凭证的URL import io.minio.MinioClient; import io.minio.errors.MinioException; import io.minio.http.Method; import io.minio.GetPresignedObjectUrlArgs; impo…...
机器人传动力系统介绍
以下是对机器人驱动系统的分析、最新科技应用以及世界顶级公司机器人型号使用的技术: 机器人驱动系统分析 液压驱动:利用液体压力来传递动力,通过液压泵将液压油从油箱抽出,送至液压缸,推动活塞运动,进而…...
DDD - 微服务落地的技术实践
文章目录 Pre概述如何发挥微服务的优势怎样提供微服务接口原则微服务的拆分与防腐层的设计 去中心化的数据管理数据关联查询的难题Case 1Case 2Case 3 总结 Pre DDD - 软件退化原因及案例分析 DDD - 如何运用 DDD 进行软件设计 DDD - 如何运用 DDD 进行数据库设计 DDD - 服…...
《Vue3 十》Vue 底层原理
命令式编程和声明式编程: 以计时器为例: // 原生 JavaScript 实现计数器,是命令式编程 <div><h1>当前数字:<span class"count"></span></h1><button class"add" click&qu…...
GMM高斯混合聚类算法(Matlab)
目录 效果一览基本介绍程序设计参考资料 效果一览 基本介绍 GMM高斯混合聚类算法 matlab2023b语言,一键出图,直接运行 1.代码注释清晰,自行解读容易。 2…输出图例如图所示包括:聚类图(聚类结果图),协方差矩阵类型…...
【Leetcode 每日一题】2266. 统计打字方案数
问题背景 Alice 在给 Bob 用手机打字。数字到字母的 对应 如下图所示。 为了 打出 一个字母,Alice 需要 按 对应字母 i i i 次, i i i 是该字母在这个按键上所处的位置。 比方说,为了按出字母 ‘s’ ,Alice 需要按 ‘7’ 四次…...
多线程杂谈:惊群现象、CAS、安全的单例
引言 本文是一篇杂谈,帮助大家了解多线程可能会出现的面试题。 目录 引言 惊群现象 结合条件变量 CAS原子操作(cmp & swap) 线程控制:两个线程交替打印奇偶数 智能指针线程安全 单例模式线程安全 最简单的单例&…...
Nginx调优
Nginx 是一个高性能的反向代理服务器和负载均衡器,在处理大量并发请求时表现出色。但是,随着系统负载的增加,Nginx 的性能可能受到多方面的影响,因此进行适当的调优至关重要。以下是 Nginx 调优的几个方向和关键点: 1…...