• BFV同态加密方案初步学习


    BFV是把Bra12的LWE版本推到了RLWE版本,Bra12也可以叫做BFV。

    经典的RLWE的公钥加密算法回顾

    对比以前的Regev的LWE公钥加密方案,其实几乎只是把明文空间换了,也就是在最大比特编码的时候把2换成t,即, Δ = ⌊ q / t ⌋ \Delta = \lfloor q/t \rfloor Δ=q/t。同时这里的 q q q是没有限制的,也就是可以使用2的幂次来简化运算。
    在这里插入图片描述

    这里可以这样看 s = ( 1 , s ) \mathbf s = (1,\mathbf s) s=(1,s), c t = ( c 0 , c 1 ) \mathbf {ct}=(\mathbf c_0,\mathbf c_1) ct=(c0,c1)
    对于正确性验证
    c 0 + c 1 ⋅ s = p 0 ⋅ u + e 1 + Δ ⋅ m + p 1 ⋅ u + e 2 = − a ⋅ s ⋅ u + e ⋅ u + e 1 + Δ ⋅ m + a ⋅ s ⋅ u + e 2 ⋅ s = Δ ⋅ m + e ⋅ u + e 1 + e 2 ⋅ s ( m o d    q )

    c0+c1s=p0u+e1+Δm+p1u+e2=asu+eu+e1+Δm+asu+e2s=Δm+eu+e1+e2s(modq)" role="presentation">c0+c1s=p0u+e1+Δm+p1u+e2=asu+eu+e1+Δm+asu+e2s=Δm+eu+e1+e2s(modq)
    c0+c1s=p0u+e1+Δm+p1u+e2=asu+eu+e1+Δm+asu+e2s=Δm+eu+e1+e2s(modq)
    可以看到这里的噪声似乎与 u \mathbf u u s \mathbf s s有关,如果将这两个取的小一点,能够一定程度上减低噪声。
    另外,将噪声用 v = e ⋅ u + e 1 + e 2 ⋅ s \mathbf v = \mathbf e \cdot \mathbf u +\mathbf e_1 + \mathbf e_2 \cdot \mathbf s v=eu+e1+e2s表示,能够得到 [ c 0 + c 1 ⋅ s ] q = Δ ⋅ m + v [\mathbf c_0+\mathbf c_1 \cdot \mathbf s ]_q =\Delta \cdot \mathbf m + \mathbf v [c0+c1s]q=Δm+v,与此同时若取样的 χ ≤ B \chi \le B χB的话,我们将得到噪声的界限,即 v ≤ 2 ⋅ B 2 ⋅ δ R + B \mathbf v \le 2\cdot B^2 \cdot \delta_R+B v2B2δR+B,其中 δ R \delta_R δR表示扩张因子
    δ R = max ⁡ { ∥ a ⋅ b ∥ ∥ a ∥ ⋅ ∥ b ∥ : a , b ∈ R } \delta_{R}=\max \left\{\frac{\|a \cdot b\|}{\|a\| \cdot\|b\|}: a, b \in R\right\} δR=max{abab:a,bR},其中的 ∣ ∣ a ∣ ∣ = m a x i ∣ a i ∣ ||a||=max_i|a_i| a=maxiai为无穷范数。

    同态方案

    方案是基于前面的LPR.ES方案的,作为优化,该方案增加了一个重线性化,将 u \mathbf u u s \mathbf s s的取值范围变为 R 2 \mathbb R_2 R2,即它们的范数为1,其他基本一致
    借用BV11里面的思想,将解密过程看作一个解密函数,即得到,
    [ c t ( x ) ] q = [ c 0 + c 1 ⋅ x ] q [\mathbf {ct}(\mathbf x)]_q=[\mathbf c_0+\mathbf c_1 \cdot \mathbf x ]_q [ct(x)]q=[c0+c1x]q
    代入密钥就能得到明文
    [ c t ( s ) ] q = Δ ⋅ m + v [\mathbf {ct}(\mathbf s)]_q= \Delta \cdot \mathbf m + \mathbf v [ct(s)]q=Δm+v

    同态乘法

    来看看核心的乘法运算
    在这里插入图片描述

    该定理表明,乘法时,噪声不是呈平方增长,而是大致上乘以了一个系数 2 ⋅ t ⋅ δ R 2 ⋅ ∣ ∣ s ∣ ∣ 2\cdot t\cdot \delta_R^2\cdot||\mathbf s|| 2tδR2s,也就是线性增长,从表达式里能看到,对噪声有显著影响的是 t t t s \mathbf s s的范数。(具体引理证明感兴趣可以去原文看看😇)

    重线性化

    然后用BV11中的函数思想,两个函数相乘得到的将是三项,成为二次函数,需要执行重线性化让它还原为两项也就是一次式。
    假设一个二阶的密文为 [ c 0 , c 1 , c 2 ] [\mathbf c_0,\mathbf c_1,\mathbf c_2] [c0,c1,c2],线性化的目的是将它变成一阶的 [ c 0 ′ , c 1 ′ ] [\mathbf c'_0,\mathbf c'_1] [c0,c1] [ c 0 + c 1 ⋅ s + c 2 ⋅ s 2 ] q = [ c 0 ′ + c 1 ′ ⋅ s + r ] q \left[\mathbf{c}_{0}+\mathbf{c}_{1} \cdot \mathbf{s}+\mathbf{c}_{2} \cdot \mathbf{s}^{2}\right]_{q}=\left[\mathbf{c}_{0}^{\prime}+\mathbf{c}_{1}^{\prime} \cdot \mathbf{s}+\mathbf{r}\right]_{q} [c0+c1s+c2s2]q=[c0+c1s+r]q,其中 r \mathbf r r很小。
    由于 s 2 \mathbf s^2 s2是不可知的,所以这里选用的方式是加密一手。
    为此,这里引入了一个重线性化密钥 r l k = ( [ − ( a 0 ⋅ s + e 0 ) + s 2 ] q , a 0 ) rlk=([-(\mathbf a_0 \cdot \mathbf s +\mathbf e_0)+\mathbf s^2]_q,\mathbf a_0) rlk=([(a0s+e0)+s2]q,a0),满足 r l k [ 0 ] + r l k [ 1 ] ⋅ s = s 2 + e 0 rlk[0]+rlk[1]\cdot \mathbf s =\mathbf s^2 +\mathbf e_0 rlk[0]+rlk[1]s=s2+e0

    方案一(T进制分解)

    第一种使用 r l k rlk rlk来转换密文的方法是令 c 0 ′ = c 0 + r l k [ 0 ] ⋅ c 2 \mathbf c'_0 = \mathbf c_0+rlk[0]\cdot\mathbf c_2 c0=c0+rlk[0]c2 c 1 ′ = c 1 + r l k [ 1 ] ⋅ c 2 \mathbf c'_1 = \mathbf c_1+rlk[1]\cdot\mathbf c_2 c1=c1+rlk[1]c2这样得到的噪声 r = e 0 ⋅ c 2 \mathbf r=\mathbf e_0 \cdot \mathbf c_2 r=e0c2(独立于密文的噪声,只是重线性化带来的噪声),但是由于 c 2 ∈ R q \mathbf c_2 \in R_q c2Rq,直接使用的话,会导致噪声被放大很多很多,所以需要进行分解。
    那么这里的方法是选择一个基(独立于 t t t),将 c 2 \mathbf c_2 c2切片。即令
    c 2 = ∑ i = 0 ℓ T i ⋅ c 2 ( i ) \mathbf c_2 = \sum_{i=0}^{\ell} T^i \cdot \mathbf c_2^{(i)} c2=i=0Tic2(i),其中 ℓ = ⌊ log ⁡ T ( q ) ⌋ \ell=\lfloor\log_T(q) \rfloor =logT(q),且 c 2 ( i ) \mathbf c_2^{(i)} c2(i)系数均在 R T R_T RT中,与此对应的设置重线性化密钥为 r l k = [ ( [ − ( a i ⋅ s + e i ) + T i ⋅ s 2 ] q , a i ) : i ∈ [ 0.. ℓ ] ] rlk=\left[\left(\left[-\left(\mathbf{a}_{i} \cdot \mathbf{s}+\mathbf{e}_{i}\right)+T^{i} \cdot \mathbf{s}^{2}\right]_{q}, \mathbf{a}_{i}\right): i \in[0 . . \ell]\right] rlk=[([(ais+ei)+Tis2]q,ai):i[0..]]
    由此得到更新后的密文为
    c 0 ′ = [ c 0 + ∑ i = 0 ℓ rlk ⁡ [ i ] [ 0 ] ⋅ c 2 ( i ) ] q  and  c 1 ′ = [ c 1 + ∑ i = 0 ℓ rlk ⁡ [ i ] [ 1 ] ⋅ c 2 ( i ) ] q \mathbf{c}_{0}^{\prime}=\left[\mathbf{c}_{0}+\sum_{i=0}^{\ell} \operatorname{rlk}[i][0] \cdot \mathbf{c}_{2}^{(i)}\right]_{q} \quad \text { and } \quad \mathbf{c}_{1}^{\prime}=\left[\mathbf{c}_{1}+\sum_{i=0}^{\ell} \operatorname{rlk}[i][1] \cdot \mathbf{c}_{2}^{(i)}\right]_{q} c0=[c0+i=0rlk[i][0]c2(i)]q and c1=[c1+i=0rlk[i][1]c2(i)]q
    最终得到的噪声将为 r = ∑ i = 0 ℓ c 2 ( i ) ⋅ e i \mathbf r = \sum_{i=0}^\ell \mathbf c_2 ^{(i)}\cdot \mathbf e_i r=i=0c2(i)ei
    这样操作的结果是 T T T越大, r l k rlk rlk越小,噪声 r \mathbf r r就越大,但是 T T T越小, r l k rlk rlk就会越大,那么计算速度就会变慢。同时由于重线性化的噪声独立于密文噪声,为了良好的同态,应该让噪声 r \mathbf r r的值在密文噪声的附近。
    动态线性化:先选取足够小的 T T T来获取足够小的误差,当几次乘法导致误差变大后,可以选择对 T 2 T^2 T2进行线性化进行加速,也就是计算包含 T 2 T^2 T2 r l k rlk rlk,由此 r l k rlk rlk中应当包含所需的所有信息。(有点懵还,原文是这么写的)

    方案二(模切换)

    先给出一个能大模数的能够容纳较大误差噪声的加密版本的 s 2 \mathbf s^2 s2,然后再进行缩放来获取所需要的。
    更新 r l k = ( − [ ( a ⋅ s + e ) + p ⋅ s 2 ] p ⋅ q , a ) rlk = (-[(\mathbf a \cdot \mathbf s + \mathbf e)+p \cdot \mathbf s^2]_{p \cdot q},\mathbf a) rlk=([(as+e)+ps2]pq,a),其中 a ∈ R p ⋅ q a \in R_{p \cdot q} aRpq e ← χ ′ \mathbf e \leftarrow \chi' eχ(和前面是不一样的分布)。同时密文也要更新为,
    c 0 ′ ′ = [ ⌊ c 2 ⋅ r l k [ 0 ] p ⌋ ] q \mathbf c_0'' = \left[\left\lfloor\frac{\mathbf{c}_{2} \cdot \mathbf{r l k}[0]}{p}\right\rfloor\right]_{q} c0=[pc2rlk[0]]q, c 1 ′ ′ = [ ⌊ c 2 ⋅ r l k [ 1 ] p ⌋ ] q \mathbf c_1''=\left[\left\lfloor\frac{\mathbf{c}_{2} \cdot \mathbf{r l k}[1]}{p}\right\rfloor\right]_{q} c1=[pc2rlk[1]]q
    简单计算能得到 c 0 ′ ′ + c 1 ′ ′ ⋅ s = c 2 ′ ′ ⋅ s 2 + r \mathbf c_0''+\mathbf c_1'' \cdot s = \mathbf c_2'' \cdot \mathbf s^2 +\mathbf r c0+c1s=c2s2+r
    粗略的估算能得到 ∥ r ∥ < q ⋅ B k ⋅ δ R p + ( δ R ⋅ ∥ s ∥ + 1 ) / 2 \|\mathbf{r}\|<\frac{q \cdot B_{k} \cdot \delta_{R}}{p}+\left(\delta_{R} \cdot\|s\|+1\right) / 2 r<pqBkδR+(δRs+1)/2
    动态线性化:选择足够大的 p p p来获取足够小的误差,多次乘法噪声增大后就可以通过提取 p ′ / p p'/p p/p,切换模数,来形成有效 r l k rlk rlk进行加速。

    同态方案

    请添加图片描述

    这里方案和前面的LPR方案很类似,不同的是, s \mathbf s s u \mathbf u u的取值范围是 R 2 R^2 R2(这是为了减小噪声),多了重线性化密钥(缩减密文规模的)。
    密文的形式是 c t = ( c 0 , c 1 ) \mathbf ct=(\mathbf c_0,\mathbf c_1) ct=(c0,c1),乘法其实就是两个密文对应项的乘,然后类似Bra12中的一样乘以一个缩放系数 t / q t/q t/q用于减小噪声
    然后是重线性化,和之前描述的一样

    请添加图片描述

    要实现乘法深度为 L L L的电路,需要满足
    4 ⋅ δ R L ⋅ ( δ R + 1.25 ) L + 1 ⋅ t L − 1 < ⌊ q / B ⌋ 4 \cdot \delta_{R}^{L} \cdot\left(\delta_{R}+1.25\right)^{L+1} \cdot t^{L-1}<\lfloor q / B\rfloor 4δRL(δR+1.25)L+1tL1<q/B

    全同态方案

    (这块儿有点迷糊,没咋看懂,后面有需要再补吧)
    采用的是Gentry的Bootstrapping方法,即在噪声达到最大值之前,进行一次同态解密,使得密文具有固定的噪声,且之后仍能进行一次乘法运算。
    同态解密的条件是解密电路的深度必须小于同态运算最大深度,由此,需要对上面方案的解密方案进行处理。
    这里采用的是不允许解密运算中的噪声 v \mathbf v v增长到界限,而是将它限制在 Δ / μ ( μ > 2 ) \Delta/\mu(\mu>2) Δ/μ(μ>2)内,可以通过将低位全部设置为0来忽略 c t [ 0 ] \mathbf ct[0] ct[0] c t [ 1 ] \mathbf ct[1] ct[1]中的大部分,从而达到优化解密的目的。
    设置后,会增加一部分误差,即,把 c t [ 0 ] \mathbf ct[0] ct[0] c t [ 1 ] \mathbf ct[1] ct[1],替换为了 c 0 = c t [ 0 ] + e 0 \mathbf c_0 =\mathbf ct[0]+\mathbf e_0 c0=ct[0]+e0 c 1 = c t [ 1 ] + e 1 \mathbf c_1 =\mathbf ct[1]+\mathbf e_1 c1=ct[1]+e1 ∣ ∣ e i ∣ ∣ < Δ / v ||\mathbf e_i||< \Delta/v ei<Δ/v)。
    这样将得到一个增加了新噪声的密文 c 0 + c 1 ⋅ s = Δ ⋅ m + v + e 0 + e 1 ⋅ s + q ⋅ r \mathbf{c}_{0}+\mathbf{c}_{1} \cdot \mathbf{s}=\Delta \cdot \mathbf{m}+\mathbf{v}+\mathbf{e}_{0}+\mathbf{e}_{1} \cdot \mathbf{s}+q \cdot \mathbf{r} c0+c1s=Δm+v+e0+e1s+qr
    为了约束新增加的噪声,这里定义了两个函数 abs ⁡ ( a ( x ) ) ∈ Z [ x ] \operatorname{abs}(a(x)) \in Z[x] abs(a(x))Z[x]为将系数绝对值化后的多项式,并定义函数
    H ( f ) = max ⁡ { ∥ ∑ i = 0 d − 1 abs ⁡ ( x i + j   m o d   f ( x ) ) ∥ ∣ j = 0 , … , d − 1 } H(f)=\max \left\{\left\|\sum_{i=0}^{d-1} \operatorname{abs}\left(x^{i+j} \bmod f(x)\right)\right\| \mid j=0, \ldots, d-1\right\} H(f)=max{i=0d1abs(xi+jmodf(x))j=0,,d1}
    对于分圆多项式如 f = x d + 1 f=x^d +1 f=xd+1,代入上面函数能得到 H ( f ) = 1 H(f)=1 H(f)=1,用 h h h代表 s \mathbf s s的汉明距离(比特中的非0个数),会得到噪声的界限是 Δ / μ + ( H ( f ) ⋅ h + 1 ) ⋅ Δ / ν \Delta / \mu+(H(f) \cdot h+1) \cdot \Delta / \nu Δ/μ+(H(f)h+1)Δ/ν,当满足条件 2 ⋅ μ ⋅ ( H ( f ) ⋅ h + 1 ) < ν ⋅ ( μ − 2 ) 2 \cdot \mu \cdot(H(f) \cdot h+1)<\nu \cdot(\mu-2) 2μ(H(f)h+1)<ν(μ2)时,密文能够正确解密。

    参考

    Fan, Junfeng and Frederik Vercauteren. “Somewhat Practical Fully Homomorphic Encryption.” IACR Cryptol. ePrint Arch. 2012 (2012): 144.
    全同态加密BFV-(section 1-基础知识)
    全同态加密BFV-(section 2-SHE)
    全同态加密:BFV

  • 相关阅读:
    高精度算法模板
    数据指标是什么?简单聊聊企业的数据指标体系
    Java项目:快递取件管理系统(java+SSM+JSP+jQuery+Mysql)
    学会使用这个平台,教你制作出色的产品画册?
    C语言:数组指针
    网络工程师---第十四天
    PLL的环路滤波器
    HTML5七夕情人节表白网页制作【花瓣图片表白】HTML+CSS+JavaScript html生日快乐祝福网页制作
    网站被劫持了怎么办
    JVM学习(四)--内存问题分析思路
  • 原文地址:https://blog.csdn.net/qq_43271194/article/details/127893949