全同态加密:BGV

Posted 山登绝顶我为峰 3(^v^)3

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了全同态加密:BGV相关的知识,希望对你有一定的参考价值。

参考文献:

  1. Brakerski Z, Vaikuntanathan V. Efficient fully homomorphic encryption from (standard) LWE[J]. SIAM Journal on computing, 2014, 43(2): 831-871.
  2. Brakerski Z, Gentry C, Vaikuntanathan V. (Leveled) fully homomorphic encryption without bootstrapping[J]. ACM Transactions on Computation Theory (TOCT), 2014, 6(3): 1-36.
  3. Peikert C. A decade of lattice cryptography[J]. Foundations and trends® in theoretical computer science, 2016, 10(4): 283-424.

文章目录

基础知识

快速数论变换 NTT,在文章 深入理解NTT 中介绍。BGV 方案中,使用多项式环 R = Z [ x ] / ( f ( x ) ) R = \\mathbb Z[x]/(f(x)) R=Z[x]/(f(x)),其中 f ( x ) = x d + 1 f(x)=x^d+1 f(x)=xd+1 是分圆多项式, d = 2 k d=2^k d=2k 是二的幂次。环 R R R 包含所有次数小于 d d d 的整系数多项式。然后,选取它的一个主理想 I = ( q ( x ) ) I=(q(x)) I=(q(x)),满足它的指数 [ R : I ] = p [R:I]=p [R:I]=p 是个素数,即环 R R R p p p 个陪集 a i + I ,   a i ∈ R a_i+I,\\, a_i \\in R ai+I,aiR 的不交并。做商环:
R q = R / I = R = Z [ x ] / ( q ( x ) , f ( x ) ) R_q = R/I = R = \\mathbb Z[x]/(q(x),f(x)) Rq=R/I=R=Z[x]/(q(x),f(x))

最简单的,可令 q ( x ) = p q(x)=p q(x)=p 是个素数,那么 R q = Z p [ x ] / ( f ( x ) ) R_q = \\mathbb Z_p[x]/(f(x)) Rq=Zp[x]/(f(x))

假如 p ≡ 1 m o d    2 d p \\equiv 1 \\mod 2d p1mod2d,那么在 R p R_p Rp 上多项式 f ( x ) f(x) f(x) 可以完全分解为线性的互素因式,
f ( x ) = x d + 1 = ∏ i = 1 d ( x − ξ i ) f(x) = x^d+1 = \\prod_i=1^d (x-\\xi_i) f(x)=xd+1=i=1d(xξi)

从而根据 CRT,令 P i = ( x − ξ i ,   p ) P_i = (x-\\xi_i,\\, p) Pi=(xξi,p) 为彼此互素的理想,有:
R p ≅ Z [ x ] / P 1 × ⋯ Z [ x ] / P d R_p \\cong \\mathbb Z[x]/P_1 \\times \\cdots \\mathbb Z[x]/P_d RpZ[x]/P1×Z[x]/Pd

简记 Z [ x ] / P i = R P i \\mathbb Z[x]/P_i = R_P_i Z[x]/Pi=RPi

LWE 和 RLWE 问题,在文章 格上困难问题 中介绍。为了方便方案的描述,BGV 不想对两种格困难问题分别构造方案,因此定义了 General Learning with Errors (GLWE) Problem

其中的噪声分布(一般取做离散高斯分布) χ \\chi χB-bounded distributions,定义如下:

格上的陷门,在文章 格密码:陷门OWF 中介绍。在 BGV 中对 Gadget 的描述为:
G : = I n ⊗ g = [ g 0 ⋯ 0 g 0 ⋮ 0 ⋱ ⋮ . . . g ] ∈ Z q n × n l G:=I_n \\otimes g= \\left[ \\beginarrayc | c c c g & 0 & \\cdots \\\\ \\hline 0 & g & 0 \\\\ \\vdots & 0 & \\ddots & \\vdots\\\\ & & ... & g\\\\ \\endarray \\right] \\in \\mathbb Z_q^n \\times nl G:=Ing= g00g00...g Zqn×nl

其中 q q q 是素数, l = ⌈ log ⁡ q ⌉ l = \\lceil \\log q \\rceil l=logq g = [ 1 , 2 , 4 , ⋯   , 2 l ] g=[1,2,4,\\cdots,2^l] g=[1,2,4,,2l]

  1. x ⃗ = G u ⃗ \\vec x = G \\vec u x =Gu :将向量 u ⃗ ∈ R 2 n l \\vec u \\in R_2^nl u R2nl 分成 n n n块,每个长为 l l l的 block 做二进制合成,得到向量 x ⃗ ∈ R q n \\vec x \\in R_q^n x Rqn
  2. u ⃗ = G − 1 ( x ) \\vec u = G^-1(x) u =G前言
  3. 推荐阅读资料
  4. BGV方案介绍
  5. 关于KeySwitching/Relinearization
  6. 前言

    之前看了好多资料,发现对于BGV的介绍都比较少,大家都主要关注于CKKS。其实在一些整数域上面的计算BGV还是很有优势的,与CKKS相比,BGV是一个确定性的加密方案,与BFV相比,BGV的乘法在RNS下实现要简单非常多。所以在某些场景下(比如有限域上的MPC与HE结合)会更加偏向于使用BGV方案,而且BGV方案也相对最易懂。

    推荐阅读资料

    1. (Leveled) Fully Homomorphic Encryption without Bootstrapping

    最初的BGV文章,但是主要关注于LWE上面。

    1. Fully homomorphic encryption with polylog overhead
    2. Homomorphic Evaluation of the AES Circuit

    关于BGV的两篇优化,作者都是(Gentry,Halevi,Smart),所以叫做GHS优化。

    1. Fully homomorphic SIMD operations

    这篇文章是将SIMD的,SIMD技术可以说是RLWE对于LWE的一个碾压性的优势之一了。作者是Smart和Vercauteren。

    1. Algorithms in HElib
    2. Bootstrapping for HElib
    3. Design and implementation of HElib : a homomorphic encryption library

    上面三篇文章都是Halevi和Shoup写的,关于Helib中如何实现BGV方案并优化,以及如何对于BGV做Bootstrapping。

    BGV方案介绍

    密文形式

    首先BGV最基本的加密形式是:

    在这里我们只看对称加密,因为公钥加密与对称加密的密文形式是一致的。


    对于LWE类型的密文来说,
    首先有一些公开参数:明文模数 t t t,密文模数 q q q,向量维度 n n n
    取私钥为 s ∈ Z q n \\mathbfs \\in \\Z_q^n sZqn,对于明文 m ∈ Z t m\\in \\Z_t mZt
    选取 a ∈ Z q n \\mathbfa\\in \\Z_q^n aZqn b = ⟨ a , s ⟩ + m + t e   m o d   q b=\\langle \\mathbfa,\\mathbfs\\rangle + m +te \\bmod q b=a,s+m+temodq e e e是从高斯分布中选取的整数。
    令密文 c = ( b , a ) c=(b,\\mathbfa) c=(b,a)
    则解密为
    先计算 μ = b − ⟨ a , s ⟩ = m + t e   m o d   q \\mu = b- \\langle \\mathbfa,\\mathbfs \\rangle = m+te \\bmod q μ=ba,s=m+temodq。然后计算 m = [ μ ] t = m m=[\\mu]_t=m m=[μ]t=m

    这里的 ⟨ ⋅ ⟩ \\langle \\cdot \\rangle 为内积操作,对于 a = ( a 0 , . . . , a n − 1 ) , s = ( s 0 , . . . , s n − 1 ) \\mathbfa=(a_0,...,a_n-1),\\mathbfs=(s_0,...,s_n-1) a=(a0,...,an1),s=(s0,...,sn1)来说, ⟨ a , s ⟩ = a 0 s 0 + a 1 s 1 + ⋯ + a n − 1 s n − 1 ∈ Z \\langle \\mathbfa,\\mathbfs\\rangle=a_0s_0+a_1s_1+\\cdots+a_n-1s_n-1\\in\\Z a,s=a0s0+a1s1++an1sn1Z
    [ μ ] t [\\mu]_t [μ]t其实等价于 μ   m o d   t \\mu \\bmod t μmodt


    对于RLWE类型的密文来说,
    公开参数为:明文模数 t t t,多项式空间 R = Z [ X ] / X n + 1 \\mathcalR=\\Z[X]/X^n+1 R=Z[X]/Xn+1,以及系数模 q q q的多项式空间 R q = Z q [ X ] / X n + 1 \\mathcalR_q=\\Z_q[X]/X^n+1 Rq=Zq[X]/Xn+1
    取私钥为 s ∈ R q s\\in \\mathcalR_q sRq,对于明文 m ∈ R t m\\in R_t mRt
    选取 a ∈ R q , b = a s + m + t e ∈ R q a\\in \\mathcalR_q,b=as+m+te \\in \\mathcalR_q aRq,b=as+m+teRq e e e是一个系数满足高斯分布的多项式。
    令密文为 c = ( b , a ) c=(b,a) c=(b,a)
    则解密为
    先计算 μ = b − a s = m + t e ∈ R q \\mu = b-as=m+te\\in \\mathcalR_q μ=bas=m+teRq,然后计算 m = [ μ ] t ∈ R t m=[\\mu]_t\\in\\mathcalR_t m=[μ]tRt


    这里可以看到RLWE类型的密文相对于LWE类型的密文来说的一个优势在于,一个LWE的密文的长度是 n + 1 n+1 n+1,对应的明文是 Z t \\Z_t Zt内的,相当于有效信息只有1个,利用率为 1 n + 1 \\frac1n+1 n+11;而RLWE的密文长度是 2 n 2n 2n,对应的明文是 R t \\mathcalR_t Rt内的,有效信息最多有 n n n个,利用率为 1 2 \\frac12 21。如果使用SIMD的技术的话,可以将这 n n n位都有效的利用起来。

    关于SIMD的技术,SV的文章我还没有看,但现在BGV和BFV类型的SIMD应该都用的是INTT来做encoding的吧,可以参考一下CKKS的Encoding。思想是类似的。

    噪声

    注意到在解密过程中,是先得到了 m + t e   m o d   q m+te \\bmod q m+temodq,然后再模 t t t得到 m m m的。这里一个很重要的条件就是 ( m + t e ) < q (m+te)<q (m+te)<q,BGV将 φ s ( c ) = b − a s = m + t e \\varphi_s(c)=b-as=m+te φs(c)=bas=m+t云安全与同态加密_调研分析同态加密技术及其应用分析——By Me

    密码算法(SM1SM2SM3SM4同态加密密态计算隐私计算和安全多方计算)

    云安全与同态加密_调研分析云计算安全领域主要研究成果——By Me

    经典同态加密算法Paillier解读 - 原理实现和应用

    云安全与同态加密_调研分析安全技术在云计算中的安全应用分析——By Me

    京东云开发者|经典同态加密算法Paillier解读 - 原理实现和应用