全同态加密理论、生态现状与未来展望(上)

《全同态加密理论、生态现状与未来展望》系列由lynndell2010@gmail.commutourend2010@gmail.com整理原创发布,分为上中下三个系列:

整个系列内容可能存在纰漏,希望能得到大家的反馈,有任何问题欢迎邮件联系lynndell2010@gmail.commutourend2010@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,,vnRm为一组线性无关的向量。由 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,,anZ,v1,v2,,vnRm}.

任意一组可以生成格的线性无关的向量称为格的,格基的向量个数称为格的维度

1.1.2 格计算困难问题

  • 最短向量问题(SVP):
    在格 L L L中求一个非零向量 v ∈ L \mathbf{v} \in L vL,使它的欧几里得范数 ∣ ∣ v ∣ ∣ = v ⋅ v ||\mathbf{v}||=\sqrt {\mathbf{v} \cdot \mathbf{v}} ∣∣v∣∣=vv 最小。

  • 最近向量问题(CVP):
    已知一个不在格 L L L中的向量 w ∈ R m \mathbf{w} \in \mathbb{R}^m wRm,求一个向量 v ∈ L \mathbf{v} \in L vL,使它最接近 w \mathbf{w} w。换言之,求一个向量 v ∈ L \mathbf{v} \in L vL,使欧几里得范数 ∣ ∣ w − v ∣ ∣ ||\mathbf{w}-\mathbf{v}|| ∣∣wv∣∣最小。

在格中可能存在不止一个最短的非零向量(找出一个即可)。例如,在 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 max1in∣∣vi∣∣      i=1n∣∣vi2
因此,可能有许多版本的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 vL,使其满足:
∣ ∣ 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 vL,满足:
∣ ∣ 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} AZqmn和向量 b ∈ Z q m \mathbf{b}\in \mathbb{Z}_q^{m} bZqm,求向量 s ∈ Z q n \mathbf{s}\in\mathbb{Z}_q^{n} sZqn是困难的。其中,
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} eZNm是噪声(欧几里得范数很小)。

图1:LWE 搜索困难问题

LWE判决困难问题: 已知矩阵 A ∈ Z q m n \mathbf{A}\in \mathbb{Z}_q^{mn} AZqmn和向量 b ∈ Z q m \mathbf{b}\in \mathbb{Z}_q^{m} bZqm,判断是LWE实例,还是随机数实例。

1.1.6 环LWE困难问题

q ≥ 2 q\ge 2 q2,多项式次数 n ≥ 1 n\ge 1 n1是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 aRq,根据分布 χ \chi χ选择噪声向量 e ∈ R q \mathbf{e}\in R_q eRq,则
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,as+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 sRq是困难的。
环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算法包括以下三个步骤:

  1. 使用优质基,能在多项式时间内求实数 t i ∈ R t_i\in \mathbb{R} tiR,使得 w = t 1 v 1 + . . . + t n v n \mathbf{w}=t_1\mathbf{v}_1+...+t_n\mathbf{v}_n w=t1v1+...+tnvn,即任意向量由基线性表达。

  2. 对于实数 t i ∈ R t_i\in \mathbb{R} tiR,取四舍五入 a i = ⌈ t i ⌋ a_i = \lceil t_i \rfloor ai=ti

  3. 计算向量 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} tiR,则四舍五入的误差较大,无法获得正确结果。
如果目标向量是一个噪声(欧几里得范数很小),则 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=mW+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} cV1VW1=⌈(mW+r)V1U1=mWV1+rV1U1=mUVV1+rV1U1=mU+rV1U1mUU1=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 rV10

举例:

  • 密钥生成: 私钥使用如下优质基
    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 = 81532112815784965817496929860466870892911977024
    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∥∥v5det(L)]1/50.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= 1691103211011164267714586139747113319091618549255829547152411162
    满足 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= 714540384453569137460019739113685179080290084280423725691548947336579839491316527526103916426154007523692497182307011 可以看出,这组公钥基的 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∥∥w5det(L)]1/50.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] 714540384453569137460019739113685179080290084280423725691548947336579839491316527526103916426154007523692497182307011 + 95124 =(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} cV1 8407.08360082.95264102.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=cV1V=[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=cr=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=vW1=[3746844,9425530,1806278,2332800,7102172]W1=[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} cW1[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′′=cW1=[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=cW1W
    很明显,攻击者找到的是一个不正确的明文向量: 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} cv=ccV1V=11.2694cv′′=ccW1W13264.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=sZqn
    随机均匀选取矩阵 A ← Z q N × n \mathbf{A}\leftarrow \mathbb{Z}_q^{N\times n} AZqN×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:=2qm+rTbZqc2:=rTAZqn 则密文为 ( 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[(c1c2s)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[(c1c2s)modq]=q2[2qm+rTbrTAs]=q2[2qm+rT(As+e)rTAs]=q2[2qm+rTe]=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} rTe被放大了。

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=sZqn
    随机均匀选取矩阵 A ← Z q N × n \mathbf{A}\leftarrow \mathbb{Z}_q^{N\times n} AZqN×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+bTrZqc2:=ATrZqn

  • 解密: 输入私钥 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 (c1c2s)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} (c1c2s)modqmod2=(m+bTrATrs)modqmod2=(m+(As+2e)TrATrs)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} SZqn×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} AZqN×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:=AS+EZqN×l

    A : = [ b ∣ − A ′ ] ∈ Z q N × ( n + l ) \mathbf{A}:=[\mathbf{b}|-\mathbf{A}']\in \mathbb{Z}_q^{N\times (n+l)} A:=[bA]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} AS=[bA]S=[AS+EA]S=[AS+EA](1,...,1∣∣S)=E

  • 加密: 消息为 l l l维向量 m ∈ Z t l \mathbf{m}\in \mathbb{Z}_t^l mZtl,令 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+ATrZq(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+ATr))=qt(((1,...,1∣∣S))T((tq)((m,0,...,0))+([bA])Tr)) 注意,噪声 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+cmodp)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) cc=(m+2r)(m+2r)+p(pqq+mq+mq+2rq+2rq)

  • 解密: ( 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 (ccmodp)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 cmod11=3再模2,则等于1。计算正确。

同态乘法对噪声影响较大。

( c ⋅ c ′ ) = 53 ⋅ 58 = 3074 (c\cdot c') = 53\cdot 58=3074 (cc)=5358=3074,模 p p p等于 5 5 5,在模 2 2 2等于 1 1 1。但是 m ⋅ m ′ = 0 m\cdot m'=0 mm=0。计算错误。

乘法导致噪声快速增大,所以解密出错。

1.2.5 LV10:环LEW公钥加密

  • 多项式的模运算非常适合图灵计算架构(分配的内存宽度有限)。

  • 矩阵计算需要根据计算需求额外分配内存,所以效率稍微差点。

LV10环LEW公钥加密看作Regev的LEW公钥加密在环上的推广。

On Ideal Lattices and Learning with Errors over Rings

q ≥ 2 q\ge 2 q2,多项式次数 n ≥ 1 n\ge 1 n1是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 aRq,选择噪声 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 mR2。随机选择 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/2m+be2+e3Rqc2=ae2+e4Rq 则密文为 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:=q2c1c2smodqmod2
    展开如下: 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} q2c1c2s=q2(⌊q/2m+be2+e3(ae2+e4)s)=q2(⌊q/2m+(as+e1)e2+e3(ae2+e4)s)=q2(⌊q/2m+e1e2+e3e4s)=m+q2(e1e2+e3e4s)=m+e

1.2.6 LV10变形

方案特点:2倍噪声,则加密不需要放大消息,解密不需要缩小消息。

q ≥ 2 q\ge 2 q2,多项式次数 n ≥ 1 n\ge 1 n1是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 aRq,选择 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 mR2。随机选择 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+e3Rqc2=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:=c1c2smodqmod2 展开如下: 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} c1c2smodqmod2=m+be2+2e3(ae2+2e4)s)modqmod2=m+(as+2e1)e2+2e3(ae2+2e4)s)modqmod2=m+2e1e2+2e32e4smodqmod2=m+2emod2=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 xy )的加密结果,而无需解密 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)) cEncpk(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),fF,
    其中, c i ← Enc pk ( m i ) ,   ∀ i ∈ { 1 , … , t } c_i \leftarrow \text{Enc}_{\text{pk}}(m_i), \, \forall i \in \{1, \dots, t\} ciEncpk(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 在实现全同态加密时,注意到如果同时执行自己的解密算法,即输入的密文是对原密文中每一位加密的结果,输入的密钥是对原密文密钥每一位加密的结果,那么经过同态执行解密算法就会得到一个新的密文,这个新的密文噪声是固定的。因此,可以通过同态解密技术约束(管理)密文的噪声。

  1. 密钥生成: 私钥和公钥对分别为 ( s k 1 , p k 1 ) , ( s k 2 , p k 2 ) (sk_1,pk_1),(sk_2,pk_2) (sk1,pk1),(sk2,pk2)

  2. 加密: 使用 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  

  3. 加密: 使用 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次乘法的组合。

  4. 加密: 使用 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)

  5. **同态运算:**输入 [ [ 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 xZqn时,为降低噪声的影响,可将该向量位展开,即将向量中的每个元素展开成二进制形式,从而向量 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 xZn,令 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=0logq12iwi(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,,wlogq1){0,1}nlogq

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,,wlogq1)
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=0logq12iwi(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 yZn,输出
( 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,,2logq1y)modqZnlogq

对于所有 x ∈ Z q n \mathbf{x} \in \mathbb{Z}_q^n xZqn y ∈ Z q n \mathbf{y} \in \mathbb{Z}_q^n yZqn,有如下性质:
⟨ 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 nlogq维向量 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)⟩=BitDecomp1(a),y=Flatten(a),Powersof2(y)⟩

参考文献

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值