前言

借鉴致远的文章学习同态加密,本文主要记录同态加密中Flatten操作,参考文献为 Craig Gentry,Amit Sahai,Brent Waters 的《Homomorphic Encryption from Learning with Errors: Conceptually-Simpler, Asymptotically-Faster, Attribute-Based》。这篇文章主要实现了理论上的创新,在实际应用中仍存在效率瓶颈。下面介绍全同态加密的历史发展流程以及本文的针对性问题:

😄 针对性问题 方法设计
现有方法 同态乘法中的张量积运算使得密钥维度指数级增长 BV11:利用重线性化操作,将同态乘法后的长密钥切换为短密钥
本文方法 BV11 使用重线性化矩阵更新密文的时候,带来了 Ω ( n 3 ) \Omega(n^3) Ω(n3) 级别的计算开销 GSW将密文表示为矩阵,矩阵与矩阵的乘积不会导致密文维度的增长,所以不需要使用密钥交换来约减密文的维数,进而可用于构建基于身份或属性的加密方案。

基于身份的加密(Identity-based encryption,IBE):用户用其身份(如邮箱地址)作为公钥,而无需获取具体的公钥进行加密。
基于属性的加密(Attribute-based encryption,ABE):解密能力由属性决定,只有满足特定策略的用户才能解密。



一、预备知识

    流程     IBFHE方案 ABFHE方案
参数设置 生成“主”(master)公私钥。 生成主公私钥。
密钥生成 根据主私钥和用户身份 I D ID ID ,生成该用户的解密私钥 s k I D sk_{ID} skID 根据主私钥和一个属性(或策略) y y y,生成私钥 s k y sk_y sky
加密算法 使用主公钥和身份 I D ID ID,加密消息 m m m,得到密文 c c c 使用主公钥和一个索引 x x x,加密消息 m m m
解密算法 使用用户私钥 s k I D sk_{ID} skID 解密针对其身份 I D ID ID 的密文 c c c 如果属性 y y y 满足与索引 x x x 的关系 R ( x , y ) = 1 R(x, y) = 1 R(x,y)=1,那么可以使用私钥 s k y sk_y sky 解密密文。
同态计算 输入主公钥、一个身份 I D ID ID、一个函数 f f f,以及一系列在同一身份 I D ID ID 下加密的密文。输出一个新的密文 c ′ c' c,该密文仍然是在同一身份 I D ID ID 下对 f f f (明文)的加密。特别的,评估算法不应该要求除了主公钥和身份 I D ID ID 之外的任何其他用户特定信息,例如评估密钥。 输入主公钥、一个公共索引 x x x、一个函数 f f f,以及一系列在同一索引 x x x 下加密的密文。输出一个新的密文 c ′ c' c,该密文仍然在同一索引 x x x 下加密了 f f f (明文)。特别的,如果某个用户拥有私钥 s k y sk_y sky,并且 R ( x , y ) = 1 R(x, y)=1 R(x,y)=1(即他有权解密原始密文),那么同样能够解密同态计算后产生的新密文 c ′ c' c,并得到正确的结果 f f f (明文)。此外,Eval不应需要任何评估密钥。

二、核心思想

1. 现有方案

下面简单描述现有方案(非正式的):

流程 细节
参数设置 q q q :模数
N N N :密文维度
密钥生成 v ⃗ ∈ Z q N \vec{v}\in \Z_q^{N} v ZqN :私钥,至少有一个分量很大
加密算法 明文 μ \mu μ 被加密为密文 C ∈ Z q N × N C \in \Z_q^{N\times N} CZqN×N ,且满足 C ⋅ v ⃗ = μ ⋅ v ⃗ + e ⃗ C\cdot\vec{v}=\mu\cdot\vec{v}+\vec{e} Cv =μv +e 其中, e ⃗ ∈ Z q N \vec{e}\in \Z_q^{N} e ZqN 为小噪声,密文 C C C 中每个分量都小于 q q q
解密算法 首先选择 C C C 的任意一行 C i C_i Ci ,计算 x = < C i , v ⃗ > = μ ⋅ v i + e i x = \left<C_i, \vec{v} \right>=\mu \cdot v_i+e_i x=Ci,v =μvi+ei ,则解密结果为 μ = ⌊ x / v i ⌉ \mu= \lfloor x/v_i\rceil μ=x/vi
同态加法 对于密文 C 1 C_1 C1 C 2 C_2 C2 C + = C 1 + C 2 C^{+} = C_1 + C_2 C+=C1+C2 ,其中加法密文满足 C + ⋅ v ⃗ = ( μ 1 + μ 2 ) ⋅ v ⃗ + ( e ⃗ 1 + e ⃗ 2 ) C^{+}\cdot\vec{v}=(\mu_1+\mu_2)\cdot\vec{v}+(\vec{e}_1+\vec{e}_2) C+v =(μ1+μ2)v +(e 1+e 2)
同态乘法 对于密文 C 1 C_1 C1 C 2 C_2 C2 C × = C 1 ⋅ C 2 C^{\times} = C_1 \cdot C_2 C×=C1C2 ,其中加法密文满足 C × ⋅ v ⃗ = ( C 1 ⋅ C 2 ) ⋅ v ⃗ = C 1 ⋅ ( μ 2 ⋅ v ⃗ + e ⃗ 2 ) = μ 2 ⋅ ( C 1 ⋅ v ⃗ ) + C 1 ⋅ e ⃗ 2 = μ 2 ⋅ ( μ 1 ⋅ v ⃗ + e ⃗ 1 ) + C 1 ⋅ e ⃗ 2 = ( μ 2 ⋅ μ 1 ) ⋅ v ⃗ + ( μ 2 ⋅ e ⃗ 1 + C 1 ⋅ e ⃗ 2 ) \begin{aligned}C^{\times}\cdot\vec{v} &=(C_1 \cdot C_2)\cdot\vec{v} \\ &= C_1 \cdot (\mu_2\cdot\vec{v}+\vec{e}_2) \\ &= \mu_2\cdot (C_1 \cdot \vec{v})+C_1 \cdot \vec{e}_2 \\ &= \mu_2\cdot (\mu_1\cdot\vec{v}+\vec{e}_1)+C_1 \cdot \vec{e}_2 \\ &= (\mu_2\cdot \mu_1)\cdot\vec{v}+(\mu_2\cdot \vec{e}_1+C_1 \cdot \vec{e}_2) \end{aligned} C×v =(C1C2)v =C1(μ2v +e 2)=μ2(C1v )+C1e 2=μ2(μ1v +e 1)+C1e 2=(μ2μ1)v +(μ2e 1+C1e 2) C × ⋅ v ⃗ = ( μ 2 ⋅ μ 1 ) ⋅ v ⃗ + ( μ 2 ⋅ e ⃗ 1 + C 1 ⋅ e ⃗ 2 ) C^{\times}\cdot\vec{v} =(\mu_2\cdot \mu_1)\cdot\vec{v}+(\mu_2\cdot \vec{e}_1+C_1 \cdot \vec{e}_2) C×v =(μ2μ1)v +(μ2e 1+C1e 2)

2. 针对性问题

  • 线性代数中的特征向量
    在线性代数中,对于一个方阵 A A A ,若存在一个非零向量 v ⃗ \vec{v} v 和 一个标量 λ \lambda λ ,满足
    A ⋅ v ⃗ = λ ⋅ v ⃗ A\cdot \vec{v}=\lambda \cdot \vec{v} Av =λv 则称 v ⃗ \vec{v} v 为矩阵 A A A 的一个特征向量 v ⃗ \vec{v} v 为矩阵 A A A 的一个特征值
  • 无噪声方案的特征向量
    类似的,如果基础方案中不添加噪声,即
    C ⋅ v ⃗ = μ ⋅ v ⃗ C\cdot\vec{v}=\mu\cdot\vec{v} Cv =μv 则密钥 v ⃗ \vec{v} v 可以看作密文 C C C 的特征向量,而明文 μ \mu μ 为特征值。同态加法后,密文 C + C^+ C+ 的特征向量为密钥 v ⃗ \vec{v} v ,特征值为明文 μ 1 + μ 2 \mu_1+\mu_2 μ1+μ2 ;同态乘法后,密文 C × C^\times C× 的特征向量为密钥 v ⃗ \vec{v} v ,特征值为明文 μ 1 ⋅ μ 2 \mu_1\cdot\mu_2 μ1μ2
  • 有噪声方案的特征向量
    然而,为了安全性,基础方案中添加了噪声,此时
    C ⋅ v ⃗ = μ ⋅ v ⃗ + e ⃗ C\cdot\vec{v}=\mu\cdot\vec{v}+\vec{e} Cv =μv +e 密钥 v ⃗ \vec{v} v 为密文 C C C近似特征向量,并非准确的。这就导致同态计算中会引入额外的误差项,需要控制其大小。

3. 观察

密文有界:若密文 C C C B B B-bound 的,则要求明文 ∣ μ ∣ ≤ B |\mu| \leq B μB,密文每一项 ∣ C i , j ∣ ≤ B |C_{i,j}| \leq B Ci,jB,并且噪声每一维 ∣ e ⃗ ∣ ≤ B |\vec{e}|\leq B e B
密文强有界:若密文 C C C B B B-strongly-bound 的,则要求明文 ∣ μ ∣ ≤ 1 |\mu| \leq 1 μ1(即 μ ∈ { 0 , 1 } \mu\in\{0,1\} μ{0,1}),密文每一项 ∣ C i , j ∣ ≤ 1 |C_{i,j}| \leq 1 Ci,j1,并且噪声每一维 ∣ e ⃗ ∣ ≤ B |\vec{e}|\leq B e B

当噪声项接近模数 q q q 时,解密失败。下面我们计算在解密失败前可以计算的乘法次数:

  • 多项式计算中的噪声增长
    假设噪声 e ⃗ \vec{e} e 和两个密文 C 1 C_1 C1 C 2 C_2 C2 都是 B B B-bound 的,则同态加法后的误差 e ⃗ 1 + e ⃗ 2 ≤ 2 B \vec{e}_1+\vec{e}_2 \leq2B e 1+e 22B ,同态乘法后的误差 μ 2 ⋅ e ⃗ 1 + C 1 ⋅ e ⃗ 2 ≤ ( 1 + N ) ⋅ B 2 \mu_2\cdot \vec{e}_1+C_1 \cdot \vec{e}_2 \leq (1+N)\cdot B^2 μ2e 1+C1e 2(1+N)B2 。因此,评估 d d d 阶多项式后,密文的噪声量为 O ( ( N B ) d ) O((NB)^d) O((NB)d) 。为保证解密的正确性,要求 ( N B ) d < q (NB)^d <q (NB)d<q ,即 d < log ⁡ N B q d<\log_{NB} q d<logNBq同时,出于安全性要求, q / B q/B q/B 必须关于 N N N 的次指数级别,因此 d d d 只可取对数或多项式级别,无法实现全同态。
  • 与非门电路的噪声增长
    假设噪声 e ⃗ \vec{e} e 和两个密文 C 1 C_1 C1 C 2 C_2 C2 都是 B B B-strongly-bound 的,则经过与非门(NAND)后密文为 C 3 = I N − C 1 ⋅ C 2 C_3=I_N-C_1\cdot C_2 C3=INC1C2 ,其中 I N I_N IN N N N 维全1向量。对 C 3 C_3 C3 解密有:
    C 3 ⋅ v ⃗ = ( I N − C 1 ⋅ C 2 ) ⋅ v ⃗ = v ⃗ − C 1 ⋅ C 2 ⋅ v ⃗ = v ⃗ − ( μ 2 ⋅ μ 1 ) ⋅ v ⃗ − ( μ 2 ⋅ e ⃗ 1 + C 1 ⋅ e ⃗ 2 ) = ( 1 − μ 2 ⋅ μ 1 ) ⋅ v ⃗ − ( μ 2 ⋅ e ⃗ 1 + C 1 ⋅ e ⃗ 2 ) \begin{aligned} C_3\cdot \vec{v} &= (I_N-C_1\cdot C_2)\cdot \vec{v} \\ &= \vec{v}-C_1\cdot C_2\cdot \vec{v} \\ &= \vec{v}-(\mu_2\cdot \mu_1)\cdot\vec{v}-(\mu_2\cdot \vec{e}_1+C_1 \cdot \vec{e}_2) \\ &= (1-\mu_2\cdot \mu_1)\cdot\vec{v}-(\mu_2\cdot \vec{e}_1+C_1 \cdot \vec{e}_2) \\ \end{aligned} C3v =(INC1C2)v =v C1C2v =v (μ2μ1)v (μ2e 1+C1e 2)=(1μ2μ1)v (μ2e 1+C1e 2) 此时噪声上界为 ∣ μ 2 ⋅ e ⃗ 1 + C 1 ⋅ e ⃗ 2 ∣ ≤ ∣ μ 2 ⋅ e ⃗ 1 ∣ + ∣ C 1 ⋅ e ⃗ 2 ∣ ≤ ( N + 1 ) ⋅ B |\mu_2\cdot \vec{e}_1+C_1 \cdot \vec{e}_2|\leq |\mu_2\cdot \vec{e}_1|+|C_1 \cdot \vec{e}_2|\leq(N+1)\cdot B μ2e 1+C1e 2μ2e 1+C1e 2(N+1)B 。若能保证密文 C 3 C_3 C3 B B B-strongly-bound 的,经过 L L L 层运算后,噪声上界为 O ( ( N + 1 ) L ⋅ B ) O((N+1)^L\cdot B) O((N+1)LB) 。为保证解密的正确性,要求 ( N + 1 ) L ⋅ B < q (N+1)^L\cdot B <q (N+1)LB<q ,即 L < log ⁡ q / B l o g N L<\frac{\log q/B}{log N} L<logNlogq/B同时,出于安全性要求, q / B q/B q/B 必须关于 N N N 的次指数级别,因此 L L L 可取多项式级别

综上,在与非门电路下,我们可以评估一个多项式深度 L L L 的电路,而不仅仅是多项式阶数 d d d

电路深度(depth):从输入到输出的最长路径上,加法、乘法、置换等操作的总次数。
乘法阶数(degree):从输入到输出的最长路径上,连续乘法操作的次数。

4. 核心设计:Flatten 操作

为了保证与非门的输出也是 B B B-strongly-bound 的,文章设计了 Flatten 操作。下面介绍 Flatten 操作所涉及的组件:

组件 细节
BitDecomp \text{BitDecomp} BitDecomp 对于 k k k 维向量 a ⃗ ∈ Z q k \vec{a}\in \Z^k_q a Zqk ,将其解码为 N = k ⋅ l N=k\cdot l N=kl 维二进制向量 BitDecomp ( a ⃗ ) = ( a 1 , 0 , ⋯   , a 1 , l − 1 , ⋯   , a k , 0 , ⋯   , a k , l − 1 ) \text{BitDecomp}(\vec{a})=(a_{1,0},\cdots,a_{1,l-1},\cdots,a_{k,0},\cdots,a_{k,l-1}) BitDecomp(a )=(a1,0,,a1,l1,,ak,0,,ak,l1),其中 l = ⌊ log ⁡ 2 q ⌋ + 1 l=\lfloor\log_2 q\rfloor + 1 l=log2q+1 a i , j a_{i,j} ai,j 满足 a i = ∑ j = 0 l − 1 2 j ⋅ a i , j a_i=\sum_{j=0}^{l-1} 2^j\cdot a_{i,j} ai=j=0l12jai,j拼接向量 a ⃗ \vec{a} a 中每一维 a i a_i ai 的二进制编码
BitDecomp − 1 \text{BitDecomp}^{-1} BitDecomp1 BitDecomp \text{BitDecomp} BitDecomp 的逆运算,对于 N N N 维向量 a ⃗ ′ ∈ Z q N \vec{a}'\in \Z^N_q a ZqN ,重新聚合为 k k k 维向量 BitDecomp − 1 ( a ⃗ ′ ) = ( ∑ j 2 j ⋅ a 1 , j , ⋯   , ∑ j 2 j ⋅ a k , j ) \text{BitDecomp}^{-1}(\vec{a}')=(\sum_j 2^j\cdot a_{1,j},\cdots,\sum_j 2^j\cdot a_{k,j}) BitDecomp1(a )=(j2ja1,j,,j2jak,j) a ⃗ ′ \vec{a}' a 中每 l l l 维元素为一组,以2的幂次为权重聚合。值得注意的是, a ⃗ ′ \vec{a}' a 中的元素不一定只是0和1,而是在模 q q q 群下的。
Flatten \text{Flatten} Flatten 对于 N N N 维向量 a ⃗ ′ ∈ Z q N \vec{a}'\in \Z^N_q a ZqN Flatten ( a ⃗ ′ ) = BitDecomp ( BitDecomp − 1 ( a ⃗ ′ ) ) \text{Flatten}(\vec{a}')=\text{BitDecomp}(\text{BitDecomp}^{-1}(\vec{a}')) Flatten(a )=BitDecomp(BitDecomp1(a )) 对于 N × N N\times N N×N 维矩阵 A ∈ Z q N × N A\in \Z^{N\times N}_q AZqN×N Flatten ( A ) = [ BitDecomp ( BitDecomp − 1 ( A [ i ] ) ) ] i ∈ [ N ] \text{Flatten}(A)=[\text{BitDecomp}(\text{BitDecomp}^{-1}(A[i]))]_{i\in[N]} Flatten(A)=[BitDecomp(BitDecomp1(A[i]))]i[N] 即对矩阵的每一行进行 Flatten \text{Flatten} Flatten 操作。注意, Flatten \text{Flatten} Flatten 操作后的向量为0-1串,使得张量的范数很小
Powersof2 \text{Powersof2} Powersof2 对于 k k k 维向量 b ⃗ ∈ Z q k \vec{b}\in \Z^k_q b Zqk ,将其转为 N N N 维向量 Powersof2 ( b ⃗ ) = ( b 1 , 2 b 1 , ⋯   , 2 l − 1 b 1 , ⋯   , b k , 2 b k , ⋯   , 2 l − 1 b k ) \text{Powersof2}(\vec{b})=(b_1,2b_1,\cdots,2^{l-1}b_1,\cdots,b_k,2b_k,\cdots,2^{l-1}b_k) Powersof2(b )=(b1,2b1,,2l1b1,,bk,2bk,,2l1bk)对于 b ⃗ \vec{b} b 中每一维元素,分别乘以2的阶梯幂次

对于 a ⃗ ′ ∈ Z q N , a ⃗ , b ⃗ ∈ Z q k \vec{a}'\in \Z^N_q,\vec{a},\vec{b}\in \Z^k_q a ZqN,a ,b Zqk ,存在以下关系:

  • BitDecomp − 1 ( BitDecomp ( a ⃗ ) ) = a ⃗ \text{BitDecomp}^{-1}(\text{BitDecomp}(\vec{a})) = \vec{a} BitDecomp1(BitDecomp(a ))=a
  • < BitDecomp ( a ⃗ ) , Powersof2 ( b ⃗ ) > = < a ⃗ , b ⃗ > \left<\text{BitDecomp}(\vec{a}), \text{Powersof2}(\vec{b})\right> = \left<\vec{a},\vec{b}\right> BitDecomp(a ),Powersof2(b )=a ,b
  • < a ⃗ ′ , Powersof2 ( b ⃗ ) > = < BitDecomp − 1 ( a ⃗ ′ ) , b ⃗ > = < Flatten ( a ⃗ ′ ) , Powersof2 ( b ⃗ ) > \left<\vec{a}', \text{Powersof2}(\vec{b})\right> = \left<\text{BitDecomp}^{-1}(\vec{a}'), \vec{b}\right> = \left<\text{Flatten}(\vec{a}'), \text{Powersof2}(\vec{b})\right> a ,Powersof2(b )=BitDecomp1(a ),b =Flatten(a ),Powersof2(b )

下面证明第三点:
< a ⃗ ′ , Powersof2 ( b ⃗ ) > = ∑ i = 1 k ∑ j = 0 l − 1 a i , j ⋅ ( 2 j ⋅ b i ) = ∑ i = 1 k b i ∑ j = 0 l − 1 ( 2 j ⋅ a i , j ) = < BitDecomp − 1 ( a ⃗ ′ ) , b ⃗ > \begin{aligned} \left<\vec{a}', \text{Powersof2}(\vec{b})\right> &= \sum_{i=1}^k \sum_{j=0}^{l-1} a_{i,j}\cdot(2^j\cdot b_i) \\ &= \sum_{i=1}^k b_i\sum_{j=0}^{l-1}(2^j\cdot a_{i,j}) \\ &=\left<\text{BitDecomp}^{-1}(\vec{a}'), \vec{b}\right> \end{aligned} a ,Powersof2(b )=i=1kj=0l1ai,j(2jbi)=i=1kbij=0l1(2jai,j)=BitDecomp1(a ),b 同时
< Flatten ( a ⃗ ′ ) , Powersof2 ( b ⃗ ) > = < BitDecomp ( BitDecomp − 1 ( a ⃗ ) ) , Powersof2 ( b ⃗ ) > = < BitDecomp − 1 ( a ⃗ ) , b ⃗ > \begin{aligned} \left<\text{Flatten}(\vec{a}'), \text{Powersof2}(\vec{b})\right> &= \left<\text{BitDecomp}(\text{BitDecomp}^{-1}(\vec{a})) , \text{Powersof2}(\vec{b})\right> \\ &= \left<\text{BitDecomp}^{-1}(\vec{a}), \vec{b}\right> \\ \end{aligned} Flatten(a ),Powersof2(b )=BitDecomp(BitDecomp1(a )),Powersof2(b )=BitDecomp1(a ),b


三、核心方案

1. 方案描述

流程 细节
参数设置 安全参数: λ \lambda λ
电路深度: L L L
比特数: κ = κ ( λ , L ) \kappa=\kappa(\lambda,L) κ=κ(λ,L)
模数: q q q ,有 κ \kappa κ 比特
误差分布: χ = χ ( λ , L ) \chi=\chi(\lambda,L) χ=χ(λ,L)
维度参数:设置 n = n ( λ , L ) n=n(\lambda,L) n=n(λ,L) m = m ( λ , L ) = O ( n log ⁡ q ) m=m(\lambda,L)=O(n \log q) m=m(λ,L)=O(nlogq) ,令 l = ⌊ log ⁡ q ⌋ + 1 \mathcal{l}=\lfloor \log q\rfloor+1 l=logq+1 N = ( n + 1 ) ⋅ l N=(n+1)\cdot \mathcal{l} N=(n+1)l
密钥生成 私钥:随机采样 t ⃗ ∈ Z q n \vec{t}\in \Z_q^n t Zqn,令 s ⃗ = ( 1 , − t ⃗ ) = ( 1 , − t 1 , ⋯   , − t n ) ∈ Z q n + 1 \vec{s} =(1,-\vec{t})=(1,-t_1,\cdots,-t_n)\in \Z_q^{n+1} s =(1,t )=(1,t1,,tn)Zqn+1 ,则私钥为 v ⃗ = Powersof2 ( s ⃗ ) = Powersof2 ( ( 1 , − t ⃗ ) ) \vec{v}=\text{Powersof2}(\vec{s}) = \text{Powersof2}((1,-\vec{t})) v =Powersof2(s )=Powersof2((1,t )) 其前 l l l 维是 [ 1 , 2 , ⋯   , 2 l − 1 ] [1,2,\cdots,2^{l-1}] [1,2,,2l1]
公钥:随机采样矩阵 B ∈ Z q m × n B\in \Z_q^{m\times n} BZqm×n 和向量 e ⃗ ∈ χ m \vec{e} \in \chi^m e χm ,令 b ⃗ = B ⋅ t ⃗ + e ⃗ \vec{b} = B\cdot \vec{t} +\vec{e} b =Bt +e A = [ b ⃗ ∣ B ] ∈ Z q m × ( n + 1 ) A=[\vec{b}|B]\in \Z_q^{m\times (n+1)} A=[b B]Zqm×(n+1),这里可以观察到 A ⋅ s ⃗ = e ⃗ A\cdot \vec{s}=\vec{e} As =e
加密算法 对于明文 μ ∈ Z q \mu\in \Z_q μZq ,随机采样矩阵 R ∈ { 0 , 1 } M × m R\in \{0,1\}^{M\times m} R{0,1}M×m ,则密文为 C = Flatten ( μ ⋅ I N + BitDecomp ( R ⋅ A ) ) ∈ Z q N × N C = \text{Flatten}(\mu\cdot I_N+\text{BitDecomp}(R\cdot A))\in \Z_q^{N\times N} C=Flatten(μIN+BitDecomp(RA))ZqN×N
解密算法 v i = 2 i ∈ ( q / 4 , q / 2 ] v_i=2^i\in (q/4,q/2] vi=2i(q/4,q/2] C i C_i Ci 为密文 C C C 的第 i i i 行,则解密有 μ ′ = ⌊ < C i , v ⃗ > v i ⌉ \mu'=\lfloor \frac{\left< C_i,\vec{v}\right>}{v_i} \rceil μ=viCi,v
同态广播 密文矩阵 C ∈ Z q N × N C \in \Z_q^{N\times N} CZqN×N 与已知常量 α \alpha α 相乘,令 M α = Flatten ( α ⋅ I N ) M_\alpha=\text{Flatten}(\alpha\cdot I_N) Mα=Flatten(αIN) ,则广播运算如下 MultConst ( C , α ) = Flatten ( M α ⋅ C ) \text{MultConst}(C,\alpha)=\text{Flatten}(M_\alpha\cdot C) MultConst(C,α)=Flatten(MαC)
同态加法 对于密文 C 1 , C 2 ∈ Z q N × N C_1,C_2 \in \Z_q^{N\times N} C1,C2ZqN×N ,同态加法如下 Add ( C 1 , C 2 ) = Flatten ( C 1 + C 2 ) \text{Add}(C_1,C_2)=\text{Flatten}(C_1+C_2) Add(C1,C2)=Flatten(C1+C2)
同态乘法 对于密文 C 1 , C 2 ∈ Z q N × N C_1,C_2 \in \Z_q^{N\times N} C1,C2ZqN×N ,同态乘法如下 Mult ( C 1 , C 2 ) = Flatten ( C 1 ⋅ C 2 ) \text{Mult}(C_1,C_2)=\text{Flatten}(C_1\cdot C_2) Mult(C1,C2)=Flatten(C1C2)
同态与非 对于密文 C 1 , C 2 ∈ Z q N × N C_1,C_2 \in \Z_q^{N\times N} C1,C2ZqN×N ,同态与非门计算如下 NAND ( C 1 , C 2 ) = Flatten ( I N − C 1 ⋅ C 2 ) \text{NAND}(C_1,C_2)=\text{Flatten}(I_N-C_1\cdot C_2) NAND(C1,C2)=Flatten(INC1C2) 特别的,进行同态与非的明文只能是 0 或 1。

2. 噪声分析

2.1. 解密算法的噪声上界

< C , v ⃗ > = < Flatten ( μ ⋅ I N ) + BitDecomp ( R ⋅ A ) ) , Powersof2 ( s ⃗ ) > = < Flatten ( μ ⋅ I N ) , Powersof2 ( s ⃗ ) > + < BitDecomp ( R ⋅ A ) ) , Powersof2 ( s ⃗ ) > = μ ⋅ v ⃗ + R ⋅ A ⋅ s ⃗ = μ ⋅ v ⃗ + R ⋅ e ⃗ \begin{aligned} \left< C,\vec{v}\right> &= \left< \text{Flatten}(\mu\cdot I_N)+\text{BitDecomp}(R\cdot A)),\text{Powersof2}(\vec{s})\right> \\ &= \left< \text{Flatten}(\mu\cdot I_N),\text{Powersof2}(\vec{s})\right> + \left<\text{BitDecomp}(R\cdot A)),\text{Powersof2}(\vec{s})\right> \\ &= \mu\cdot \vec{v} +R\cdot A\cdot\vec{s} \\ &= \mu\cdot \vec{v} +R\cdot\vec{e} \\ \end{aligned} C,v =Flatten(μIN)+BitDecomp(RA)),Powersof2(s )=Flatten(μIN),Powersof2(s )+BitDecomp(RA)),Powersof2(s )=μv +RAs =μv +Re 则对于 < C , v ⃗ > \left< C,\vec{v}\right> C,v 的每一行有 x i = μ ⋅ v i + < R i , e ⃗ > x_i = \mu\cdot v_i+\left< R_i,\vec{e}\right> xi=μvi+Ri,e ,由于 R i R_i Ri 为0-1比特串,误差项 < R i , e ⃗ > \left< R_i,\vec{e}\right> Ri,e 上界为 ∣ e ⃗ ∣ ≤ B |\vec{e}|\leq B e B。如果 B ≤ q / 8 B\leq q/8 Bq/8 v i ∈ ( q / 4 , q / 2 ] v_i\in (q/4,q/2] vi(q/4,q/2] ,则 ∣ x i / v i − μ ∣ < 1 / 2 |x_i/v_i-\mu|<1/2 xi/viμ<1/2,因此取整操作可以舍去误差。

2.2. 同态广播的噪声上界

< MultConst ( C , α ) , v ⃗ > = < Flatten ( M α ⋅ C ) , v ⃗ > = M α ⋅ C ⋅ v ⃗ = M α ⋅ ( μ ⋅ v ⃗ + R ⋅ e ⃗ ) = μ ⋅ ( M α ⋅ v ⃗ ) + M α ⋅ R ⋅ e ⃗ = μ ⋅ < Flatten ( α ⋅ I N ) , v ⃗ > + M α ⋅ R ⋅ e ⃗ = ( μ ⋅ α ) ⋅ v ⃗ + M α ⋅ R ⋅ e ⃗ \begin{aligned} \left< \text{MultConst}(C,\alpha),\vec{v}\right>&=\left< \text{Flatten}(M_\alpha\cdot C),\vec{v}\right>\\ &=M_\alpha\cdot C\cdot \vec{v}\\ &=M_\alpha\cdot ( \mu\cdot \vec{v} +R\cdot\vec{e} )\\ &=\mu\cdot (M_\alpha\cdot \vec{v}) +M_\alpha\cdot R\cdot\vec{e} \\ &=\mu\cdot \left< \text{Flatten}(\alpha\cdot I_N),\vec{v}\right> +M_\alpha\cdot R\cdot\vec{e} \\ &=(\mu\cdot \alpha)\cdot \vec{v} +M_\alpha\cdot R\cdot\vec{e} \\ \end{aligned} MultConst(C,α),v =Flatten(MαC),v =MαCv =Mα(μv +Re )=μ(Mαv )+MαRe =μFlatten(αIN),v +MαRe =(μα)v +MαRe 由于 M α M_\alpha Mα R i R_i Ri 为0-1比特串,则 ∣ M α ⋅ R ⋅ e ⃗ ∣ ≤ ∣ e ⃗ ∣ ≤ B |M_\alpha\cdot R\cdot\vec{e}| \leq |\vec{e}|\leq B MαRe e B

2.3. 同态加法的噪声上界

< Add ( C 1 , C 2 ) , v ⃗ > = < Flatten ( C 1 + C 2 ) , v ⃗ > = ( C 1 + C 2 ) ⋅ v ⃗ = C 1 ⋅ v ⃗ + C 2 ⋅ v ⃗ = ( μ 1 ⋅ v ⃗ + R 1 ⋅ e ⃗ 1 ) + ( μ 2 ⋅ v ⃗ + R 2 ⋅ e ⃗ 2 ) = ( μ 1 + μ 2 ) ⋅ v ⃗ + ( R 1 ⋅ e ⃗ 1 + R 2 ⋅ e ⃗ 2 ) \begin{aligned} \left< \text{Add}(C_1,C_2),\vec{v}\right>&=\left< \text{Flatten}(C_1+C_2),\vec{v}\right>\\ &=(C_1+C_2)\cdot \vec{v}\\ &=C_1\cdot \vec{v}+C_2 \cdot \vec{v}\\ &=(\mu_1\cdot \vec{v} +R_1\cdot\vec{e}_1)+(\mu_2\cdot \vec{v} +R_2\cdot\vec{e}_2)\\ &=(\mu_1+\mu_2)\cdot \vec{v} +(R_1\cdot\vec{e}_1 +R_2\cdot\vec{e}_2)\\ \end{aligned} Add(C1,C2),v =Flatten(C1+C2),v =(C1+C2)v =C1v +C2v =(μ1v +R1e 1)+(μ2v +R2e 2)=(μ1+μ2)v +(R1e 1+R2e 2) 由于 R 1 R_1 R1 R 2 R_2 R2 由0-1比特组成,则噪声上界为 ∣ R 1 ⋅ e ⃗ 1 + R 2 ⋅ e ⃗ 2 ∣ ≤ ∣ R 1 ⋅ e ⃗ 1 ∣ + ∣ R 2 ⋅ e ⃗ 2 ∣ ≤ ∣ e ⃗ 1 ∣ + ∣ e ⃗ 2 ∣ ≤ 2 B |R_1\cdot\vec{e}_1 +R_2\cdot\vec{e}_2| \leq |R_1\cdot\vec{e}_1| +|R_2\cdot\vec{e}_2| \leq|\vec{e}_1|+|\vec{e}_2|\leq 2B R1e 1+R2e 2R1e 1+R2e 2e 1+e 22B

2.4. 同态乘法的噪声上界

< Mult ( C 1 , C 2 ) , v ⃗ > = < Flatten ( C 1 ⋅ C 2 ) , v ⃗ > = ( C 1 ⋅ C 2 ) ⋅ v ⃗ = C 1 ⋅ ( μ 2 ⋅ v ⃗ + R 2 ⋅ e ⃗ 2 ) = μ 2 ⋅ ( C 1 ⋅ v ⃗ ) + C 1 ⋅ R 2 ⋅ e ⃗ 2 = μ 2 ⋅ ( μ 1 ⋅ v ⃗ + R 1 ⋅ e ⃗ 1 ) + C 1 ⋅ R 2 ⋅ e ⃗ 2 = ( μ 2 ⋅ μ 1 ) ⋅ v ⃗ + ( μ 2 ⋅ R 1 ⋅ e ⃗ 1 + C 1 ⋅ R 2 ⋅ e ⃗ 2 ) \begin{aligned} \left< \text{Mult}(C_1,C_2),\vec{v}\right>&=\left< \text{Flatten}(C_1\cdot C_2),\vec{v}\right>\\ &=(C_1\cdot C_2)\cdot \vec{v}\\ &=C_1\cdot(\mu_2\cdot \vec{v} +R_2\cdot\vec{e}_2)\\ &=\mu_2\cdot (C_1\cdot \vec{v}) +C_1\cdot R_2\cdot\vec{e}_2\\ &=\mu_2\cdot (\mu_1\cdot \vec{v} +R_1\cdot\vec{e}_1) +C_1\cdot R_2\cdot\vec{e}_2\\ &=(\mu_2\cdot \mu_1)\cdot \vec{v} +(\mu_2\cdot R_1\cdot\vec{e}_1 +C_1\cdot R_2\cdot\vec{e}_2)\\ \end{aligned} Mult(C1,C2),v =Flatten(C1C2),v =(C1C2)v =C1(μ2v +R2e 2)=μ2(C1v )+C1R2e 2=μ2(μ1v +R1e 1)+C1R2e 2=(μ2μ1)v +(μ2R1e 1+C1R2e 2) 由于 R 1 R_1 R1 R 2 R_2 R2 C 1 C_1 C1 由0-1比特组成,则噪声上界为 ∣ μ 2 ⋅ R 1 ⋅ e ⃗ 1 + C 1 ⋅ R 2 ⋅ e ⃗ 2 ∣ ≤ ∣ μ 2 ⋅ R 1 ⋅ e ⃗ 1 ∣ + ∣ C 1 ⋅ R 2 ⋅ e ⃗ 2 ∣ ≤ ∣ μ 2 ⋅ e ⃗ 1 ∣ + ∣ C 1 ⋅ e ⃗ 2 ∣ ≤ ( ∣ μ 2 ∣ + N ) ⋅ B |\mu_2\cdot R_1\cdot\vec{e}_1 +C_1\cdot R_2\cdot\vec{e}_2| \leq |\mu_2\cdot R_1\cdot\vec{e}_1| +|C_1\cdot R_2\cdot\vec{e}_2| \leq|\mu_2\cdot \vec{e}_1|+|C_1\cdot \vec{e}_2|\leq(|\mu_2|+N)\cdot B μ2R1e 1+C1R2e 2μ2R1e 1+C1R2e 2μ2e 1+C1e 2(μ2+N)B 。由于 e ⃗ 1 \vec{e}_1 e 1 e ⃗ 2 \vec{e}_2 e 2 均为小噪声,因此噪声上界主要受 μ 2 \mu_2 μ2 影响。

3.5. 同态与非的噪声上界

< NAND ( C 1 , C 2 ) , v ⃗ > = < Flatten ( I N − C 1 ⋅ C 2 ) , v ⃗ > = ( I N − C 1 ⋅ C 2 ) ⋅ v ⃗ = v ⃗ − C 1 ⋅ C 2 ⋅ v ⃗ = v ⃗ − ( ( μ 2 ⋅ μ 1 ) ⋅ v ⃗ + ( μ 2 ⋅ R 1 ⋅ e ⃗ 1 + C 1 ⋅ R 2 ⋅ e ⃗ 2 ) ) = ( 1 − μ 2 ⋅ μ 1 ) ⋅ v ⃗ − ( μ 2 ⋅ R 1 ⋅ e ⃗ 1 + C 1 ⋅ R 2 ⋅ e ⃗ 2 ) \begin{aligned} \left< \text{NAND}(C_1,C_2),\vec{v}\right>&=\left< \text{Flatten}(I_N-C_1\cdot C_2),\vec{v}\right>\\ &=(I_N-C_1\cdot C_2)\cdot \vec{v}\\ &=\vec{v}-C_1\cdot C_2 \cdot \vec{v}\\ &=\vec{v}- ((\mu_2\cdot \mu_1)\cdot \vec{v} +(\mu_2\cdot R_1\cdot\vec{e}_1 +C_1\cdot R_2\cdot\vec{e}_2))\\ &=(1-\mu_2\cdot \mu_1)\cdot \vec{v} -(\mu_2\cdot R_1\cdot\vec{e}_1 +C_1\cdot R_2\cdot\vec{e}_2)\\ \end{aligned} NAND(C1,C2),v =Flatten(INC1C2),v =(INC1C2)v =v C1C2v =v ((μ2μ1)v +(μ2R1e 1+C1R2e 2))=(1μ2μ1)v (μ2R1e 1+C1R2e 2) 与同态乘法不同,进行与非运算的两个明文只能是 0 或 1,即 μ 2 ∈ { 0 , 1 } \mu_2 \in \{0,1\} μ2{0,1}。因此,噪声上界为 ∣ μ 2 ⋅ R 1 ⋅ e ⃗ 1 + C 1 ⋅ R 2 ⋅ e ⃗ 2 ∣ ≤ ∣ e ⃗ 1 ∣ + ∣ C 1 ⋅ e ⃗ 2 ∣ ≤ ( 1 + N ) ⋅ B |\mu_2\cdot R_1\cdot\vec{e}_1 +C_1\cdot R_2\cdot\vec{e}_2| \leq |\vec{e}_1|+|C_1\cdot \vec{e}_2| \leq(1+N)\cdot B μ2R1e 1+C1R2e 2e 1+C1e 2(1+N)B

3. 正确性

解密成功的前提是最终误差小于 q / 8 q/8 q/8。根据噪声分析我们发现,同态乘法的噪声增长受明文大小影响。为了控制同态计算中的噪声上界,我们有两种办法:

  • 将评估函数转为布尔电路:由于与非门具有完备性,所有电路都可只用与非门构造。因此,将评估函数转为 L L L 层与非门电路后,总误差上界可控制在 ( N + 1 ) L ⋅ B (N+1)^L \cdot B (N+1)LB 。因此,解密成功的前提是 8 ⋅ ( N + 1 ) L < q / B 8\cdot(N+1)^L< q/B 8(N+1)L<q/B,即模数要随电路深度呈指数级增长。
  • 将评估函数转为算术电路:为控制噪声上界,限制明文大小 ∣ μ ∣ ≤ T |\mu|\leq T μT ,其中 B ≪ T B\ll T BT。假设在此前提下,中间密文是 T ′ T' T-bound 的,那么最终误差上界为 ( N + T ′ ) L ⋅ B (N+T')^L \cdot B (N+T)LB 。因此,解密成功的前提是 8 ⋅ ( N + T ′ ) L < q / B 8\cdot(N+T')^L< q/B 8(N+T)L<q/B

4. 安全性

  • 若将评估函数转为布尔电路:为了保证 2 λ 2 ^\lambda 2λ 的安全级别,格维度 n n n 要与 log ⁡ ( q / B ) \log(q/B) log(q/B) 成正比。其中, q / B = O ( N L ) q/B=O(N^L) q/B=O(NL) N = ( n + 1 ) ⋅ l = O ~ ( n ) N=(n+1)\cdot \mathcal{l}= \widetilde{O} (n) N=(n+1)l=O (n),所以 log ⁡ ( q / B ) = L log ⁡ ( N ) = L log ⁡ ( n ) \log(q/B) = L \log(N) = L \log(n) log(q/B)=Llog(N)=Llog(n) ,即 n = O ( L log ⁡ ( n ) ) n=O(L \log(n)) n=O(Llog(n))。在渐进分析中,这意味着格维度要随电路深度增长。
  • 若将评估函数转为算术电路 m > 2 n log ⁡ q m>2n\log q m>2nlogq ,则方案的安全性可归约于 LWE n , q , χ \text{LWE}_{n,q,\chi} LWEn,q,χ 难题。

6. 性能比较

若将评估函数转为 L L L 层与非门电路,则每个 NAND 门的平均计算开销为 O ~ ( ( n L ) ω ) \widetilde{O} ((nL)^\omega) O ((nL)ω) ,其中 ω < 2.3727 \omega < 2.3727 ω<2.3727

  • 优点:GSW方案中的密文矩阵是 0/1 矩阵,与现有方法在 Z q \Z_q Zq 上的通用矩阵乘法相比,计算更快。同时,每门的计算开销低于现有方法的 O ~ ( n 3 L ) \widetilde{O} (n^3L) O (n3L)
  • 缺点:GSW方案的渐进优势 ω < 2.3727 \omega < 2.3727 ω<2.3727 ,在问题规模 n L nL nL 非常大时才能体现出来,而在实际应用中常见的参数范围内,其巨大的常数因子和存储开销可能使其比某些更直接的方案更慢。

此外,Bootstrapping 是使同态加密方案的性能独立于 L L L 的标准方法。在GSW方案中,其解密函数本质上是深度为 O ( log ⁡ n ) O(\log n) O(logn) 的 Regev 解密,因此将 q / B q/B q/B 设置为关于 n n n 的准多项式级别即可实现自举。

准多项式级别:对于常数 c c c,关于 n n n 的准多项式级别是指 2 O ( ( log ⁡ n ) c ) 2^{O((\log n)^c)} 2O((logn)c)


四、基于身份或属性的全同态加密方案

尽管已有部分 IBE 方案支持有限的同态运算,但构建能够提供完全同态或部分同态能力的 IBE 方案仍然是一个开放
问题。同时,现有的全同态加密方案在执行同态计算时均依赖用户特定的评估密钥,而该密钥无法由用户的身份或属性直接派生。因此,这类 FHE 方案也无法自然地转化为 IBE 或 ABE 方案。相比之下,GSW方案在同态计算时无需评估密钥,只需获取基础参数设置 ( n , m , l ) (n,m,\mathcal{l}) (n,m,l) ,因此可用于构建基于身份或属性的全同态加密方案。

1. 基于身份的全同态加密方案

下面介绍如何将 IBE 方案转为 IBFHE 方案。

1.1. 转化前提

只要一个基于 LWE 的 IBE 方案满足以下三个属性,则可以转化为 IBFHE:

  • 对于身份 i d id id ,其解密密钥 s ⃗ i d ∈ Z q n ′ \vec{s}_{id}\in \Z_q^{n'} s idZqn 和密文 c ⃗ i d ∈ Z q n ′ \vec{c}_{id}\in \Z_q^{n'} c idZqn 都是 n ′ n' n 维向量,且密钥 s ⃗ i d \vec{s}_{id} s id 的第一维是1。
  • 如果密文 c ⃗ i d \vec{c}_{id} c id 加密了 i d = 0 id=0 id=0 ,则 < c ⃗ i d , s ⃗ i d > \left<\vec{c}_{id},\vec{s}_{id} \right> c id,s id 非常小。
  • 身份 i d = 0 id=0 id=0 的密文 c ⃗ i d \vec{c}_{id} c id Z q \Z_q Zq 上的随机数不可区分。

1.2. 转化方法

流程 细节
参数设置 直接使用原 IBE 方案的参数设置。
公钥生成 将原 IBE 方案的主公钥和 GSW 方案的公共参数一起作为 IBFHE 的主公钥。
加密算法 为了将消息 μ ∈ { 0 , 1 } \mu\in\{0,1\} μ{0,1} 加密后传给身份 i d id id ,首先使用原 IBE 方案的加密算法对 0 进行 N N N 次加密,以这 N N N 个密文向量为行,堆叠成一个矩阵 C i d ′ C'_{id} Cid ;然后,用 GSW 的加密算法得到密文 C i d = Flatten ( μ ⋅ I N + BitDecomp ( C i d ′ ) ) C_{id}=\text{Flatten}(\mu\cdot I_N+\text{BitDecomp}(C'_{id})) Cid=Flatten(μIN+BitDecomp(Cid))
解密算法 身份 i d id id 用原 IBE 方案的密钥生成算法获得身份的解密密钥 s ⃗ i d \vec{s}_{id} s id ,并计算私钥 v ⃗ i d = Powersof2 ( s ⃗ i d ) \vec{v}_{id}=\text{Powersof2}(\vec{s}_{id}) v id=Powersof2(s id) ,然后利用 GSW 的解密算法对密文解密。
同态计算 利用 GSW 的评估函数。

2. 基于属性的全同态加密方案

对于一个密文属性 x x x 和一个用户密钥属性 y y y 满足 R ( x , y ) = 1 R(x,y)= 1 R(x,y)=1 ,则解密过程中首先要生成一个与 x , y x,y x,y 相关的子密钥 s ⃗ x , y \vec{s}_{x,y} s x,y ,则任何拥有满足条件密钥 y y y 的用户都可以解密同态计算后的结果。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐