FHE 的槽置换:Benes Network

参考文献:

  1. [SV11] Smart N P, Vercauteren F. Fully homomorphic SIMD operations[J]. Designs, codes and cryptography, 2014, 71: 57-81.
  2. [GHS12] Gentry C, Halevi S, Smart N P. Fully homomorphic encryption with polylog overhead[C]//Annual International Conference on the Theory and Applications of Cryptographic Techniques. Berlin, Heidelberg: Springer Berlin Heidelberg, 2012: 465-482.
  3. [HS13] Halevi S, Shoup V. Design and implementation of a homomorphic-encryption library[J]. IBM Research (Manuscript), 2013, 6(12-15): 8-36.
  4. [HS14] Halevi S, Shoup V. Algorithms in helib[C]//Advances in Cryptology–CRYPTO 2014: 34th Annual Cryptology Conference, Santa Barbara, CA, USA, August 17-21, 2014, Proceedings, Part I 34. Springer Berlin Heidelberg, 2014: 554-571.
  5. 多项式和有限域的Galois群 - 知乎
  6. 有限 Abel 群结构定理 - 知乎
  7. 神奇的Banyan Network - 知乎
  8. Hall 定理 & 正则二分图的完美匹配
  9. 匈牙利算法的实现原理是什么? - 知乎

SIMD & Rotate

假设 P P P 是素域,令 E E E X m − 1 X^m-1 Xm1 的在素域 P P P 上的分裂域,则 E / P E/P E/P 是代数单扩张:任意本原根 ζ m \zeta_m ζm,扩域 E = P ( ζ m ) E=P(\zeta_m) E=P(ζm),循环群 G = ( ζ m ) G=(\zeta_m) G=(ζm)

  1. 如果 c h a r ( P ) = p char(P)=p char(P)=p,那么扩张次数 [ E : Z p ] = r [E:\mathbb Z_p]=r [E:Zp]=r,它是满足 p r = 1 ( m o d m ) p^r =1 \pmod m pr=1(modm) 的最小整数,并且 ζ m \zeta_m ζm P P P 上的极小多项式为 f ( x ) = ( x − ζ m ) ( x − ζ m p ) ⋯ ( x − ζ m p r − 1 ) f(x)=(x-\zeta_m)(x-\zeta_m^p)\cdots(x-\zeta_m^{p^r-1}) f(x)=(xζm)(xζmp)(xζmpr1),这里的 ζ m p j − 1 \zeta_m^{p^j-1} ζmpj1 是本原单位根的共轭
  2. 如果 c h a r ( P ) = 0 char(P)=0 char(P)=0,那么扩张次数 [ E : Q ] = ϕ ( m ) [E:\mathbb Q]=\phi(m) [E:Q]=ϕ(m),并且 ζ m \zeta_m ζm P P P 上的极小多项式 ϕ m ( x ) = ∏ j ∈ Z m ∗ ( x − ζ m j ) \phi_m(x)=\prod_{j \in \mathbb Z_m^*}(x-\zeta_m^j) ϕm(x)=jZm(xζmj) 称为分圆多项式,它是 Q [ x ] \mathbb Q[x] Q[x] 上的不可约多项式, E = Q ( ζ m ) E=\mathbb Q(\zeta_m) E=Q(ζm) 称为分圆域

ϕ m ( x ) \phi_m(x) ϕm(x) 是分圆多项式, ζ m \zeta_m ζm 是本原单位根,分圆数域 K = Q ( ζ m ) ≅ Q [ x ] / ( ϕ m ( x ) ) K=\mathbb Q(\zeta_m) \cong \mathbb Q[x]/(\phi_m(x)) K=Q(ζm)Q[x]/(ϕm(x)),它的整数环 O K = Z [ ζ m ] ≅ Z [ x ] / ( ϕ m ( x ) ) \mathcal O_K = \mathbb Z[\zeta_m] \cong \mathbb Z[x]/(\phi_m(x)) OK=Z[ζm]Z[x]/(ϕm(x)),其中 x = ζ m x=\zeta_m x=ζm,令 N = deg ⁡ ϕ m ( x ) = ϕ ( m ) N=\deg\phi_m(x)=\phi(m) N=degϕm(x)=ϕ(m)

根据 Galois Theory, K K K 是可分多项式 x n − 1 x^n-1 xn1 的分裂域,因此 K / Q K/\mathbb Q K/QGalois 扩张,并且 G a l ( K / Q ) ≅ Z m ∗ Gal(K/\mathbb Q) \cong \mathbb Z_m^* Gal(K/Q)Zm 是阿贝尔群,于是 K / Q K/\mathbb Q K/Q阿贝尔扩张。全部的自同构都落在 Galois 群内 A u t ( K ) = G a l ( K / Q ) Aut(K) = Gal(K/\mathbb Q) Aut(K)=Gal(K/Q),形如 κ j : f ( x ) ↦ f ( x j ) , ∀ j ∈ Z m ∗ \kappa_j: f(x) \mapsto f(x^j),\forall j \in \mathbb Z_m^* κj:f(x)f(xj),jZm

对于有限域 F = G F ( p d ) F=GF(p^d) F=GF(pd),它是可分多项式 x p d − x x^{p^d}-x xpdx 的分裂域,因此 F / Z p F/\mathbb Z_p F/ZpGalois 扩张,并且 G a l ( F / Z p ) = ( κ p ) Gal(F/\mathbb Z_p)=(\kappa_p) Gal(F/Zp)=(κp) 是循环群,其中 κ p : x ↦ x p \kappa_p:x \mapsto x^p κp:xxp 是 Frobenius 映射,此时 F / Z p F/\mathbb Z_p F/Zp循环扩张

A = Z [ x ] / ( ϕ m ( x ) ) \mathbb A = \mathbb Z[x]/(\phi_m(x)) A=Z[x]/(ϕm(x)),我们令 A p \mathbb A_p Ap 是明文空间, A q \mathbb A_q Aq 是密文空间,其中 p p p较小素数(比如 32 比特素数),而 q q q很大的模数(可以是素数,也可以是一些素数乘积)。我们用 A q \mathbb A_q Aq 模拟 A \mathbb A A 的运算,对于明文 a ∈ A p a \in \mathbb A_p aAp,在编码到 A q \mathbb A_q Aq 中的 a + p e a+pe a+pe,只要运算过程中 a + p e a+pe a+pe 的规模没有越过 q q q,那么 A q \mathbb A_q Aq 确实正确地模拟了 A \mathbb A A 上的运算,从而再模掉 p p p 即可得到 A p \mathbb A_p Ap 中的计算结果。

SIMD Packing

虽然 ϕ m ( x ) \phi_m(x) ϕm(x) Z \mathbb Z Z 上不可约,但是在有限域 Z p \mathbb Z_p Zp 上是可约的: ϕ m ( x ) \phi_m(x) ϕm(x) 拥有次数 d d d 的素因子,当仅当 m ∣ p d − 1 m|p^d-1 mpd1(此时扩域 G F ( p d ) GF(p^d) GF(pd) 中包含 m m m 次本原单位根),多项式分解为 ϕ m ( x ) = ∏ i = 1 l F i ( x ) ( m o d p ) \phi_m(x)=\prod_{i=1}^{l}F_i(x) \pmod p ϕm(x)=i=1lFi(x)(modp),其中 l = N / d l=N/d l=N/d deg ⁡ F i = d , ∀ i \deg F_i=d,\forall i degFi=d,i

整环 Z [ x ] \mathbb Z[x] Z[x] 的理想 p = ( p , ϕ m ( x ) ) \mathscr p=(p,\phi_m(x)) p=(p,ϕm(x)) p i = ( p , F i ( x ) ) \mathscr p_i=(p,F_i(x)) pi=(p,Fi(x)),易知 p = ⋂ i p i \mathscr p=\bigcap_i \mathscr p_i p=ipi,根据 CRT 得到:
Z p [ x ] / ( ϕ m ( x ) ) ≅ ∏ i = 1 l Z p [ x ] / ( F i ( x ) ) \mathbb Z_p[x]/(\phi_m(x)) \cong \mathbb \prod_{i=1}^l \mathbb Z_p[x]/(F_i(x)) Zp[x]/(ϕm(x))i=1lZp[x]/(Fi(x))

由于 F i ( x ) F_i(x) Fi(x) 是不可约的,因此 L i = Z p [ x ] ( F i ( x ) ) ≅ G F ( p d ) \mathbb L_i=\mathbb Z_p[x](F_i(x)) \cong GF(p^d) Li=Zp[x](Fi(x))GF(pd) 都是同一个有限域。我们要求明文模数 p p p 足够大,使得槽的数量 l = N / d l=N/d l=N/d 足够多。

假设消息空间是子域 K n ≤ G F ( p d ) \mathbb K_n \le GF(p^d) KnGF(pd),满足 [ K n : Z p ] = n ∣ d [\mathbb K_n:\mathbb Z_p]=n|d [Kn:Zp]=nd。定义映射 ψ n , i : K n → L i \psi_{n,i}: \mathbb K_n \to \mathbb L_i ψn,i:KnLi同态嵌入(当 d = n d=n d=n 时是自同构),编码函数 ψ n : K n l → A p \psi_n:\mathbb K_n^l \to A_p ψn:KnlAp 定义为
ψ n : ( m 1 , ⋯   , m l ) ↦ ( ψ n , 1 ( m 1 ) , ⋯   , ψ n , l ( m l ) ) \psi_n: (m_1,\cdots,m_l) \mapsto (\psi_{n,1}(m_1),\cdots,\psi_{n,l}(m_l)) ψn:(m1,,ml)(ψn,1(m1),,ψn,l(ml))

简记 A p = C R T p ( A p ) \mathbb A_p=CRT_p(A_p) Ap=CRTp(Ap),其中 A p A_p Ap l l l 维向量空间,令 e ⃗ i ∈ A p \vec e_i \in A_p e iAp 是单位向量,再令 π i = C R T p ( e ⃗ i ) \pi_i=CRT_p(\vec e_i) πi=CRTp(e i) 是对应的环元素。易知, π i ⋅ C R T p ( m ⃗ ) = C R T p ( 0 , ⋯   , m i , ⋯   , 0 ) \pi_i \cdot CRT_p(\vec m) = CRT_p(0,\cdots,m_i,\cdots,0) πiCRTp(m )=CRTp(0,,mi,,0),于是 π i \pi_i πi 定义了投影映射。它可做为掩码,构造 Select 函数。

Slot Rotation

域自同构映射 κ j ∈ G a l ( K / Q ) \kappa_j \in Gal(K/\mathbb Q) κjGal(K/Q),作用在整环 A p \mathbb A_p Ap 或者线性空间 A p A_p Ap 上(注意它们不是有限域),容易验证
κ j ( x ) ( m o d F i ) = κ j ( x ( m o d F i ) ) κ j ( C R T p ( x ⃗ ) ) = C R T p ( ⋯   , κ j ( x ( m o d F i ) ) , ⋯   ) \kappa_j(x) \pmod{F_i} = \kappa_j(x \pmod{F_i})\\ \kappa_j(CRT_p(\vec x)) = CRT_p(\cdots,\kappa_j(x \pmod{F_i}),\cdots) κj(x)(modFi)=κj(x(modFi))κj(CRTp(x ))=CRTp(,κj(x(modFi)),)

因此 κ j \kappa_j κj 相对于 C R T p CRT_p CRTp可交换的

由于整环 A p \mathbb A_p Ap 分解为 l = N / d l=N/d l=N/d 个有限域 G F ( p d ) GF(p^d) GF(pd) 的直积,因此 G a l ( K / Q ) Gal(K/\mathbb Q) Gal(K/Q) 包含循环子群 G = ( κ p ) \mathcal G=(\kappa_p) G=(κp),生成元是 Frobenius 映射 κ p : x ↦ x p \kappa_p:x \mapsto x^p κp:xxp。群 G \mathcal G G p p p 的分解群。

定义商群 H = Z m ∗ / G \mathcal H = \mathbb Z_m^*/\mathcal G H=Zm/G,易知 o r d ( H ) = N / d = l ord(\mathcal H)=N/d=l ord(H)=N/d=l,且 H \mathcal H H 是阿贝尔群。根据有限阿贝尔群结构定理,可以分解为若干循环群的直积: H ≅ ∏ i = 1 t Z n i \mathcal H \cong \prod_{i=1}^t\mathbb Z_{n_i} Hi=1tZni,并且满足 n i ∣ n i + 1 n_i|n_{i+1} nini+1 以及 ∏ i n i = l \prod_i n_i=l ini=l,这些 n i n_i ni 称为不变因子。令 h i h_i hi 是循环群 Z n i \mathbb Z_{n_i} Zni 的陪集代表,那么 h = ∏ i = 1 t h i e i , 0 ≤ e i ≤ n i h=\prod_{i=1}^t h_i^{e_i},0 \le e_i \le n_i h=i=1thiei,0eini 就是全部的 H \mathcal H H 中陪集代表。

由于 ϕ m ( x ) = ∏ i F i ( x ) ( m o d p ) \phi_m(x)=\prod_i F_i(x) \pmod p ϕm(x)=iFi(x)(modp),我们将 ϕ m ( x ) \phi_m(x) ϕm(x) ϕ ( m ) \phi(m) ϕ(m) 个根 { ζ m j : j ∈ Z m ∗ } \{\zeta_m^j: j \in \mathbb Z_m^*\} {ζmj:jZm},根据素因子 F i F_i Fi 把根划分到 l = N / d l=N/d l=N/d 个集合中,集合 X i = { ( ζ m i ) p r : 1 ≤ r ≤ d } X_i=\{(\zeta_m^i)^{p^r}:1 \le r \le d\} Xi={(ζmi)pr:1rd} F i F_i Fi 所有的根,它们相互共轭。因为 H \mathcal H H 大小是 l l l,且它在 l l l 个集合 X i X_i Xi 之间做迁移,我们令 ζ m \zeta_m ζm 是集合 X 1 X_1 X1 的代表,那么恰好存在唯一的 κ i ∈ H \kappa_i \in \mathcal H κiH 使得 κ i ( ζ m ) \kappa_i(\zeta_m) κi(ζm) 是集合 X i X_i Xi 的代表。

由于 κ j \kappa_j κj C R T p CRT_p CRTp 交换,

  • 循环群 G \mathcal G G 中的自同构 κ p \kappa_p κp,作用在槽 Z p [ x ] / ( F i ( x ) ) \mathbb Z_p[x]/(F_i(x)) Zp[x]/(Fi(x)) 上,执行了 X i X_i Xi 内部的单环置换,它对各个槽分别执行 Frobenius 映射,各个槽之间并没有置换
  • 商群 H \mathcal H H 的代表元 κ k , k = i − 1 j \kappa_k, k=i^{-1}j κk,k=i1j,作用在槽 Z p [ x ] / ( F i ( x ) ) \mathbb Z_p[x]/(F_i(x)) Zp[x]/(Fi(x)) 上,它将 ζ m i ∈ X i \zeta_m^i \in X_i ζmiXi 映射到了 ζ m j ∈ X j \zeta_m^{j} \in X_{j} ζmjXj,于是它可以实现任意两个槽之间的置换(但整体上不一定是单环置换)
  • 对于某些特定的参数设置(比如 m = 2 N + 1 m=2^{N+1} m=2N+1 并且 m ∣ p − 1 m|p-1 mp1),此时 H = { i d } \mathcal H=\{id\} H={id},并且 G \mathcal G G 恰好是某个单环置换(single cycle)生成的循环群,这就是 BGV 的 Slot Rotation 技术。

我们说对称群子群 H ⊂ S l H \subset S_l HSl快速迁移的(sharply transitive),如果对于任意的 i , j ∈ [ l ] i,j \in [l] i,j[l],都存在唯一的 h ∈ H h \in H hH 使得 h ( i ) = j h(i)=j h(i)=j 成立。易知,单环置换的循环群是快速迁移的;容易证明,商群 H \mathcal H H 也是快速迁移的。

Permutaion Network

BGV 的 SIMD 技术中,提供了 component-wise l l l-Add and l l l-Mult,以及底层代数结构提供的 l l l 个简单的快速迁移置换。我们希望再实现任意的 l l l-Permute,从而获得数组运算的完备集(complete set of operations for arrays)

在第 i − 1 i-1 i1 层的输出线有 w w w 条,打包在大约 w / l w/l w/l 个密文中(可能包含 empty slots)。第 i i i 层的输入线有 w ′ w' w 条,它们是来自上一层输出线的任意映射:不一定是置换,有着不同的扇出系数,并且跨越密文做所有槽的大置换。[GHS12] 首先将各个槽扩增到扇出系数,然后使用置换网络对高维立方做置换:

  1. i − 1 i-1 i1 层的输出线是 w / l w/l w/l 个密文(虽然不知道 slot 的内容,但是知道 slot 对应的线),利用 Cloning 过程获得 k k k 个密文,它们包含了正确数量的输入线(但是槽的位置还没对应到第 i i i 层的输入线)
  2. k × l k \times l k×l 的二维数组上,执行所需的置换,分为三个置换 π = π 3 ∘ π 2 ∘ π 1 \pi=\pi_3 \circ \pi_2 \circ \pi_1 π=π3π2π1,其中 π 2 \pi_2 π2 是对各行的单个 SIMD 密文做 l l l-Permute(使用 Shift Network),而 π 1 , π 3 \pi_1,\pi_3 π1,π3 是对各列的相同槽(域的模 F i F_i Fi 相同)做 t t t-Permute(使用 Select 和 Swap

Hyper-Rectangles

令集合 S = [ n 1 ] × ⋯ × [ n k ] S=[n_1] \times \cdots \times [n_k] S=[n1]××[nk] 是高维立方的索引集合,每个元素是 k k k-维向量。那么 S S S 上任意的置换 π \pi π,可以写成 π = π 2 k − 1 ∘ ⋯ ∘ π k ∘ ⋯ ∘ π 1 \pi = \pi_{2k-1} \circ \cdots \circ \pi_{k} \circ \cdots \circ \pi_1 π=π2k1πkπ1,其中 π i , ∀ i ≤ k \pi_i,\forall i \le k πi,ik 只对第 i i i 个坐标作用,而 π i , ∀ i > k \pi_i,\forall i>k πi,i>k 只对第 2 k − i 2k-i 2ki 个坐标作用。特别地,对于二维数组,可以写成 π = π 3 ∘ π 2 ∘ π 1 \pi=\pi_3 \circ \pi_2 \circ \pi_1 π=π3π2π1,其中 π 1 , π 3 \pi_1,\pi_3 π1,π3 作用在各列,而 π 2 \pi_2 π2 作用在各行。

  1. 对于二维数组 S = [ a ] × [ b ] S=[a] \times [b] S=[a]×[b],我们将 s ∈ S s \in S sS 记为 ( s x , s y ) (s_x,s_y) (sx,sy),其中 x x x 是行坐标, y y y 是列坐标。
  2. 我们让 π 1 \pi_1 π1 对每一列置换,使得重排后数组的每一行所有元素,其目标位置的 y y y 坐标 π y ( s i ) \pi_y(s_i) πy(si) 各不相同。接下来让 π 2 \pi_2 π2 对每一行做置换,把它们映射到目标位置对应的 y y y 坐标。最后让 π 3 \pi_3 π3 对每一列做置换,把它们映射到目标位置对应的 x x x 坐标。
  3. 我们根据置换 π \pi π 构造二部图 G = ( V 1 , V 2 , E ) G=(V_1,V_2,E) G=(V1,V2,E),其中 ∣ V 1 ∣ = ∣ V 2 ∣ = b |V_1|=|V_2|=b V1=V2=b(坐标 y y y)。对于全部的 s ∈ S s \in S sS,在 V 1 V_1 V1 的点 s y s_y sy V 2 V_2 V2 的点 π y ( s ) \pi_y(s) πy(s) 有边。易知,这个二部图是 a a a-正则的(regular),因此可以切分成 a a a完美匹配(perfect matches):所有点都是匹配点,所有边没有公共点。可使用匈牙利算法、KM算法来求解二部图的最大匹配。
  4. 我们对 G G G 的边染色 [ a ] [a] [a],使得完美匹配 G i G_i Gi 的颜色是 i i i,令 ρ ( s ) \rho(s) ρ(s) 表示边 s s s 的颜色,那么
    • π 1 ( s ) = ( ρ ( s ) , s y ) \pi_1(s) = (\rho(s),s_y) π1(s)=(ρ(s),sy),置换 π 1 \pi_1 π1 x x x 坐标做置换,而 y y y 坐标不动,于是每列的 a a a 个元素被划分到了 a a a 个完美匹配中;
    • π 2 ∘ π 1 ( s ) = ( ρ ( s ) , π y ( s ) ) \pi_2 \circ \pi_1(s) = (\rho(s),\pi_y(s)) π2π1(s)=(ρ(s),πy(s)),置换 π 2 \pi_2 π2 y y y 坐标映射到目标,而 x x x 坐标不动,它将第 ρ ( s ) \rho(s) ρ(s) 行的元素按照完美匹配 G ρ ( s ) G_{\rho(s)} Gρ(s) 做置换;
    • π 3 ∘ π 2 ∘ π 1 ( s ) = ( π x ( s ) , π y ( s ) ) \pi_3 \circ\pi_2 \circ \pi_1(s) = (\pi_x(s),\pi_y(s)) π3π2π1(s)=(πx(s),πy(s)),置换 π 3 \pi_3 π3 x x x 坐标映射到目标,而 y y y 坐标不动,它用于纠正目标 x x x 坐标。
  5. 对于高维立方,递归调用二维数组的置换分解过程。

现在的问题是,如何实现一维数组上的置换,尤其是仅利用一些基本的置换(移位、旋转)组合出任意置换。[GHS12] 使用了 Benes 网络(大小受限为二的幂次),[HS14] 给出了更快速的推广版本。

Cloning

每个密文中打包了一些明文,标记各个槽为 “full” 或者 “empty”。我们称密文是稀疏的(sparse),如果两个密文中包含的 “empty” 数量超过 l l l,此时可以把两个密文 merge 到单个密文中。

输入 v 1 , ⋯   , v w v_1,\cdots,v_w v1,,vw 的打包密文(大小约为 w / l w/l w/l 的密文数组 A A A),同时输入对应的扇出系数 m 1 , ⋯   , m w m_1,\cdots,m_w m1,,mw(允许取 0 0 0),令 M = log ⁡ ( max ⁡ i m i ) M=\log(\max_i m_i) M=log(maximi)

  1. 初始化 A 0 = A A_0=A A0=A,然后将 m i = 0 m_i=0 mi=0 的那些槽标记上 empty,如果存在稀疏的两个密文,那么合并它们
  2. Decomposition:对于 i = 1 , ⋯   , M i=1,\cdots,M i=1,,M,设置 A i = A i − 1 A_i=A_{i-1} Ai=Ai1,并将 m i < 2 i m_i < 2^i mi<2i 的那些槽标记上 empty(并非设置 v i = 0 v_i=0 vi=0,需另外存储),如果存在稀疏的两个密文,那么合并它们
  3. Aggregation:设置 A M ′ = A M A_M'=A_M AM=AM,对于 i = M − 1 , ⋯   , 0 i=M-1,\cdots,0 i=M1,,0,将数组 A i + 1 ′ ∥ A i + 1 ′ ∥ A i A_{i+1}'\|A_{i+1}'\|A_i Ai+1Ai+1Ai 作为 A i ′ A_i' Ai(类似于快速幂),如果存在稀疏的两个密文,那么合并它们
  4. 最终输出 A 0 ′ A_0' A0,它恰好包含了 m i m_i mi 个值 v i v_i vi,且数组中的 k k k 个密文是密集的

接下来,我们讨论如何在 k k k 个密文的全部 k ⋅ l k \cdot l kl 个槽之间执行任意置换,将 clone 得到的数据放置到正确的位置上。

Batch Selection

为了实现 π 1 , π 3 \pi_1,\pi_3 π1,π3,我们使用 Benes/Waksman Network(two back-to-back butterfly network),实现一维数组上的任意置换:指标集 I = [ 2 r ] I=[2^r] I=[2r](表示为 r r r 比特数),网络包含 2 r − 1 2r-1 2r1 层,每一层有 2 r 2^r 2r 个节点;第 i − 1 i-1 i1 层和第 i i i 层之间的边只有两种情况:一对指标 j , j ′ j,j' j,j,它们只有第 k = ∣ r − i ∣ k=|r-i| k=ri 比特不同,即 j ′ = j + 2 k j'=j+2^{k} j=j+2k,共有 2 r − 1 2^{r-1} 2r1 对指标,

  1. straight edge:每一对 j , j ′ j,j' j,j,第 i − 1 i-1 i1 层的 j j j 连接到第 i i i 层的 j j j,第 i − 1 i-1 i1 层的 j ′ j' j 连接到第 i i i 层的 j ′ j' j
  2. cross edge:每一对 j , j ′ j,j' j,j,第 i − 1 i-1 i1 层的 j j j 连接到第 i i i 层的 j ′ j' j,第 i − 1 i-1 i1 层的 j ′ j' j 连接到第 i i i 层的 j j j

Benes Network:集合 I = [ 2 r ] I=[2^r] I=[2r] 上的任意置换 π \pi π,给出了 r r r 维 Benes 网络上的一组不交路径(node-disjoint path),使得 i → P i π ( i ) , ∀ i i \overset{P_i}{\to} \pi(i),\forall i iPiπ(i),i 成立。换句话说,相邻层之间的每一对指标 j , j ′ j,j' j,j,它们要么不交换(直边)、要么交换(叉边),可通过使用 control bit 控制 Switch Gate 来实现。

给定两个密文 A 0 = [ m 1 ( 0 ) , ⋯   , m l ( 0 ) ] A_0=[m_1^{(0)},\cdots,m_l^{(0)}] A0=[m1(0),,ml(0)] A 1 = [ m 1 ( 1 ) , ⋯   , m l ( 1 ) ] A_1=[m_1^{(1)},\cdots,m_l^{(1)}] A1=[m1(1),,ml(1)],再令 S = [ s 1 , ⋯   , s l ] ∈ { 0 , 1 } l S=[s_1,\cdots,s_l] \in \{0,1\}^l S=[s1,,sl]{0,1}l 是掩码,那么
S e l e c t S ( A 0 , A 1 ) = A d d ( M u l t ( A , S ˉ ) ,    M u l t ( A ′ , S ) ) Select_S(A_0,A_1) = Add(Mult(A,\bar S),\,\, Mult(A',S)) SelectS(A0,A1)=Add(Mult(A,Sˉ),Mult(A,S))

得到密文 [ m 1 ( s 1 ) , ⋯   , m l ( s l ) ] [m_1^{(s_1)},\cdots,m_l^{(s_l)}] [m1(s1),,ml(sl)],它根据 S S S 挑选 A 0 , A 1 A_0,A_1 A0,A1 的元素。进一步的,计算
S w i t c h S ( A 0 , A 1 ) = ( S e l e c t S ( A 0 , A 1 ) ,    S e l e c t S ˉ ( A 0 , A 1 ) ) Switch_S(A_0,A_1) = \left(Select_S(A_0,A_1),\,\, Select_{\bar S}(A_0,A_1)\right) SwitchS(A0,A1)=(SelectS(A0,A1),SelectSˉ(A0,A1))

那么 s i = 0 s_i=0 si=0 的那些位置不发生交换,而 s i = 1 s_i=1 si=1 的那些位置发生了交换。

对于 k × l k \times l k×l 的二维数组上的 π 1 , π 3 \pi_1,\pi_3 π1,π3 对于各个列分别置换,假设 k = 2 r k=2^r k=2r(通过填充),那么可以构建 r r r 维的 Benes 网络,为第 i − 1 i-1 i1 层和第 i i i 层之间的 Switch Gate 设置 S j , j ′ S_{j,j'} Sj,j,执行并行的(但是 control bit 独立)交换电路。Benes 网络的深度 2 r − 1 = O ( log ⁡ k ) 2r-1=O(\log k) 2r1=O(logk),交换节点的数量 k ( 2 r − 1 ) / 2 = O ( k log ⁡ k ) k(2r-1)/2=O(k\log k) k(2r1)/2=O(klogk)复杂度是 ploylog 的

Shift Network

剩下的问题就是如何使用底层代数结构所给于的置换子集 H ⊆ G a l ( Q ( ζ m ) / Q ) \mathcal H \subseteq Gal(\mathbb Q(\zeta_m)/\mathbb Q) HGal(Q(ζm)/Q),实现单个密文上 l = N / d l=N/d l=N/d 个槽的任意置换。

对于特殊参数设置,商群 H \mathcal H H 中的元素作用在密文上导致了 slot rotation(单环置换)。我们假设循环群生成元是 σ \sigma σ,经过对槽的合理排序,映射 σ k \sigma^k σk ( m 1 , ⋯   , m l ) (m_1,\cdots,m_l) (m1,,ml) 映射为 ( m k , ⋯   , m l , m 1 , ⋯   , m k − 1 ) (m_k,\cdots,m_l,m_1,\cdots,m_{k-1}) (mk,,ml,m1,,mk1),是个循环移位。

我们称 I = [ l ] I=[l] I=[l] 上的映射 π \pi π i i i-offset swap,如果 π \pi π 可以分解为 1 1 1-cycles 和 2 2 2-cycles,并且这些 2 2 2-cycles 都形如 ( k , k + i ) ( m o d l ) (k,k+i) \pmod l (k,k+i)(modl)。那么,任意的 i i i-offset swap 可以通过两个 Batch Select,然后分别使用 σ i \sigma^i σi σ l − i \sigma^{l-i} σli 旋转对应的槽,最后加起来即可。令 r = log ⁡ l r=\log l r=logl,在 Benes 网络中只需要形如 ( j , j + 2 ∣ r − i ∣ ) ( m o d 2 r ) (j,j+2^{|r-i|}) \pmod{2^r} (j,j+2ri)(mod2r) 的置换,因此使用 O ( log ⁡ l ) O(\log l) O(logl) 个槽旋转即可完成任意置换。

然而,对于一般的参数设置, H \mathcal H H 仅仅是一个 Sharply Transitive Permutation Groups,不一定是由循环移位组成的循环群。将有限阿贝尔群写作循环群直积
H ≅ ∏ i = 1 k Z n i ,    ∀ i , n i ∣ n i + 1 ,    ∏ i n i = l \mathcal H \cong \prod_{i=1}^k\mathbb Z_{n_i},\,\, \forall i,n_i|n_{i+1},\,\, \prod_i n_i=l Hi=1kZni,i,nini+1,ini=l

于是元素 h ∈ H h \in \mathcal H hH 可以记为盒子 B = ∏ i = 1 k Z n i \mathcal B=\prod_{i=1}^k\mathbb Z_{n_i} B=i=1kZni 中的向量 h ⃗ \vec h h ,群元素运算就等价于向量的加法。令 { e r } r = 1 t \{e_r\}_{r=1}^t {er}r=1t 是单位向量,易知它是 H \mathcal H H 的生成集。

因为 H \mathcal H H 是集合 I = [ l ] I=[l] I=[l] 上的快速迁移,我们固定某个索引 i 0 ∈ I i_0 \in I i0I(例如 i 0 = 1 i_0=1 i0=1),那么我们遍历 h ∈ H h \in \mathcal H hH(此时 h ( i 0 ) h(i_0) h(i0) 遍历 I I I),对每个 h ( i 0 ) h(i_0) h(i0) 标记上 h ⃗ \vec h h 这就把一维数组 I I I 转化为了高阶立方 B \mathcal B B

生成元 e r ∈ H e_r \in \mathcal H erH 作用在指标 i i i 上,假如 i = h ∗ ( i 0 ) i=h^*(i_0) i=h(i0), 那么得到
e r ( i ) = e r ( h ∗ ( i 0 ) ) = ( e r h ∗ ) ( i 0 ) e_r(i) = e_r(h^*(i_0)) = (e_r h^*)(i_0) er(i)=er(h(i0))=(erh)(i0)

于是 e r ( i ) e_r(i) er(i) 的标签是 e ⃗ r + h ⃗ ∗ ( m o d B ) \vec e_r+\vec h^* \pmod{\mathcal B} e r+h (modB),这就是对第 r r r 个坐标执行了 ( m o d n r ) \pmod{n_r} (modnr) 的循环移位。因此,我们将 I I I 视为 t t t 阶立方 B \mathcal B B

  1. 指标集 I = [ l ] ≅ B I=[l] \cong \mathcal B I=[l]B 上的任意置换 π \pi π,分解为 π = π 2 k − 1 ∘ ⋯ ∘ π 1 \pi = \pi_{2k-1} \circ \cdots \circ \pi_1 π=π2k1π1,其中的 π i , ∀ i ≤ k \pi_i,\forall i \le k πi,ik 只对第 i i i 个坐标做置换,而 π i , ∀ i > k \pi_i,\forall i>k πi,i>k 只对第 2 k − i 2k-i 2ki 个坐标做置换
  2. 对于 i ≤ k i \le k ik,集合 [ n i ] [n_i] [ni] 上的置换 π i \pi_i πi,使用循环子群 ( e i ) (e_i) (ei) 构造 offset swap,构建 Benes 网络来实现 π i \pi_i πi(并行的 l / n i l/n_i l/ni 个网络,使用不同的 select bit 并行处理)
  3. 对于 i > k i > k i>k,集合 [ n 2 k − i ] [n_{2k-i}] [n2ki] 上的置换 π i \pi_i πi,使用循环子群 ( e 2 k − i ) (e_{2k-i}) (e2ki) 构造 offset swap,构建 Benes 网络来实现 π i \pi_i πi(并行的 l / n i l/n_i l/ni 个网络,使用不同的 select bit 并行处理)
  4. 将上述的 2 k − 1 2k-1 2k1 组 Benes 网络串联起来,就实现了 π \pi π 置换

这个由 Benes 网络组合出来的置换网络,它的深度为 O ( log ⁡ l ) O(\log l) O(logl),每层的 Rotate 和 Select 数量都是常数。

Shift-Networks

[HS14] 给出了移位网络的定义。对于 I = [ l ] I=[l] I=[l] 上的置换 π \pi π移位列(shift-column) s h π [ i ] = π ( i ) − i ∈ [ − l + 1 , l − 1 ] sh_\pi[i]=\pi(i)-i \in [-l+1,l-1] shπ[i]=π(i)i[l+1,l1] 是记录置换导致移动距离的列向量,令 m δ ∈ { 0 , 1 } l m_\delta \in \{0,1\}^l mδ{0,1}l 是那些 s h π [ i ] = δ sh_\pi[i]=\delta shπ[i]=δ 的掩码,那么 w = ∑ δ ∈ s h π ( m δ × v ) ≫ δ w = \sum_{\delta \in sh_\pi} (m_\delta \times v) \gg \delta w=δshπ(mδ×v)δ,其中 × \times × 是阿达玛乘积, ≫ \gg 是移位。我们定义开销(cost)是 s h π sh_\pi shπ 中出现的不同的非零值的个数。移位网络(Shift Network)是 l × d l \times d l×d 形状的矩阵,网络深度为 d d d,它的每一列都是移位列,代表了 π 1 , ⋯   , π d \pi_1,\cdots,\pi_d π1,,πd,网络对应的置换是 π = π d ∘ ⋯ ∘ π 1 \pi=\pi_d \circ \cdots \circ \pi_1 π=πdπ1网络开销是所有移位列开销的加和。

Cheapest-shift-network Problem:给定 [ n ] [n] [n] 上的置换 π \pi π,以及深度上界 B B B,尝试给出一个深度至多为 B B B 的移位网络,使得网络开销最小化。易知,大多数置换拥有 cost- Ω ( n ) \Omega(n) Ω(n) depth- 1 1 1 的移位网络,全部的置换都有 cost- O ( n ) O(\sqrt n) O(n ) depth-2 移位网络,以及 cost- O ( d ⋅ n 1 / d ) O(d \cdot n^{1/d}) O(dn1/d) depth- d d d 的移位网络。

求解 CSN 被认为是困难的,但是足够给出一类足够优秀的网络:Benes Networks。设 n = 2 r n=2^r n=2r,它的深度为 2 r − 1 = O ( log ⁡ n ) 2r-1=O(\log n) 2r1=O(logn),开销是 4 r − 2 = O ( log ⁡ n ) 4r-2=O(\log n) 4r2=O(logn)。它被应用于交换机、电话交换网络。

Benes Network

[GHS12] 中使用 Benes 网络分别实现了 π 1 , π 2 , π 3 \pi_1,\pi_2,\pi_3 π1,π2,π3,但是文中没有给出 Benes 网络的具体构造方法。[HS14] 给出了方法。

给定 S = [ n ] , n = 2 r S=[n],n=2^r S=[n],n=2r 上的任意置换 π \pi π,将它分解为
π = σ r − 1 ∘ ⋯ ∘ σ 1 ∘ σ 0 ∘ τ 1 ∘ ⋯ ∘ τ r − 1 \pi = \sigma_{r-1} \circ \cdots \circ \sigma_1 \circ \sigma_0 \circ \tau_1 \circ \cdots \circ \tau_{r-1} π=σr1σ1σ0τ1τr1

其中 σ k , τ k \sigma_k, \tau_k σk,τk 把元素 i ∈ [ n ] i \in [n] i[n] 映射到三种可能: i , i + 2 k , i − 2 k i,i+2^k,i-2^k i,i+2k,i2k

采用递归算法:

  1. m = n / 2 = 2 r − 1 m=n/2=2^{r-1} m=n/2=2r1,我们把 S S S 分为上下两部分, S 0 = [ 0 , ⋯   , m − 1 ] S_0=[0,\cdots,m-1] S0=[0,,m1] S 1 = [ m , ⋯   , n − 1 ] S_1=[m,\cdots,n-1] S1=[m,,n1]

  2. 做分解 π = σ ∘ ρ ∘ τ \pi=\sigma \circ \rho \circ \tau π=σρτ,使得

    • σ , τ \sigma,\tau σ,τ i ∈ S 0 i \in S_0 iS0 映射到 i ∈ S 0 i \in S_0 iS0 或者 i + m ∈ S 1 i+m \in S_1 i+mS1,将 i ∈ S 1 i \in S_1 iS1 映射到 i ∈ S 1 i \in S_1 iS1 或者 i − m ∈ S 0 i-m \in S_0 imS0
    • ρ \rho ρ 包含两个置换 π 0 , π 1 \pi_0,\pi_1 π0,π1,它们分别对子集 S 0 , S 1 S_0,S_1 S0,S1 做置换
  3. 构造二部图 G = ( L , R , E ) G=(L,R,E) G=(L,R,E),其中 ∣ L ∣ = ∣ R ∣ = n |L|=|R|=n L=R=n

    • permutation edge:根据 π \pi π,在 L i L_i Li R π ( i ) R_{\pi(i)} Rπ(i) 之间添加边(形成了一个完美匹配)
    • conflict edge:在 L i L_i Li L i + m L_{i+m} Li+m 之间添加边,在 R i R_i Ri R i + m R_{i+m} Ri+m 之间添加边

    容易看出 E E E 组成了汉密尔顿回路,并且 ( L , R ) (L,R) (L,R) 可以二染色(permutation edge 和 conflict edge 交替出现), C ( v ) ∈ { 0 , 1 } C(v) \in \{0,1\} C(v){0,1}

  4. 根据点集 L L L 的染色情况,把它们分为上下两部分

    • 如果 i ∈ S 0 i \in S_0 iS0 C ( L i ) = 0 C(L_i)=0 C(Li)=0,那么令 τ ( i ) = i ∈ S 0 \tau(i)=i \in S_0 τ(i)=iS0
    • 如果 i ∈ S 1 i \in S_1 iS1 C ( L i ) = 1 C(L_i)=1 C(Li)=1,那么令 τ ( i ) = i ∈ S 1 \tau(i)=i \in S_1 τ(i)=iS1
    • 如果 i ∈ S 0 i \in S_0 iS0 C ( L i ) = 1 C(L_i)=1 C(Li)=1,那么令 τ ( i ) = i + m ∈ S 1 \tau(i)=i+m \in S_1 τ(i)=i+mS1
    • 如果 i ∈ S 1 i \in S_1 iS1 C ( L i ) = 0 C(L_i)=0 C(Li)=0,那么令 τ ( i ) = i − m ∈ S 0 \tau(i)=i-m \in S_0 τ(i)=imS0

    于是 τ \tau τ 变换后, S 0 S_0 S0 中的点都是颜色 0 0 0 S 1 S_1 S1 中的点都是颜色 1 1 1,花费是 + m +m +m − m -m m 的两个 batch select + shift

  5. 根据点集 R R R 的染色情况,把它们分为上下两部分

    • 如果 i ∈ S 0 i \in S_0 iS0 C ( R i ) = 0 C(R_i)=0 C(Ri)=0,那么令 σ − 1 ( i ) = i + m ∈ S 1 \sigma^{-1}(i)=i+m \in S_1 σ1(i)=i+mS1
    • 如果 i ∈ S 1 i \in S_1 iS1 C ( R i ) = 1 C(R_i)=1 C(Ri)=1,那么令 σ − 1 ( i ) = i − m ∈ S 0 \sigma^{-1}(i)=i-m \in S_0 σ1(i)=imS0
    • 如果 i ∈ S 0 i \in S_0 iS0 C ( R i ) = 1 C(R_i)=1 C(Ri)=1,那么令 σ − 1 ( i ) = i ∈ S 0 \sigma^{-1}(i)=i \in S_0 σ1(i)=iS0
    • 如果 i ∈ S 1 i \in S_1 iS1 C ( R i ) = 0 C(R_i)=0 C(Ri)=0,那么令 σ − 1 ( i ) = i ∈ S 1 \sigma^{-1}(i)=i \in S_1 σ1(i)=iS1

    于是 σ − 1 \sigma^{-1} σ1 变换后, S 0 S_0 S0 中的点都是颜色 1 1 1 S 1 S_1 S1 中的点都是颜色 0 0 0,花费是 + m +m +m − m -m m 的两个 batch select + shift

  6. 可以看出 τ ( L ) \tau(L) τ(L) σ − 1 ( R ) \sigma^{-1}(R) σ1(R) 将图 G G G 分为了两个二部图 G 0 , G 1 G_0,G_1 G0,G1,两个子图之间没有 permutation edge(仅在 S 0 S_0 S0 S 1 S_1 S1 内部分别置换),因此我们就得到了中间的置换 ρ = ( π 0 ) ( π 1 ) \rho=(\pi_0)(\pi_1) ρ=(π0)(π1)递归分解

它是 “背靠背” 的两个蝴蝶网络:以 n = 2 3 n=2^3 n=23 为例,两个深度 3 3 3 的网络,

在这里插入图片描述

注意,上图画的有些问题(没找到更好的网图):左上、右上的那两对节点,缺少了直边。

General Benes Network

[HS14] 给出了更加快速的 Benes 网络:假设 n n n 不是二的幂次,并非将它填充到 2 r 2^r 2r,而是将它分割为近似相等的两个子图。

  1. 如果 n n n 是偶数,那么 m = n / 2 m=n/2 m=n/2,于是 Benes 的分割流程是工作的

  2. 如果 n n n 是奇数,有两种设置: m = ( n − 1 ) / 2 m = (n-1)/2 m=(n1)/2 或者 m = ( n + 1 ) / 2 m=(n+1)/2 m=(n+1)/2,我们令 S 0 = { 0 , ⋯   , m − 1 } S_0=\{0,\cdots,m-1\} S0={0,,m1} S 1 = { m , ⋯   , n − 1 } S_1=\{m,\cdots,n-1\} S1={m,,n1},它们的大小差距为 1 1 1

  3. 为了保证分割后,同一个 level 中所有置换的移动距离相同,

    1. 大小 n n n 的图,移动距离 m = ⌊ n / 2 ⌉ m=\lfloor n/2 \rceil m=n/2,划分为大小 ( n − 1 ) / 2 (n-1)/2 (n1)/2 以及 ( n + 1 ) / 2 (n+1)/2 (n+1)/2 的两个子图
    2. 对于这两个大小接近的子图,设置相同的移动距离 m ′ = ⌊ n / 4 ⌉ m'=\lfloor n/4 \rceil m=n/4,划分为四个大小接近 n / 4 n/4 n/4 的子图
    3. 这些子图的大小差距也至多为 1 1 1,因此可以继续设置相同的偏移 m ′ ′ m'' m′′,划分出大小差距至多为 1 1 1 的多个子图

    注意, ⌊ ( ( n − 1 ) / 2 ) / 2 ⌉ ≠ ⌊ ( ( n + 1 ) / 2 ) / 2 ⌉ \lfloor ((n-1)/2)/2 \rceil \neq \lfloor ((n+1)/2)/2 \rceil ⌊((n1)/2)/2=⌊((n+1)/2)/2,因此上述的偏移 m ′ , m ′ ′ , ⋯ m',m'',\cdots m,m′′, 并不是以子图本身大小来计算的!必须根据整个图的大小 n n n 以及分解的 level 层级来计算。

  4. 最终得到了深度 2 ⌈ log ⁡ n ⌉ − 1 2\lceil \log n \rceil-1 2logn1 的移位网络,同一层的移位距离都是 ⌊ n / 2 k ⌉ \lfloor n/2^k \rceil n/2k,因此只需要两个 batch select + shift

两种 m m m 的选择, S 0 , S 1 S_0,S_1 S0,S1 的大小差距 1 1 1,因此制作 conflict edge 的时候,会有一个指标 i ∗ i^* i 剩余,我们特别地设置它的 conflict edge 是自己到自己。对应的二染色,如图所示:

在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值