全同态加密(FHE):BV方案、密钥切换、模约化、自举

目前,全同态加密FHE,仅仅在上被构造出来。

编码

  • most significant bit encoding

    • Encode:

      输入1比特的消息 u u u,计算
      b = < s , a > + e + u ⋅ ⌊ q 2 ⌉ m o d    q b = <s,a>+e + u\cdot \lfloor \dfrac{q}{2} \rceil \mod q b=<s,a>+e+u2qmodq
      其中 e e e是一个很小的error

      输出
      E n c ( u ) = ( a , b ) Enc(u) = (a,b) Enc(u)=(a,b)

    • Decode:

      输入 c = ( a , b ) c = (a,b) c=(a,b),计算
      t = b − < s , a > ≈ u ⋅ ⌊ q 2 ⌉ m o d    q t = b - <s,a> \approx u \cdot \lfloor \dfrac{q}{2} \rceil \mod q t=b<s,a>u2qmodq
      输出
      D e c ( c ) = { 0 , t ≈ 0 1 , t ≈ q 2 Dec(c) = \left\{ \begin{aligned} 0,&& t \approx 0\\ 1,&& t \approx \dfrac{q}{2}\\ \end{aligned} \right. Dec(c)=0,1,t0t2q

  • least significant bit encoding

    • Encode:

      输入1比特的消息 u u u,计算
      b = < s , a > + u ˉ m o d    q b = <s,a> + \bar u \mod q b=<s,a>+uˉmodq
      其中 u ˉ ≡ u m o d    2 \bar u \equiv u \mod 2 uˉumod2是一个很小的error

      输出
      E n c ( u ) = ( a , b ) Enc(u) = (a,b) Enc(u)=(a,b)

    • Decode:

      输入 c = ( a , b ) c = (a,b) c=(a,b),计算
      t = b − < s , a > = u ˉ m o d    q t = b - <s,a> = \bar u \mod q t=b<s,a>=uˉmodq
      输出
      D e c ( c ) = { 0 , t ≡ 0 m o d    2 1 , t ≡ 1 m o d    2 Dec(c) = \left\{ \begin{aligned} 0,&& t \equiv 0 \mod 2\\ 1,&& t \equiv 1 \mod 2\\ \end{aligned} \right. Dec(c)={0,1,t0mod2t1mod2

  • 如果记 s ˉ = ( − s , 1 ) \bar s = (-s,1) sˉ=(s,1),那么 D e c ( c ) = < s ˉ , c > = b − < s , a > Dec(c) = <\bar s,c> = b-<s,a> Dec(c)=<sˉ,c>=b<s,a>

  • 当明文、密文的模数互素时,两种编码方式等价。可以在不知道 s s s的情况下从一种编码转换为另一种编码。

BV scheme

  • BV方案是一种FHE,它支持同态布尔运算 (模2加法、模2乘法)。由于这两个布尔逻辑是完备的,我们可以搭建起任意电路。

  • BV方案使用关于奇数 q q q的LWE秘密 s s s作为私钥,将LWE采样作为密文 c = ( a , b ) c=(a,b) c=(a,b)

  • 使用least significant bit encoding编码方式: D e c ( c ) = < s ˉ , c > = u ˉ m o d    q Dec(c) = <\bar s, c> = \bar u \mod q Dec(c)=<sˉ,c>=uˉmodq

  • 加法同态:
    < s ˉ , c 1 + c 2 > = < s ˉ , c 1 > + < s ˉ , c 2 > = u ˉ 1 + u ˉ 2 m o d    q <\bar s, c_1 + c_2> = <\bar s,c_1> + <\bar s,c_2> = \bar u_1 + \bar u_2 \mod q <sˉ,c1+c2>=<sˉ,c1>+<sˉ,c2>=uˉ1+uˉ2modq

  • 乘法同态:
    < s ˉ ⊗ s ˉ , c 1 ⊗ c 2 > = < s ˉ , c 1 > ⋅ < s ˉ , c 2 > = u ˉ 1 ⋅ u ˉ 2 m o d    q <\bar s \otimes \bar s, c_1 \otimes c_2> = <\bar s,c_1> \cdot <\bar s,c_2> = \bar u_1 \cdot \bar u_2 \mod q <sˉsˉ,c1c2>=<sˉ,c1><sˉ,c2>=uˉ1uˉ2modq
    其中的 ⊗ \otimes 是克罗内克积 (Kronecker product)

    对于 c 1 , c 2 ∈ Z q n c_1,c_2 \in Z_q^n c1,c2Zqn,有
    c 1 ⊗ c 2 = ( c 1 , i ⋅ c 2 , j ) i , j ∈ Z q n 2 c_1 \otimes c_2 = (c_{1,i} \cdot c_{2,j})_{i,j} \in Z_q^{n^2} c1c2=(c1,ic2,j)i,jZqn2

  • 随着密文同态乘法的计算,密文的规模迅速增大。每次相乘,因为和 c i ∈ Z q n c_i \in Z_q^n ciZqn做克罗内克积,其密文的规模扩大 n n n倍。

  • 同时,噪声规模也在迅速增长。若干次同态乘法后,噪声将会大到淹没原始信息的程度,从而导致解密失败。

Key switching technique

  • 通过替换密钥,约简密文的维度。

  • 假设 s i n s_{in} sin把信息 u u u加密为 c i n c_{in} cin,令 s i n , c i n ∈ Z q n i n s_{in},c_{in} \in Z_q^{n_{in}} sin,cinZqnin
    < s i n , c i n > = ( s i n t G ) ⋅ G − 1 ( c i n ) ≈ u ⋅ ⌊ q 2 ⌉ <s_{in},c_{in}> = (s_{in}^tG) \cdot G^{-1}(c_{in}) \approx u \cdot \lfloor \dfrac{q}{2} \rceil <sin,cin>=(sintG)G1(cin)u2q
    其中 G ∈ Z q n i n × ( n i n l ) G \in Z_q^{n_{in} \times (n_{in}l)} GZqnin×(ninl)是工具矩阵 (Gadget Matrix),编码方式为most significant bit encoding

  • 选取 s o u t ∈ Z q n o u t s_{out} \in Z_q^{n_{out}} soutZqnout,对于方程
    s o u t t K ≈ s i n t G m o d    q s_{out}^tK \approx s_{in}^t G \mod q souttKsintGmodq
    可以求解 K ∈ Z q n o u t × ( n i n l ) K \in Z_q^{n_{out} \times (n_{in}l)} KZqnout×(ninl),它的第 j j j列是关于 s o u t s_{out} soutLWE采样 ( a , s o u t t a + e + s i n t G j ) (a,s_{out}^ta+e+s_{in}^t G_j) (a,soutta+e+sintGj)

    如果 s i n s_{in} sin s o u t s_{out} sout独立,那么 K K K是伪随机的。


  • c o u t = K ⋅ G − 1 ( c i n ) ∈ Z q n o u t c_{out} = K \cdot G^{-1}(c_{in}) \in Z_q^{n_{out}} cout=KG1(cin)Zqnout
    其中 G − 1 ( c i n ) G^{-1}(c_{in}) G1(cin)是短整数向量。

  • 容易验证
    < s o u t , c o u t > = ( s o u t t K ) ⋅ G − 1 ( c i n ) ≈ ( s i n t G ) ⋅ G − 1 ( c i n ) = < s i n , c i n > <s_{out},c_{out}> = (s_{out}^t K) \cdot G^{-1}(c_{in}) \approx (s_{in}^tG) \cdot G^{-1}(c_{in}) = <s_{in},c_{in}> <sout,cout>=(souttK)G1(cin)(sintG)G1(cin)=<sin,cin>
    s o u t s_{out} sout把信息 u u u加密为 c o u t c_{out} cout

Modulus reduction technique

  • 将模数 q q q除掉 p o l y ( n ) poly(n) poly(n),控制错误比率几乎不变。

  • 设置 q = n Θ ( d ) q = n^{\Theta(d)} q=nΘ(d),那么可以支持深度 d d d的乘法电路。

  • 当从 Z q Z_q Zq转换到 Z q ′ Z_{q'} Zq时,使用舍入操作 ⌊ c ⌉ q ′ = ⌊ q ′ q ⋅ c ⌉ \lfloor c \rceil_{q'} = \lfloor \dfrac{q'}{q} \cdot c \rceil cq=qqc

  • 那么
    < s , c > ∈   e + q Z ⇓ < s , ⌊ c ⌉ q ′ > ∈     < s , q ′ q ⋅ c + [ − 0.5 , 0.5 ] n > ⊆ ( q ′ q ⋅ e + ∥ s ∥ n ⋅ [ − 0.5 , 0.5 ] ) + q ′ Z \begin{aligned} <s, c> &\in\, e+qZ\\ &\Downarrow\\ <s, \lfloor c \rceil_{q'}> &\in\,\,\, <s, \dfrac{q'}{q} \cdot c + [-0.5,0.5]^n>\\ &\sube (\dfrac{q'}{q} \cdot e + \|s\|\sqrt n \cdot [-0.5,0.5]) + q'Z \end{aligned} <s,c><s,cq>e+qZ<s,qqc+[0.5,0.5]n>(qqe+sn [0.5,0.5])+qZ

  • 由于 s s s是短向量,因此在 Z q ′ Z_{q'} Zq上的错误比率维持在 ∣ e ∣ / q |e|/q e/q附近。

Bootstrapping

  • 目前的FHE都是“leveled”的。即:虽然可以支持同态加法和同态乘法两种运算,且同态加法 (几乎) 可以无限次运算;但是,同态乘法会使得密文中的噪声迅速增长,淹没掉原始的信息,从而无法正确解密。
  • 为了获得“unbounded”的FHE,Gentry提出了一种自举算法:将私钥 s k 1 sk_1 sk1用公钥 p k 2 pk_2 pk2加密,将 p k 1 pk_1 pk1下的密文也用公钥 p k 2 pk_2 pk2加密,然后运行解密函数 (同态运算),得到 p k 2 pk_2 pk2下的密文。
  • 只要解密操作没有消耗掉所有的乘法次数,那么就可以继续在密文下对消息进行同态计算了。
  • 设置 s k 1 = s k 2 = s k ,   p k 1 = p k 2 = p k sk_1=sk_2=sk,\,pk_1=pk_2=pk sk1=sk2=sk,pk1=pk2=pk,这需要额外的安全要求:循环 (circular) 加密安全,即使用 p k pk pk加密 s k sk sk后得到的 c s k c_{sk} csk对于消息 m m m的密文 c c c的解密没有帮助。
  • 这条性质很难证明,但同时目前也没有攻击方案。
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值