笔记2中说到在 LHE TFHE 中可以使用 确定型加权有穷自动机 (det-WFA) 来实现 输出最大值 、单位数加法、多位数加法 (multi-addition) 或 多位数乘法 等运算。然而,有一种在计算 多位数加法 (或其派生) 时比一般的 加权自动机 更快的技术,叫作 TBSR (Bit Sequence Representation on TRLWE ciphertexts) 。
TBSR 的主要思想是建立一个表示小整数 ( 0 到 N = 2 p N = 2^p N=2p ) 的同态方案,只用于下面三种 多位数加法 中的 基础运算:
接下来讲述这些操作如何在 TRLWE 密文上进行。
该方案中使用的小整数的计算机表示为:little endian signed binary representation (小字节序带符号的二进制表达),小字节序即 低位字节排放在内存的低地址端,高位字节排放在内存的高地址端。小端字节序对于逻辑电路更有效率,大端字节序对用户友好。(详见计算机组成原理与系统结构类书籍)
对于 j ∈ [ 0 , p = l o g 2 ( N ) ] j \in [0, p=log_2(N)] j∈[0,p=log2(N)] 和 k , l ∈ Z k, l \in \mathbb{Z} k,l∈Z ,我们令 B j , k ( l ) B_{j,k}^{(l)} Bj,k(l) 为 k + l k + l k+l 的 小字节序带符号的二进制表达 的第 j j j 位。下面给一些简单的二进制序列:
更广义地说,对于 j ∈ [ 0 , p ] j \in [0, p] j∈[0,p] 和 l ∈ Z l \in \mathbb{Z} l∈Z , B j l B_{j}^{l} Bjl 是 2 j 2^j 2j - antiperiodic 的,并且是 B j ( 0 ) B_j^{(0)} Bj(0) 左移 l l l 位的结果。 因此,只要有 2 j < N 2^j < N 2j<N 位连续的值,就足够推出所有剩余的位 (blindly) 。注意对于每个整数 k ∈ Z k \in \mathbb{Z} k∈Z , l + k l + k l+k mod 2 N 2N 2N 的 (小字节序带符号的) 二进制表达 为: B 0 , k ( l ) , B 1 , k ( l ) , . . . , B p , k ( l ) B_{0,k}^{(l)},B_{1,k}^{(l)},...,B_{p,k}^{(l)} B0,k(l),B1,k(l),...,Bp,k(l) 。现取 l = 0 , N = 8 , j ∈ [ 0 , log 2 8 = 3 ] l = 0,N = 8,j \in [0,\log_28 = 3] l=0,N=8,j∈[0,log28=3] 为示范:
现在,我们定义 B S R ( l ) = [ B 0 ( l ) , . . . , B p ( l ) ] BSR(l) = [B_{0}^{(l)},...,B_{p}^{(l)}] BSR(l)=[B0(l),...,Bp(l)] 为整数 l ∈ [ 0 , N − 1 ] l \in [0, N-1] l∈[0,N−1] 的 比特序列表示 (Bit Sequence Representation) 。
下面介绍如何 在固定位 (与 l l l 无关) 仅进行 复制 和 取反 操作 (blind computation),计算 B S R ( l + 1 ) BSR(l + 1) BSR(l+1) 和 B S R ( ⌊ l / 2 ⌋ ) BSR(\lfloor l / 2 \rfloor) BSR(⌊l/2⌋) 。随后再介绍如何在 TRLWE 密文中同态地进行这些操作。
令 U = [ u 0 , . . . , u p ] U = [u_0,...,u_p] U=[u0,...,up] 为某个未知数 l ∈ [ 0 , N − 1 ] l \in [0, N-1] l∈[0,N−1] 的 BSR。我们的目标是计算 l + 1 l + 1 l+1 的 BSR : V = [ v 0 , . . . , v p ] V = [v_0,...,v_p] V=[v0,...,vp] 。由上面的周期特性我们发现,我们只需要定义 序列 v i v_i vi 上 N N N 个连续的值就足够了 (剩下的可以用周期性推出来) 。
想进行 +1 的操作,只需将序列移位 1 个位置 : v j , k : = u j , k + 1 v_{j,k} := u_{j,k+1} vj,k:=uj,k+1 for all k ∈ [ 0 , N − 1 ] k \in [0, N-1] k∈[0,N−1] 。事实上,这个操作只是将每一位 B j , k ( l ) B_{j,k}^{(l)} Bj,k(l) 变为了 B j , k + 1 l = B j , k ( l + 1 ) B_{j,k+1}^{l}=B_{j,k}^{(l+1)} Bj,k+1l=Bj,k(l+1) ,输出就变为了 l + 1 l + 1 l+1 的 BSR : V V V 。例如,现在计算 l + 5 l + 5 l+5 ,其中 l = 0 l = 0 l=0 :
令 U = [ u 0 , . . . , u p ] U = [u_0,...,u_p] U=[u0,...,up] 为某个未知数 l ∈ [ 0 , N − 1 ] l \in [0, N-1] l∈[0,N−1] 的 BSR。我们的目标是计算 ⌊ l 2 ⌋ \lfloor \frac{l}{2} \rfloor ⌊2l⌋ 的 BSR : V = [ v 0 , . . . , v p ] V = [v_0,...,v_p] V=[v0,...,vp] 。首先,整数除 2 对应位的右移。因此,对于 j ∈ [ 0 , p − 1 ] j \in [0,p-1] j∈[0,p−1] 和 k ∈ N k \in \mathbb{N} k∈N ,我们可以设 v j , k = u j + 1 , 2 k v_{j,k} = u_{j+1,2k} vj,k=uj+1,2k 。事实上, u j + 1 , 2 k u_{j+1,2k} uj+1,2k 正是 l + 2 k l + 2k l+2k 的第 j + 1 j + 1 j+1 位,也是 ⌊ l 2 ⌋ + k \lfloor \frac{l}{2} \rfloor + k ⌊2l⌋+k 的第 j j j 位,正是我们想要的 v j , k = B j , k ⌊ l / 2 ⌋ v_{j,k} = B_{j,k}^{\lfloor l / 2 \rfloor} vj,k=Bj,k⌊l/2⌋ 。不幸的是,这些不足以让我们直接重构最后的序列,因为我们不知道 U U U 的 p + 1 p + 1 p+1 位。
然而,在这个方案中,我们可以直接来重构最后的序列。首先,对于所有的 k ∈ [ 0 , N / 2 − 1 ] k \in [0,N/2 - 1] k∈[0,N/2−1] ,都有 ⌊ l 2 ⌋ + k < N \lfloor \frac{l}{2} \rfloor + k < N ⌊2l⌋+k<N ,因此,只需设置对应的 v p , k = 0 v_{p,k} = 0 vp,k=0 即可。随后,我们注意到 ( u p , 0 , . . . , u p , N − 1 ) (u_{p,0},...,u_{p,N-1}) (up,0,...,up,N−1) 必须包含 N / 2 − l N/2 - l N/2−l 个 0 接着 ⌊ l 2 ⌋ \lfloor \frac{l}{2} \rfloor ⌊2l⌋ 个 1 。因此,我们所求的序列可以使用原序列的偶数位 ( u p , 0 , u p , 2 , . . . , u p , N − 2 ) (u_{p,0},u_{p,2},...,u_{p,N-2}) (up,0,up,2,...,up,N−2) 填充。总结 除2转换 的对应位:
{ v j , k = u j + 1 , 2 k f o r j ∈ [ 0 , p − 1 ] , k ∈ [ 0 , N − 1 ] v p , k = 0 f o r k ∈ [ 0 , N 2 − 1 ] v p , N / 2 + k = u p , 2 k f o r k ∈ [ 0 , N 2 − 1 ] \left\{ \begin{aligned} v_{j,k} & = & u_{j+1,2k} & \quad for \quad j \in [0,p-1], k \in [0,N-1] \\ v_{p,k} & = & 0 & \quad for \quad k \in [0,\frac{N}{2} -1] \\ v_{p,N/2 + k} & = & u_{p,2k} & \quad for \quad k \in [0,\frac{N}{2} -1] \end{aligned} \right. ⎩⎪⎪⎪⎪⎨⎪⎪⎪⎪⎧vj,kvp,kvp,N/2+k===uj+1,2k0up,2kforj∈[0,p−1],k∈[0,N−1]fork∈[0,2N−1]fork∈[0,2N−1]
例如,现在计算 ⌊ 5 / 2 ⌋ = 2 \lfloor 5 / 2 \rfloor = 2 ⌊5/2⌋=2 ,先按照公式填入前三行:
再按照公式填入第四行并使用周期性补全剩余代码:
现在,我们将 BSR 序列 编码到 TRLWE 密文上:现在所有的系数从 B \mathbb{B} B 变为了 环面上的元素,我们需要编码 N-periodic 或 N-antiperiodic 的序列。此外,因为 循环移位 在自增 (increment) 操作中被大量使用,我们把它关联到 乘以 X X X (类似在环面多项式中对系数所做的操作) 。
Therefore, this is our basic encoding of the BSR sequences:令未知数 l ∈ [ 0 , N / 2 ] l \in [0,N/2] l∈[0,N/2] 的 BSR 为: U = [ u 0 , . . . , u p ] U = [u_0,...,u_p] U=[u0,...,up] ,对于每个 j ∈ [ 0 , p − 1 ] j \in [0,p-1] j∈[0,p−1] 我们用多项式 μ i = ∑ k = 0 N − 1 1 2 u j , k X k \mu_i = \sum_{k=0}^{N-1} \frac{1}{2} u_{j,k}X^k μi=∑k=0N−121uj,kXk 代表 u j u_j uj ,并且使用多项式 μ p = ∑ k = 0 N − 1 ( 1 2 u p , k − 1 4 ) X k \mu_p = \sum_{k=0}^{N-1} (\frac{1}{2} u_{p,k} - \frac{1}{4})X^k μp=∑k=0N−1(21up,k−41)Xk 代表最后的 u p u_p up 。使用这种编码方式后,之前的整数除法变为一个仿射函数,将系数 ( μ j , k ) j ∈ [ 1 , p ] , k ∈ [ 0 , 2 , . . . , 2 N − 2 ] ∈ T p N (\mu_{j,k})_{j \in [1,p],k \in [0,2,...,2N-2]} \in \mathbb{T}^{pN} (μj,k)j∈[1,p],k∈[0,2,...,2N−2]∈TpN 变为如下的 ( μ 0 ′ , . . . , μ p ′ ) (\mu_0',...,\mu_p') (μ0′,...,μp′) :
π d i v 2 : { μ j , k ′ = μ j + 1 , 2 k f o r j ∈ [ 0 , p − 2 ] , k ∈ [ 0 , N − 1 ] μ p − 1 , k ′ = μ p , 2 k + 1 4 f o r k ∈ [ 0 , N − 1 ] μ p , k ′ = − 1 4 f o r k ∈ [ 0 , N 2 − 1 ] μ p , N / 2 + k ′ = μ p , 2 k f o r k ∈ [ 0 , N 2 − 1 ] \pi_{div2}:\left\{ \begin{aligned} \mu_{j,k}' & = & \mu_{j+1,2k} & \quad for \quad j \in [0,p-2], k \in [0,N-1] \\ \mu_{p-1,k}' & = & \mu_{p,2k} + \frac{1}{4} & \quad for \quad k \in [0,N -1] \\ \mu_{p,k}' & = & - \frac{1}{4} & \quad for \quad k \in [0,\frac{N}{2} -1] \\ \mu_{p,N/2 + k}' & = & \mu_{p,2k} & \quad for \quad k \in [0,\frac{N}{2} -1] \end{aligned} \right. πdiv2:⎩⎪⎪⎪⎪⎪⎪⎪⎪⎨⎪⎪⎪⎪⎪⎪⎪⎪⎧μj,k′μp−1,k′μp,k′μp,N/2+k′====μj+1,2kμp,2k+41−41μp,2kforj∈[0,p−2],k∈[0,N−1]fork∈[0,N−1]fork∈[0,2N−1]fork∈[0,2N−1]
最终,我们将未知数 l ∈ [ 0 , N − 1 ] l \in [0,N-1] l∈[0,N−1] 的 TBSR 密文 设为 C = [ c 0 , . . . , c p ] C = [c_0,...,c_p] C=[c0,...,cp] :消息 [ μ 0 , . . . , μ p ] [\mu_0,...,\mu_p] [μ0,...,μp] 的 TRLWE 密文。
TBSR 实现 多位加法 与 乘法 的算法可以参考论文:Faster packed homomorphic operations and efficient circuit bootstrapping for TFHE 中附录的 算法8 与 算法9。
以下部分内容摘自 笔记1
2009年Gentry提出了自举的最naïve的设想。整个自举过程如下:
通过这样的自举步骤,同态加密的运算便能够不断地持续地进行。
因此,为实现任意深度电路的同态评估,需要为TFHE引入自举(bootstrapping)操作。
自Gentry于2009年提出自举以来,自举从同态解密(Gentry09),到重加密,到压缩解密函数,再到密钥交换&模交换(FHEW&TFHE使用)。在Gentry09的自举是一个单独的函数,仅用于减小噪声;而在TFHE中,自举可以改变消息内容。TFHE中自举方案分为两种:门自举 (gate bootstrapping) 与 电路自举 (circuit bootstrapping) 。
两种自举在 TFHE 的三种形式的密文中有如下转换:
门自举的输入为噪声大的 TLWE 密文,输出为噪声小的 TLWE 密文。电路自举输入为噪声大的 TLWE 密文,输出为噪声小的 TRGSW 密文。接下来介绍TFHE中的自举门(gate bootstrapping)。
TFHE 的门自举常常用在 FHE 模式中,与布尔电路结合,在每通过一个门电路 前/后 便自举一次,类似如下情况:
我们现在有一个二进制的消息空间,消息只有 false( − 1 8 = 7 8 -\frac{1}{8} = \frac{7}{8} −81=87 ) 和 true ( 1 8 \frac{1}{8} 81 ) ,噪声均小于 1 16 \frac{1}{16} 161 。我们把两个消息 ( 环面上 ) 相加,有三种情况:
在这种明文的条件下,怎么进行自举呢?很简单,在这个环面上画一条线,落在线左边输出 t r u e {\color{green}true} true ,落在线右边输出 f a l s e {\color{red}false} false 。难点在于我们如何在密文下进行操作。TFHE给出了这样的答案:
最困难的部分在第2步。将环面旋转 p p p个位置有两种情况:
在 p p p已知的情况下,旋转操作为 ( X p ⋅ c ) (X^p \cdot c) (Xp⋅c)。
在 p p p未知的情况下,旋转操作为 ( T G S W ( X p ) ⊡ c ) (TGSW(X^p) \boxdot c) (TGSW(Xp)⊡c)。
那么,如何在未知s(私钥)的情况下,旋转 − φ s ( a , b ) = − b + ∑ i = 1 n a i s i -\varphi_{\color{red}s}(a,b)=-b+\sum_{i=1}^{n} {a_is_i} −φs(a,b)=−b+∑i=1naisi个位置呢?
完成这两部就能够完成这个旋转的任务。
以下为更加形象化、更加用户友好的理解:
可以将整个自举过程视为如下的操作:
TFHE 的电路自举常常用在 LHE 模式中,与 LHE 算法 (如 det-WFA, TBSR) 结合,在每通过较大的电路后再自举一次,类似如下情况:
注意到之前介绍的高效 LHE 算法 (例如 det-WFA, TBSR) 的输入和输出是不同的密文类型 (例如 输入为 TRGSW 密文,输出为 TLWE 密文) ,因此不能进行组合操作。而电路自举可以做到这件神奇的事情。电路自举的目标为:将二进制消息空间的噪声较大的 TLWE sample 变为 整型消息空间的噪声较小的 TRGSW sample 。
LHE TFHE 方案中加密的 level 可以归为如下三层:
图中的箭头表示可以进行的操作以及如何在不同的 level 之间转换;图中字幕的上划线表示 level 2 中的变量,下划线表示 level 0 中的变量,其余表示 level 1 中的变量。图中蓝色部分为电路自举的步骤。
电路自举的步骤:
Circuit Bootstrappping 算法简略总结:
目前所学 TFHE 中主要方案以及对应算法库链接如下:
压缩技术可用于 LUT 评估以及 Level 模式中。
主要参考论文:
算法库:
本文仅供个人学习使用