BGV方案简介(同态加密)

Posted AdijeShen

tags:

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

文章目录

前言

之前看了好多资料,发现对于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+tpython简单LWE 加解密方案实现,支持密文同态加法以及常数乘法

同态加密:CKKS方案简介及一个python实现:TENSEAL(不定期更新)

同态加密简介

基于近似计算的同态加密方案CKKS17实现库介绍

同态加密详解

同态加密详解