• 格密码学: LWE\SIS for PKE\SIG\FHE


    本文是ZJU Crypto School 2023中Lattice 3-4相关内容的总结。

    在这一篇文章中,我们将涉及:

    1. L W E ≤ P K E LWE \leq PKE LWEPKE,此即,我们可以基于LWE构造公钥加密
    2. 进一步地,我们如何构造签名?FHE?怎么优化参数?

    此即:构造
    L W E ≤ P K E LWE \leq PKE LWEPKE
    L W E ≤ S I G LWE \leq SIG LWESIG
    L W E ≤ F H E LWE \leq FHE LWEFHE
    (在后两者中,我们将使用格Trapdoor技巧)


    PKE

    首先,我们回顾Oded Regev的PKE构造方案(的一种构造方式)。它是很多IBE/FHE方案的基础。

    KeyGen ⁡ \operatorname{KeyGen} KeyGen:我们生成 A ∈ Z q n × m A \in \mathbb Z_q^{n \times m} AZqn×m。(这里需要 A A A是一个矮胖的矩阵,即 n < m n < m n<m)。 r r r是一个短向量,不妨认为 r ∈ { 0 , 1 } m r \in \{0, 1\}^m r{0,1}m。计算 u = A r u = Ar u=Ar
    于是:

    • 公钥 p k = ( A , u = A r ) pk = (A, u = Ar) pk=(A,u=Ar)
    • 私钥 s k = r sk = r sk=r

    Enc ⁡ p k ( m ) \operatorname{Enc}_{pk}(m) Encpk(m):我们生成均匀随机(uniformly random)的 s ← Z q n s \leftarrow \mathbb{Z}_q^n sZqn,计算
    ( c 1 , c 2 ) = ( s A + e , s u + e ′ + q 2 m ) (c_1, c_2) = (sA+e, su+e'+\frac{q}{2}m) (c1,c2)=(sA+e,su+e+2qm)
    其中 e , e ′ e, e' e,e都是噪声。则 ( c 1 , c 2 ) (c_1, c_2) (c1,c2)为密文。

    Dec ⁡ s k ( c 1 , c 2 ) \operatorname{Dec}_{sk}(c_1, c_2) Decsk(c1,c2):计算 ⌊ c 2 − c 1 ⋅ r ⌉ \lfloor c_2 - c_1 \cdot r\rceil c2c1r。其中 ⌊ ⋅ ⌉ \lfloor ·\rceil 是取整。

    我们考察解密正确性,即计算 c 2 − c 1 ⋅ r c_2 - c_1 \cdot r c2c1r

    c 2 − c 1 r c_2 - c_1r c2c1r
    = ( s u + e ′ + q 2 m ) − ( s A + e ) r = (su+e'+\frac{q}{2}m) - (sA+e)r =(su+e+2qm)(sA+e)r
    = s A r + e ′ + q 2 m − s A r − e r = sAr+e'+\frac{q}{2}m- sAr - er =sAr+e+2qmsArer
    = q 2 m + e ′ − e r = \frac{q}{2}m + e' - er =2qm+eer

    其中后面的 e ′ + s e − e r e' + se - er e+seer是小的。于是,我们只需要考察 q 2 m \frac{q}{2}m 2qm是接近于0还是接近于 q 2 \frac{q}{2} 2q(在 m o d    q \mod q modq意义下)。

    在这里。我们需要知道 r r r是一个短向量。如果 r r r太大,那么无法保证解密的正确性。


    PKE安全性

    下面,我们考虑上述PKE方案的安全性。我们首先观察密文的形式:

    ( c 1 , c 2 ) = ( s A + e , s u + e ′ + q 2 m ) (c_1, c_2) = (sA+e, su+e'+\frac{q}{2}m) (c1,c2)=(sA+e,su+e+2qm)

    注意到 c 1 , c 2 c_1, c_2 c1,c2长得都比较像LWE的sample。 c 1 c_1 c1显然就是一个LWE。如果 u u u是uniformly random的向量,那么 c 2 c_2 c2也将是一个LWE的sample。

    但是 u = A r + e u=Ar+e u=Ar+e,从构造上来看, u u u其实并不是在 Z q n \mathbb Z_q^n Zqn上uniformly random的。因为 r r r是在 { 0 , 1 } m \{0, 1\}^m {0,1}m上均匀随机的而不是在 Z q n \mathbb Z_q^n Zqn上均匀随机的。

    但是 u u u实际上和uniformly random(在统计上)不可区分的。

    为了说明这样一件事情,我们引入Leftover Hash Lemma(LHL)。

    它大概是说,你如果从 { 0 , 1 } \{0, 1\} {0,1}中均匀随机选 r r r,那么 u = A r u=Ar u=Ar的分布和均匀随机(在统计上)不可区分。


    剩余哈希引理(LHL)

    引理(Leftover Hash Lemma, LHL). A ← Z q n × m A \leftarrow \mathbb{Z}_q^{n \times m} AZqn×m r ← { 0 , 1 } m r \leftarrow \{0, 1\}^m r{0,1}m u ← Z q n u \leftarrow \mathbb{Z}_q^n uZqn。如果 m > n log ⁡ q + O ( 1 log ⁡ q ) m > n\log q + O(\frac{1}{\log q}) m>nlogq+O(logq1),那么
    ( A , A r ) ≈ ϵ ( A , u ) (A, Ar)\approx_\epsilon (A, u) (A,Ar)ϵ(A,u)

    其中, ≈ ϵ \approx_\epsilon ϵ指统计距离的差为 ϵ \epsilon ϵ

    即, ( A , A r ) (A, Ar) (A,Ar) ( A , u ) (A, u) (A,u)是统计上不可区分的。


    我们在这里不会去证明LHL。但是,我们提供一种理解LHL的思路:LHL本质上是一种对随机性的提取或者降维(Randomness extraction)。

    假设存在一个随机源 r r r。这个 r r r均匀采样于 { 0 , 1 } m \{0, 1\}^m {0,1}m,但是如果把这个 r r r放在 Z q m \mathbb Z_q^m Zqm下,那么它显然不是 Z q m \mathbb Z_q^m Zqm上均匀随机的。

    我们计算 A r Ar Ar。这个 A r Ar Ar就是一个提取(或者压缩)随机性的过程。矮胖的矩阵 A A A就是提取器。

    取对数底数为2,于是 r r r的熵是 m log ⁡ 2 m\log 2 mlog2。如果 u u u是真随机的,那么 u u u的熵就是 n log ⁡ q n\log q nlogq

    因此,如果 m log ⁡ 2 m\log 2 mlog2 n log ⁡ q n\log q nlogq大一点点,那么可以认为 r r r中包含的随机性足够萃取成一个 Z q n \mathbb Z^n_q Zqn上的随机向量。我们就可以在计算上认为 A r Ar Ar就是随机的。

    从这里的分析来看,引理中涉及的不等式 m > n log ⁡ q + O ( 1 log ⁡ q ) m > n\log q + O(\frac{1}{\log q}) m>nlogq+O(logq1)似乎是存在一些不准确的地方。


    定理. 上述PKE是安全的,并且密文是伪随机的。

    我们需要证明, ( p k , Enc ⁡ p k ( m ) ) (pk, \operatorname{Enc}_{pk}(m)) (pk,Encpk(m)) ( p k , u n i f o r m ) (pk, uniform) (pk,uniform)是统计不可区分的。

    ( p k , Enc ⁡ p k ( m ) ) = ( A , u = A r , s A + e , s u + e ′ + q 2 m ) (pk, \operatorname{Enc}_{pk}(m)) = (A, u = Ar, sA+e, su+e'+\frac{q}{2}m) (pk,Encpk(m))=(A,u=Ar,sA+e,su+e+2qm)

    我们有 p k = ( A , u = A r ) pk = (A, u = Ar) pk=(A,u=Ar) ( A , u 0 ) (A, u_0) (A,u0)不可区分(LHL)。这里 u 0 u_0 u0是真·均匀随机。

    于是 ( p k , Enc ⁡ p k ( m ) ) (pk, \operatorname{Enc}_{pk}(m)) (pk,Encpk(m)) ( A , u 0 , s A + e , s u + e ′ + q 2 m ) (A, u_0, sA+e, su+e'+\frac{q}{2}m) (A,u0,sA+e,su+e+2qm)不可区分。

    根据LWE问题(和LHL), ( A , u 0 , s A + e , s u + e ′ + q 2 m ) (A, u_0, sA+e, su+e'+\frac{q}{2}m) (A,u0,sA+e,su+e+2qm) ( A , u 0 , u 1 , u 2 + q 2 m ) (A, u_0, u_1, u_2+\frac{q}{2}m) (A,u0,u1,u2+2qm)是不可区分的。其中 u 1 , u 2 u_1, u_2 u1,u2是真·均匀随机。

    最后,由于一次性密码本, ( A , u 0 , u 1 , u 2 + q 2 m ) (A, u_0, u_1, u_2+\frac{q}{2}m) (A,u0,u1,u2+2qm) ( A , u 0 , u 1 , u 2 ) (A, u_0, u_1, u_2) (A,u0,u1,u2)是不可区分的。


    PKE的另一种形式

    KeyGen ⁡ \operatorname{KeyGen} KeyGen

    • p k = ( A , u ) pk = (A, u) pk=(A,u),其中 A ← Z q m × n ( m > n ) , u = A s + e A \leftarrow \mathbb Z_q^{m \times n} (m > n), u = As + e AZqm×n(m>n),u=As+e A A A是一个高矩阵。
    • s k = s sk = s sk=s

    Enc ⁡ \operatorname{Enc} Enc:生成向量 r ← { 0 , 1 } m r \leftarrow \{0, 1\}^m r{0,1}m。注意到 r r r是小的。则 Enc ⁡ p k ( m ) = ( r A , r u + q 2 m ) \operatorname{Enc}_{pk}(m) = (rA, ru + \frac{q}{2}m) Encpk(m)=(rA,ru+2qm)。注意到,这里我们在加密的时候没有加噪声,那么密文的形式不再是LWE。于是在分析安全性的时候,就不能用到LWE了。

    Dec ⁡ \operatorname{Dec} Dec:给定密文 ( c 1 , c 2 ) (c_1, c_2) (c1,c2),计算 ⌊ c 2 − c 1 s ⌉ \lfloor c_2 - c_1s\rceil c2c1s

    (希望大家可以根据上下文分清 m m m作为维度和作为明文的区别。本文中这么写并不严谨,但是希望不会影阅响读)

    解密的正确性: c 2 − c 1 s c_2 - c_1s c2c1s
    = r u + q 2 m − r A s = ru + \frac{q}{2}m - rAs =ru+2qmrAs
    = r A s + r e + q 2 m − r A s = rAs + re + \frac{q}{2}m - rAs =rAs+re+2qmrAs
    = q 2 m + r e = \frac{q}{2}m + re =2qm+re

    安全性分析:我们将简述 ( p k , E n c ( m ) ) ≈ ( p k , u 0 ) (pk, Enc(m)) \approx (pk, u_0) (pk,Enc(m))(pk,u0)的证明思路,其中 u 0 u_0 u0是真·均匀随机。

    首先,
    ( A , u , c 1 , c 2 ) (A, u, c_1, c_2) (A,u,c1,c2)
    = ( A , u = A s + e , c 1 = r A , c 2 = r u + q 2 m ) = (A, u = As + e, c_1 = rA, c_2 = ru + \frac{q}{2}m) =(A,u=As+e,c1=rA,c2=ru+2qm)

    于是根据DLWE,我们无法区分
    ( A , A s + e , r A , r u + q 2 m ) (A, As + e, rA, ru + \frac{q}{2}m) (A,As+e,rA,ru+2qm) ( A , z 1 , r A , r z 2 + q 2 m ) (A, z_1, rA, rz_2 + \frac{q}{2}m) (A,z1,rA,rz2+2qm)。其中 z i z_i zi是真·均匀随机。

    又根据LHL,我们无法区分 r A rA rA和均匀随机向量、 r z 2 rz_2 rz2和随机向量。

    名词拓展:Dual Mode Encryption。我们真实的pk是 ( A , u = A s + e ) (A, u=As+e) (A,u=As+e),但是这个pk是和 ( A , z ) (A,z) (A,z)是不可区分的。如果我们用真实的pk加密,就会得到上面的分布,用sk解密的话也能恢复明文的信息。但是如果用 ( A , z ) (A,z) (A,z)进行加密,那么你得到的结果就是均匀随机的东西。DME大概的意思是,你有可能在KeyGen时生成真实世界的pk,然后加解密过程就一切如常。但是在分析的时候,我们可以生成一个和真实世界不可区分的pk,那么在加密后,你的消息会被完完全全地掩盖。于是安全性得到了保证。


    格中的陷门(Trapdoor)

    陷门这个东西,可以拿来构造一些诸如签名、IBE、FHE的方案。

    首先,什么是陷门?一种未经证实的类比,陷门类似于软件的后门。一个黑客直接攻破一个App难度很大。但是如果我们有软件后门,那么攻破这个App就有可能变得简单。

    给定LWE/SIS问题,如果我们有了陷门,那么求解SIS/LWE问题就是简单的。如果没有陷门,那么求解SIS/LWE问题就是难的。

    我们以SIS问题为例。随机选定 A A A, 任意给定 u u u,我们想找一个短向量 r r r,使得 A r = u Ar = u Ar=u。这就是SIS问题。找到符合要求的 r r r就意味着破解了SIS。

    但是,如果我们换个顺序,给定 A , r A, r A,r,计算 A r = u Ar = u Ar=u,这就是很简单的事情。

    陷门的存在就支持我们做这样的更换顺序的事情。具体地,SIS陷门意味着给你一个矩阵 T T T,你就可以把上述SIS问题变成给定 A , r A, r A,r,计算 A r = u Ar = u Ar=u的问题。如果没有这个 T T T,你就做不到这个事情。


    早期,GPV方案构造了一个陷门,但是构造比较复杂。

    后来,MP12方案构建了一个非常漂亮的陷门:G-Trapdoor。G-Trapdoor的命名来源于构造中产生的一个特定矩阵 G G G。可以基于MP12方案构造很多有意思的东西。

    给定矩阵 G G G和向量 u u u,我们要找小的 r r r,使得 G r = u Gr = u Gr=u。如果 G G G u u u是随机的,那么这个事情不容易啊。但是,如果我们非常巧合地把 G G G选成了单位矩阵 I I I,那么这个事情就有可能是非常简单的。

    具体地,假如我们在格 Z q 2 \mathbb Z_q^2 Zq2上随机采样选取格基 ( 1 , 0 ) (1, 0) (1,0) ( 0 , 1 ) (0, 1) (0,1),把它捏成矩阵 G G G(于是 G G G是单位矩阵),那么对于任意的向量 u u u,求解 G r = u Gr = u Gr=u的过程将变成无聊的报坐标过程。但是如果我们对 G G G做一个线性变换,搞出来一个随机矩阵 A A A,那么求解 A z = u Az=u Az=u就基本意味着解SIS了。

    今天,我们假设有这样一个让整件事情变得容易的 G G G。如果对于选定的随机矩阵 A A A,存在一个矩阵 T T T,使得 A T = G AT=G AT=G,那么如何找到 z z z,使得 A z = u Az = u Az=u

    我们可以走如下的步骤:

    1. 采样 r r r,使得 G r = u Gr = u Gr=u
    2. 输出 z = T r z = Tr z=Tr。于是 A ( T r ) = u A(Tr) = u A(Tr)=u

    此处, T T T就是陷门。其实,给定随机的矩阵 A A A,寻找 T T T是很困难的。


    G G G能做到的事情还不止这些。

    给定 ( G , s G + e ) (G, sG+e) (G,sG+e),找出 s s s e e e也是比较简单的。

    我们假设这样的 G G G存在。那么我们是不是也可以构造一个LWE的陷门呢?

    假设我们知道 A T = G AT=G AT=G,那么我们有 s A T + e T = s G + e ′ sAT+eT = sG+e' sAT+eT=sG+e。于是可以顺利地求解出 s s s e e e。在这里,我们说这个 G G G可以做LWE Inversion。

    注意,我们对于 T T T有一些额外的要求:如果 T T T过大,那么 e T = e ′ eT=e' eT=e就是大的,可能导致解密的失败。

    在前述的SIS陷门中也有同样的要求:如果 T T T太大, T r Tr Tr也不可避免地会变大(输出的 z z z就不是短向量了)。

    下面的问题就是,能不能以及如何找到一个高品质的(小的) T T T

    构造方法:

    1. 首先,和经典的、不带Trapdoor的LWE一样,采样 A ← Z q n × m A \leftarrow \mathbb Z_q^{n \times m} AZqn×m(A是一个矮胖的矩阵)

    2. Trapdoor采样:采样 ( A , B ) (A,B) (A,B)。并且,如果我们把 B B B遮住,我们希望 A A A看着就像均匀随机。MP12中的构造方法如下:

      构造 [ A 1    A 2 ] [A_1 \ \ A_2] [A1  A2],其中 A i ∈ Z q n × m , i = 1 , 2 A_i \in Z_q^{n \times m}, i=1,2 AiZqn×m,i=1,2 A 1 A_1 A1来自均匀采样, A 2 = A 1 R + G A_2 = A_1R+G A2=A1R+G,其中 R ← { 0 , 1 } m × m R \leftarrow \{0, 1\}^{m \times m} R{0,1}m×m均匀随机。

      这里,我们还没说 G G G怎么生成,但是我们先假设存在这样的 G G G


    几个问题:

    1. 这里的 A A A为什么和Uniformly random不可区分?因为LHL。

    2. 怎么把 A A A转换到 G G G?即 A ⋅ ? = G A · ? = G A?=G

      我们构造 [ A 1   A 1 R + G ] [ − R I ] = G

      [A1 A1R+G]" role="presentation">[A1 A1R+G]
      [RI]" role="presentation">[RI]
      = G [A1 A1R+G][RI]=G,于是 T = [ − R I ] T =
      [RI]" role="presentation">[RI]
      T=[RI]
      。这里,矩阵 R R R决定了 T T T的构造品质(范数)。

    3. 需要注意, G G G并不唯一。但是,存在构造 G G G的方法(比如下面将要介绍的构造)。


    G G G是什么,需要满足什么性质?

    1. 给定 G G G ∀ u \forall u u,可以找到短向量 G r = u Gr = u Gr=u
    2. 当用 G G G作为LWE中的矩阵时,LWE问题应当是简单的。

    MP12中给出了 G G G的构造:

    选取向量 g = [ 1   2   4   8   ⋯ q 2 ] g = [1\ 2\ 4\ 8\ \cdots \frac{q}{2}] g=[1 2 4 8 2q]。于是 G = g ⊗ I n G = g \otimes I_n G=gIn,其中 ⊗ \otimes 是Kroneckor积。

    有了这个向量 g g g,给定数字 a a a,我们可以求解 r r r,使得 g ⋅ r = a g \cdot r = a gr=a。(二进制分解)

    同理, G r = u Gr = u Gr=u也可以进行计算。其中 u u u是向量。

    上面的步骤构造了基于SIS的陷门。

    这个陷门如何用于LWE问题呢?


    假设 q = 2 k q = 2^k q=2k。我们给定如前所述的向量 g g g,采样LWE example: s g + e sg + e sg+e。其中, s s s是数字, e e e是向量。LWE问题的的目标是,寻找 s s s e e e

    我们将向量拆解。 s g + e sg+e sg+e是对这两个向量(都在 m o d    q \mod q modq意义下)求和:
    ( s   s ⋅ 2   ⋯   s ⋅ 2 k − 1 ) (s \ s·2 \ \cdots \ s·2^{k-1} ) (s s2  s2k1)
    ( e 0   e 1   ⋯   e k − 1 ) (e_0 \ e_1 \ \cdots \ e_{k-1}) (e0 e1  ek1)

    我们考虑 s ⋅ 2 k − 1 + e k − 1 s·2^{k-1}+e_{k-1} s2k1+ek1。我们总是可以将 s s s写成 s = 2 s ′ + s 0 s=2s'+s_0 s=2s+s0。于是 s ⋅ 2 k − 1 + e k − 1 = 2 k s ′ + 2 k − 1 ⋅ s 0 + e k − 1 s·2^{k-1}+e_{k-1} = 2^ks' + 2^{k-1}·s_0 + e_{k-1} s2k1+ek1=2ks+2k1s0+ek1

    q = 2 k q=2^k q=2k的时候,你可以把 2 k s ′ 2^ks' 2ks模掉,于是得到: 2 k − 1 s 0 + e k − 1 2^{k-1}s_0 + e_{k-1} 2k1s0+ek1。通过rounding就可以从中提取到 s 0 s_0 s0。这意味着,我们提取到了 s s s的最低比特位。重复这一步骤,于是我们可以求解出数字 s s s的每一个比特位,于是求解到整个 s s s

    最后,在SIS Trapdoor中,实际过程并不是输出 z = T r z = Tr z=Tr这么简单。它确实是输出短向量,但是这个短向量有可能泄露 T T T的信息。于是另一个问题是,我有一个Trapdoor,我可以找到一个短向量,但是这个短向量并不泄露 T T T的信息。处理的方法是给整套流程再添加一些随机项。

    最后达到的目的就是,我们采样的样本只和格有关系,而和我们使用哪一组Trapdoor无关。


    基于陷门的签名

    有了Trapdoor以后,GPV方案基于它构造了签名:

    KeyGen ⁡ \operatorname{KeyGen} KeyGen ( A , T ) (A, T) (A,T)——产生陷门。 p k = A , s k = T pk = A, sk=T pk=A,sk=T

    Sign ⁡ ( m ) \operatorname{Sign}(m) Sign(m)。计算 r m r_m rm,使得 A ⋅ r m = H ( m ) A \cdot r_m = H(m) Arm=H(m)。其中, H ( m ) H(m) H(m) m m m的哈希值。注意,需要有私钥 T T T的参与才能完成签名。

    关于验签,我们只需要验证两件事:

    1. r m r_m rm是一个短向量;
    2. A ⋅ r m = H ( m ) A \cdot r_m = H(m) Arm=H(m)

    定理. 在SIS问题的安全性假设以及random oracle(用于哈希)的安全性假设下,签名函数 Sign ⁡ ( ⋅ ) \operatorname{Sign}(·) Sign()是安全的。

    证明思路. 我们假设存在攻击者,他可以攻破这个签名函数。我们的证明目标是,存在归约,使得攻击者可以攻破SIS。

    签名安全性的大致内容:一个对消息 m m m的签名如果是不安全的,那么意味着可以找到碰撞 m ′ m' m,使得对 m , m ′ m, m' m,m进行签名的结果是一样的。

    首先,我们生成 ( A , T ) (A,T) (A,T)对,将 A A A公开。攻击者知道签名 r r r,于是知道 H ( m ) H(m) H(m),但是不知道私钥 T T T和签名对应的明文 m m m

    根据定义,攻击者可以通过查询RO来获取消息对应的哈希值。这意味着,RO需要维护一张表,对于给定的输入 x x x,RO要能查到对应的 r r r,并且返回 H ( x ) = A r H(x) = Ar H(x)=Ar

    现在假设攻击者要伪造 m ∗ , r ∗ m^*, r^* m,r使得 A r ∗ = H ( m ∗ ) = H ( m ) Ar^* = H(m^*) = H(m) Ar=H(m)=H(m)

    于是有 A ( r − r ∗ ) = 0 A(r - r^*) = 0 A(rr)=0

    这意味着攻击者可以攻破SIS。


    全同态加密(Fully Homomorphic Encryption)

    首先,看一下全同态加密的概念。

    我们任意选取若干的明文 x 1 , . . . , x n x_1,...,x_n x1,...,xn。与此同时有一个特殊的加密方案 ( K e y G e n , E n c , D e c ) (KeyGen, Enc, Dec) (KeyGen,Enc,Dec)。我们可以计算一个函数 f ( x 1 , . . . , x n ) f(x_1,...,x_n) f(x1,...,xn)。现在我们分别对这些明文进行加密,得到 c i = E n c ( x i ) , i = 1 , . . . , n c_i = Enc(x_i), i=1,...,n ci=Enc(xi),i=1,...,n。这个特殊加密方案还支持对密文 c 1 , . . . , c n c_1,...,c_n c1,...,cn做一些密文的运算 E n c E v a l ( f ) EncEval(f) EncEval(f)。计算 E n c E v a l ( f ) ( c 1 , . . . , c n ) EncEval(f)(c_1, ..., c_n) EncEval(f)(c1,...,cn)之后解密的结果,和在明文状态下计算 f ( x 1 , . . . , x n ) f(x_1,...,x_n) f(x1,...,xn)的结果是一样的。这就是同态加密的概念。

    同态加密到目前为止经历了四代:

    • 第一代:Gentry在2009年提出的基于ideal lattice的加密方案。
    • 第二代:BV, BGV, BFV等方案——基于RLWE问题,支持对一个整数向量进行加密,进而支持SIMD运算。
    • 第三代:GSW,一个非常简洁的方案。FHEW, TFHE等。
    • 第四代:CKKS方案,支持浮点向量的运算。但是,第四代和第二代的方法没有什么本质上的差别,主要是编码消息时使用的技巧(基于Canonical Embedding)有所不同。但是这个方案因为可以对浮点数进行操作,所以在隐私保护机器学习中还是比较火的。

    这一部分将基于GSW方案进行介绍。

    这个方案有一个特征,就是在 K e y G e n KeyGen KeyGen时需要对外暴露两个Key。一个是公钥 p k pk pk,一个是在做同态计算时用到的密钥 e v k evk evk

    下面,我们来看具体的实现。

    KeyGen ⁡ \operatorname{KeyGen} KeyGen. 首先生成随机矩阵 A A A,采样私钥 s k = s sk = s sk=s,计算公钥 p k = [ A b ] = B pk =

    [Ab]" role="presentation">[Ab]
    = B pk=[Ab]=B,其中 b = s A + e b = sA+e b=sA+e e e e是误差。可以根据LHL证明 p k pk pk的伪随机性。

    Enc ⁡ \operatorname{Enc} Enc. 对比特 m m m进行加密。给定比特 m ∈ { 0 , 1 } m \in \{0, 1\} m{0,1},计算 C = B R + m G C= BR + mG C=BR+mG,其中 R ∈ { 0 , 1 } M × M R \in \{0, 1\}^{M \times M} R{0,1}M×M

    Dec ⁡ \operatorname{Dec} Dec. 假如我们直接计算 ( − s , 1 ) ⋅ C = ( − s , 1 ) B R + ( − s , 1 ) m G = e R + ( − s , 1 ) m G (-s, 1) · C = (-s, 1)BR + (-s, 1)mG = eR + (-s, 1)mG (s,1)C=(s,1)BR+(s,1)mG=eR+(s,1)mG,我们会发现仍然无法计算出 m m m。其中, ( − s , 1 ) ⋅ B = b − s A = e (-s, 1) · B = b - sA = e (s,1)B=bsA=e

    下面的问题在于如何提取 m m m。我们找一个向量 r r r,使得
    G r = [ 0 ⋮ 0 q / 2 ] Gr =

    [00q/2]" role="presentation">[00q/2]
    Gr= 00q/2

    于是有: ( − s , 1 ) ⋅ C r = ( − s , 1 ) B R r + ( − s , 1 ) m G r = e ′ ′ + m q / 2 (-s, 1) · Cr = (-s, 1)BRr + (-s, 1)mGr = e'' + mq/2 (s,1)Cr=(s,1)BRr+(s,1)mGr=e′′+mq/2。只需要考察 e ′ ′ + m q / 2 e'' + mq/2 e′′+mq/2更接近0还是 q / 2 q/2 q/2就可以了。


    下面,我们考察加法的计算。假设有 C 1 = B R 1 + m 1 G C_1 = BR_1 + m_1G C1=BR1+m1G C 2 = B R 2 + m 2 G C_2 = BR_2 + m_2G C2=BR2+m2G

    可以直接得到: C 1 + C 2 = B ( R 1 + R 2 ) + ( m 1 + m 2 ) G C_1 + C_2 = B(R_1+R_2) + (m_1+m_2)G C1+C2=B(R1+R2)+(m1+m2)G

    但是做乘法不是那么容易。假设有 C 1 = B R 1 + m 1 G C_1 = BR_1 + m_1G C1=BR1+m1G C 2 = B R 2 + m 2 G C_2 = BR_2 + m_2G C2=BR2+m2G。我们所希望的是,做乘法之后的密文仍然有类似于 B R + m G BR + mG BR+mG的密文形式。

    一个直观的想法是计算 C 1 G − 1 C 2 C_1G^{-1}C_2 C1G1C2

    首先,我们可以计算矩阵 G G G的逆 G − 1 G^{-1} G1。则有 G G − 1 = I GG^{-1} = I GG1=I

    于是计算密文乘法的过程就类似于:

    ( B R 1 + m 1 G ) G − 1 C 2 (BR_1 + m_1G)G^{-1}C_2 (BR1+m1G)G1C2
    = B R 1 G − 1 C 2 + m 1 G G − 1 C 2 = BR_1G^{-1}C_2 + m_1GG^{-1}C_2 =BR1G1C2+m1GG1C2
    = B R ′ + m 1 B R 2 + m 1 m 2 G = BR'+m_1BR_2+m_1m_2G =BR+m1BR2+m1m2G
    = B R ′ + B m 1 R 2 + m 1 m 2 G = BR' + Bm_1R_2 + m_1m_2G =BR+Bm1R2+m1m2G
    = B R ′ ′ + m 1 m 2 G = BR'' + m_1m_2G =BR′′+m1m2G

    于是转化成了我们想要的形式。

    我们观察上述的乘法操作,可以发现:

    1. G − 1 G^{-1} G1大概将噪声扩大了 n \sqrt{n} n 倍。

    2. 假如给定密文 C 1 , C 2 C_1, C_2 C1,C2,它们的噪声界分别为 b 1 > b 2 b_1 > b_2 b1>b2,那么你计算 C 1 C 2 C_1C_2 C1C2和计算 C 2 C 1 C_2C_1 C2C1的噪声界存在差别,因为乘法的先后次序不同,引入的噪声是不一样的。

      在这个情况下,计算 C 2 G − 1 C 1 C_2G^{-1}C_1 C2G1C1的噪声要比 C 1 G − 1 C 2 C_1G^{-1}C_2 C1G1C2要小。


    全同态加密的自举操作(Bootstrapping)

    由于时间不够,课件里主要从high level讲了Bootstrapping。这里,我们建议读者参考本人的这篇博客给出的关于自举的简介。

  • 相关阅读:
    插件_日期_lunar-calendar公历农历转换
    Python 工匠 第三章 容器类型
    如何将 Python 运用到实际的测试工作中
    记一次语音播报功能
    2.11-CSS基础--伪类和伪元素
    【定位问题】基于matlab chan算法无源定位【含Matlab源码 2090期】
    【001】 libpq是什么?如何使用?
    webpack5 使用Thead多进程打包提升打包构建速度
    CVE-2023-5129:libwebp开源库10分漏洞
    第五话、离职前被老板威胁是一种什么样的体验
  • 原文地址:https://blog.csdn.net/weixin_43466027/article/details/132642345