不可区分混淆:GGH+13

news2024/10/7 18:22:50

参考资料:

  1. Joe Kilian. Founding cryptography on oblivious transfer. In Janos Simon, editor, STOC, pages 20–31. ACM, 1988.
  2. Barak B, Goldreich O, Impagliazzo R, et al. On the (im) possibility of obfuscating programs[C]//Advances in Cryptology—CRYPTO 2001: 21st Annual International Cryptology Conference, Santa Barbara, California, USA, August 19–23, 2001 Proceedings. Berlin, Heidelberg: Springer Berlin Heidelberg, 2001: 1-18.
  3. Garg S, Gentry C, Halevi S. Candidate multilinear maps from ideal lattices[C]//Advances in Cryptology–EUROCRYPT 2013: 32nd Annual International Conference on the Theory and Applications of Cryptographic Techniques, Athens, Greece, May 26-30, 2013. Proceedings 32. Springer Berlin Heidelberg, 2013: 1-17.
  4. Gentry C, Gorbunov S, Halevi S. Graph-induced multilinear maps from lattices[C]//Theory of Cryptography: 12th Theory of Cryptography Conference, TCC 2015, Warsaw, Poland, March 23-25, 2015, Proceedings, Part II 12. Springer Berlin Heidelberg, 2015: 498-527.
  5. Garg S, Gentry C, Halevi S, et al. Candidate indistinguishability obfuscation and functional encryption for all circuits[J]. SIAM Journal on Computing, 2016, 45(3): 882-929.
  6. Boneh D, Sahai A, Waters B. Functional encryption: Definitions and challenges[C]//Theory of Cryptography: 8th Theory of Cryptography Conference, TCC 2011, Providence, RI, USA, March 28-30, 2011. Proceedings 8. Springer Berlin Heidelberg, 2011: 253-273.
  7. Jain A, Lin H, Sahai A. Indistinguishability obfuscation from well-founded assumptions[C]//Proceedings of the 53rd Annual ACM SIGACT Symposium on Theory of Computing. 2021: 60-73.
  8. 什么是iO,基于多线性配对的iO:多线性拼图,从MBP开始构建多线性拼图
  9. Computer Scientists Achieve ‘Crown Jewel’ of Cryptography

文章目录

Indistinguishability Obfuscation

软件工程里的 Code Obfuscation(字符替换、加入冗余、汇编语言,使代码可读性差),严格意义上并不是好的混淆,因为人眼区分不出来的程序,并不意味着任意的 PPT 敌手(计算机程序)无法区分。事实上,使用反汇编工具,立即可以得到可读性不错的 C 代码。

密码学中的定义为:Virtual Black Box Obfuscation(虚拟黑盒混淆,VBB),一个 Obfuscator 将电路 C C C 混淆为 O ( C ) \mathcal O(C) O(C),就如同封装在了一个黑盒 Oracle 里,唯一可做的就是输入 x x x 输出 C ( x ) C(x) C(x),并且无法获得关于 C C C 的其他信息。

当然,如果电路的输出本身就包含电路的信息(例如它打印自己的代码),那么混淆是无意义的,这种电路称为 Learnable Program。VBB 仅用于混淆 Unlearnable 的电路。但是 BGI+01 证明:存在一族 Unlearnable 的电路 C ∗ C^* C,那么任意的 Obfuscator 都无法混淆它的某个属性,但如果放入 Oracle 则可以隐藏这个属性。也就是说:通用 VBB 不存在(VBB Impossibility Result)。

BGI+01 提出了一种新的定义:Indistinguishability Obfuscation(不可区分混淆),一个 Indistinguishability Obfuscator 将两个相同功能的电路 C 1 , C 2 C_1,C_2 C1,C2 混淆为 i O ( C 1 ) , i O ( C 2 ) i\mathcal O(C_1),i\mathcal O(C_2) iO(C1),iO(C2),使得敌手无法区分这两个电路。

现在,我们给出不可区分混淆的正式定义:一个 uniform PPT 的机器 i O i\mathcal O iO 称为关于电路簇 { C λ } \{\mathcal C_\lambda\} {Cλ} 的一个不可区分混淆器(indistinguishability obfuscator),如果它满足

  1. 功能性保持(Functionality Preserving):对于任意的 λ ∈ N \lambda \in \mathbb N λN,任意电路 C ∈ C λ C \in \mathcal C_\lambda CCλ,有
    P r [ C ′ ( x ) = C ( x ) : C ′ ← i O ( λ , C ) ] = 1 Pr[C'(x)=C(x): C' \leftarrow i\mathcal O(\lambda,C)]=1 Pr[C(x)=C(x):CiO(λ,C)]=1

  2. 不可区分性(Indistinguishability):对于任意的 λ ∈ N \lambda \in \mathbb N λN,任意的(non-uniform)PPT 区分器 D \mathcal D D,任意的一对电路 C 0 , C 1 ∈ C λ C_0,C_1 \in \mathcal C_\lambda C0,C1Cλ,如果 C 0 ( x ) = C 1 ( x ) , ∀ x C_0(x)=C_1(x),\forall x C0(x)=C1(x),x,那么
    ∣ P r [ D ( i O ( λ , C 0 ) ) = 1 ] − P r [ D ( i O ( λ , C 1 ) ) = 1 ] ∣ ≤ n e g l ( n ) \Big| Pr[\mathcal D(i\mathcal O(\lambda,C_0))=1] - Pr[\mathcal D(i\mathcal O(\lambda,C_1))=1]\Big| \le negl(n) Pr[D(iO(λ,C0))=1]Pr[D(iO(λ,C1))=1] negl(n)

  3. 有效性(Efficiency):混淆器是 PPT 的,其输出长度满足 ∣ i O ( λ , C ) ∣ ≤ p o l y ( ∣ C ∣ ) |i\mathcal O(\lambda,C)| \le poly(|C|) iO(λ,C)poly(C)。因为任意函数都可表示为一个指数大的表格,它是不可区分的但是平凡的。

关于 N C 1 NC^1 NC1 的不可区分混淆器:如果 C λ \mathcal C_\lambda Cλ 是深度至多为 O ( log ⁡ λ ) O(\log \lambda) O(logλ) 大小至多为 O ( λ ) O(\lambda) O(λ) 的电路簇。

关于 P / p o l y P/poly P/poly 的不可区分混淆器:如果 C λ \mathcal C_\lambda Cλ 是大小至多为 O ( λ ) O(\lambda) O(λ) 的电路簇(带有多项式长度 advice 的多项式时间图灵机,非一致多项式时间)。

区分两个混淆:

  • Obfuscation:程序混淆。保护生成方的电路信息,计算方可以在电路上多次执行任意的输入
  • Garbled Circuit:姚期智的混淆电路。一种基于对称原语的 2PC 方案,保护参与双方的输入,并不保护电路信息,且计算方只能执行某一组输入(通过 OT 协议)。

Multilinear Jigsaw Puzzles

在 GGH13 和 GGH15 中给出了基于格的多线性映射方案,而 GGH+13 基于此构造了多线性拼图,并给出了第一个不可区分混淆器 i O i\mathcal O iO 的构造。但是后续人们发现了 GGH13 和 GGH15 的多线性映射的弱点,不过幸运的是 GGH+13 只将多线性映射作为一个黑盒来调用,并不关注它的具体实现。然而,多线性度 n ≥ 3 n \ge 3 n3 的多线性映射如何实现安全性是个问题;目前已知双线性映射是安全的。Lin 经过一系列研究,将多线性度降低到了常数级,最终在 JLS20 中成功将 iO 建立在了双线性映射上。

多线性拼图猜谜(Multilinear Jigsaw Puzzles)是多线性编码(multilinear encoding schemes)的严格子集,类似拼图一样编码值的组合受限。类似于双线性映射,素数 p p p 阶群上的多线性映射(multilinear maps)为:
e : G 1 × G 2 × ⋯ × G k → G T ( g 1 x 1 , g 2 x 2 , ⋯   , g k x k ) → g T ∏ i x i \begin{aligned} e: G_1 \times G_2 \times \cdots \times G_k \to G_T\\ (g_1^{x_1},g_2^{x_2},\cdots,g_k^{x_k}) \to g_T^{\prod_i x_i} \end{aligned} e:G1×G2××GkGT(g1x1,g2x2,,gkxk)gTixi

易知 e ( g 1 x 1 , g 2 x 2 , ⋯   , g k x k ) ⋅ e ( g 1 y 1 , g 2 y 2 , ⋯   , g k y k ) = g T ∏ i x i + ∏ i y i e(g_1^{x_1},g_2^{x_2},\cdots,g_k^{x_k}) \cdot e(g_1^{y_1},g_2^{y_2},\cdots,g_k^{y_k}) = g_T^{\prod_i x_i+\prod_iy_i} e(g1x1,g2x2,,gkxk)e(g1y1,g2y2,,gkyk)=gTixi+iyi,且 e ( g 1 , g 2 , ⋯   , g k ) = g T e(g_1,g_2,\cdots,g_k)=g_T e(g1,g2,,gk)=gT有效的多线性型(valid multilinear form)就是任意的形如 ∏ i e ( x i 1 , ⋯   , x i k ) w i ⋅ ∏ j g T w j \prod_i e(x_{i1},\cdots,x_{ik})^{w_i} \cdot \prod_j g_T^{w_j} ie(xi1,,xik)wijgTwj 的可通过群运算和多线性映射表示的任意组合。

多线性拼图猜谜,它是一个 PPT 算法组 M J P = ( J G e n , J V e r ) MJP=(JGen,JVer) MJP=(JGen,JVer)

  • 拼图生成器(Jigsaw Generator):输入一些明文,输出拼图碎片(明文的编码值),这些拼图碎片只能以十分受限的方式通过群运算和多线性映射组合。

  • 拼图验证器(Jigsaw Verifier):输入拼图碎片以及一个关于这些拼图碎片组合方式的多线性型,验证这个多线性型是否成功地将碎片组合成了明文 0 0 0 的编码值

拼图区分符(Jigsaw Specifier)是一个三元组 { ( k λ , l λ , A λ ) } λ ∈ Z + \{(k_\lambda,l_\lambda,A_\lambda)\}_{\lambda \in \mathbb Z^+} {(kλ,lλ,Aλ)}λZ+,其中 k , l ∈ Z + k,l \in \mathbb Z^+ k,lZ+,而 A A A 是一个概率电路:输入素数 p p p,输出有序集合 { ( S 1 , a 1 ) , … , ( S l , a l ) } \{(S_1,a_1),\dots,(S_l,a_l)\} {(S1,a1),,(Sl,al)},其中 a i ∈ Z p a_i \in \mathbb Z_p aiZp 是明文, S i ⊆ [ k ] S_i \subseteq [k] Si[k] 是编码级别(encoding levels)。

多线性型(Multilinear Form)是一个四元组 F = ( k , l , Π , F ) \mathcal F=(k,l,\Pi,F) F=(k,l,Π,F),其中 k , l ∈ Z + k,l \in \mathbb Z^+ k,lZ+ Π \Pi Π 是有 l l l 条 input wires 的多项式大小的电路, F F F 是对电路 Π \Pi Π 中每条 wires 的指标集 S ⊆ [ k ] S \subseteq [k] S[k] 的赋值。电路的构成和约束是:

  • 一元减法门 ⊖ \ominus ,输入线和输出线的指标集相同,运算为 ( S , a ) → ( S , − a ) (S,a) \to (S,-a) (S,a)(S,a)
  • 二元加法门 ⊕ \oplus ,输入线和输出线的指标集相同,运算为 ( S , a 1 ) × ( S , a 2 ) → ( S , a 1 + a 2 ) (S,a_1) \times (S,a_2) \to (S,a_1+a_2) (S,a1)×(S,a2)(S,a1+a2)
  • 二元乘法门 ⊗ \otimes ,输入线的指标集是 disjoint sets,输出线的指标集是不交并,运算为 ( S 1 , a 1 ) × ( S 2 , a 2 ) → ( S 1 ∪ S 2 , a 1 ⋅ a 2 ) (S_1,a_1)\times(S_2,a_2) \to (S_1 \cup S_2,a_1 \cdot a_2) (S1,a1)×(S2,a2)(S1S2,a1a2)
  • 忽略门(ignore gate) □ \square ,入度任意,出度为零
  • 电路的 output wire,指标集是全集 [ k ] [k] [k]

多线性运算(multilinear evaluation):输入为 X = ( p , { ( S i , a i ) } ) ← ( k , l , A ) X=(p,\{(S_i,a_i)\}) \leftarrow (k,l,A) X=(p,{(Si,ai)})(k,l,A),且 F \mathcal F F 的 input wires 的指标集赋值为 S i S_i Si,如果在 Z p \mathbb Z_p Zp 上进行运算后,使得输出线为 ( [ k ] , 0 ) ([k],0) ([k],0),我们说 F ( X ) \mathcal F(X) F(X) 成功(在受限的组合下使得 C ( x ) = 0 C(x)=0 C(x)=0)。

拼图生成器是一对 PPT 算法 J G e n = ( I n s t G e n , E n c o d e ) JGen=(InstGen, Encode) JGen=(InstGen,Encode)

  1. 随机实例生成器 ( p , p r m s , s ) ← I n s t G e n ( 1 λ , 1 k ) (p,prms,s) \leftarrow InstGen(1^\lambda,1^k) (p,prms,s)InstGen(1λ,1k),输入为:安全参数 1 λ 1^\lambda 1λ 、多线性参数 k k k,输出为:素数 p p p、公开参数 p r m s prms prms、用于编码的秘密状态 s s s
  2. 随机编码算法 ( S , u ) ← E n c o d e ( p , p r m s , S , a ) (S,u) \leftarrow Encode(p,prms,S,a) (S,u)Encode(p,prms,S,a),输入为:随机实例 ( p , p r m s , s ) (p,prms,s) (p,prms,s)、编码级别 S ⊆ [ k ] S \subseteq [k] S[k]、明文 a a a,输出为:编码级别和 a a a 的编码值 u u u
  3. ( p , X , p u z z l e ) ← J G e n ( 1 λ , ( k , l , A ) ) (p,X,puzzle) \leftarrow JGen(1^\lambda,(k,l,A)) (p,X,puzzle)JGen(1λ,(k,l,A)),给定安全参数 λ \lambda λ 以及一个拼图区分符 ( k , l , A ) (k,l,A) (k,l,A),先执行 I n s t G e n InstGen InstGen 获得随机实例 ( p , p r m s , s ) (p,prms,s) (p,prms,s),然后执行 A ( p ) A(p) A(p) 获得明文的有序集合 X : = ( p , ( S 1 , a 1 ) , ⋯   , ( S l , a l ) ) X:=(p,(S_1,a_1),\cdots,(S_l,a_l)) X:=(p,(S1,a1),,(Sl,al)),最后使用秘密 s s s 执行 E n c o d e Encode Encode 编码出一个谜题 p u z z l e : = ( p r m s , ( S 1 , u 1 ) , ⋯   , ( S l , u l ) ) puzzle:=(prms,(S_1,u_1),\cdots,(S_l,u_l)) puzzle:=(prms,(S1,u1),,(Sl,ul))

拼图验证器是一个 PPT 算法 J V e r JVer JVer

  1. 0 / 1 ← J V e r ( p u z z l e , F ) 0/1 \leftarrow JVer(puzzle,\mathcal F) 0/1JVer(puzzle,F),输入为:一个关于 X X X 的谜题 p u z z l e puzzle puzzle、一个多线性型 F = ( k , l , Π , F ) \mathcal F=(k,l,\Pi,F) F=(k,l,Π,F)
  2. 正确性:如果满足 F ( X ) = ( [ k ] , 0 ) \mathcal F(X)=([k],0) F(X)=([k],0),那么 J V e r JVer JVer 输出 1 1 1 表示接受。如果满足 F ( X ) ≠ ( [ k ] , 0 ) \mathcal F(X)\neq([k],0) F(X)=([k],0),那么 J V e r JVer JVer 输出 0 0 0 表示拒绝。
  3. 我们要求对于随机的 J G e n JGen JGen 输出,以极大概率 J V e r JVer JVer 对所有的多线性型都正确。

iO for N C 1 NC^1 NC1

Randomized Branching Programs

根据 Barrington’s theorem,可以使用 5-PBP 分支程序 表达在 N C 1 NC^1 NC1 中的布尔电路。GGH+13 在 Kilian 的多方安全计算的基础上,加入更多随机化技术得到了 N C 1 NC^1 NC1 上的不可区分混淆。

Kilian 的两方安全计算:Alice 和 Bob 需要计算 C ( x , y ) C(x,y) C(x,y),其中 ∣ x ∣ + ∣ y ∣ = l |x|+|y|=l x+y=l,令总的输入为 χ : = ( x ∥ y ) \chi:=(x\|y) χ:=(xy),步骤如下,

  1. 首先 Alice 将 C C C 转化为 5-PBP 程序 { ( i n p ( i ) , A i , 0 , A i , 1 ) } i = 1 n \{(inp(i),A_{i,0},A_{i,1})\}_{i=1}^n {(inp(i),Ai,0,Ai,1)}i=1n
  2. 然后 Alice 选择 n n n 个随机的可逆阵 { R i } i = 1 n \{R_i\}_{i=1}^n {Ri}i=1n,计算 A ˉ i , b = R i − 1 A i , b R i − 1 \bar A_{i,b}=R_{i-1}A_{i,b}R_i^{-1} Aˉi,b=Ri1Ai,bRi1,这里 i − 1 ( m o d n ) i-1 \pmod n i1(modn) 从而 R 0 R n − 1 = I R_0R_n^{-1}=I R0Rn1=I,我们将这个新的 5-PBP 叫做随机化分支程序(randomized branching program,RBP),Kalian 证明它可以完美隐藏(perfect hide)Alice 的输入 x x x 与矩阵 A i , χ i n p ( i ) A_{i,\chi_{inp(i)}} Ai,χinp(i) 之间的对应关系。
  3. Alice 将自己的输入 x x x 对应的矩阵 { A ˉ i , χ i n p ( i ) : i n p ( i ) ≤ ∣ x ∣ } \{\bar A_{i,\chi_{inp(i)}}:inp(i)\le |x|\} {Aˉi,χinp(i):inp(i)x},直接发送给 Bob
  4. Bob 通过 OT 协议,获取到输入 y y y 对应的矩阵 { A ˉ i , χ i n p ( i ) : i n p ( i ) > ∣ x ∣ } \{\bar A_{i,\chi_{inp(i)}}:inp(i) > |x|\} {Aˉi,χinp(i):inp(i)>x}
  5. Bob 执行 5-PBP 程序 P = ∏ i A ˉ i , χ i n p ( i ) P=\prod_i \bar A_{i,\chi_{inp(i)}} P=iAˉi,χinp(i),根据 P = ? I P\overset{?}{=}I P=?I 判断计算结果 C ( x , y ) = ? 0 C(x,y)\overset{?}{=}0 C(x,y)=?0

我们直接将上述协议中的 Alice 和 Bob 分别作为不可区分混淆的混淆器(obfuscator)和计算器( evaluator),令 C ( ⋅ , ⋅ ) C(\cdot,\cdot) C(,) 是通用电路(universal circuit),Alice 的输入 x x x 是待混淆电路的描述,Bob 输入 y y y 输出 C x ( y ) C_x(y) Cx(y)。与 Kalian 协议不同的是 Alice 直接将 y y y 对应位置的所有随机矩阵 { ( A ˉ i , 0 , A ˉ i , 1 ) : i n p ( i ) > ∣ x ∣ } \{(\bar A_{i,0},\bar A_{i,1}):inp(i) > |x|\} {(Aˉi,0,Aˉi,1):inp(i)>x} 都发送给 Bob,这使得 Bob 可以随意执行关于不同输入的多次计算。但是这将导致一些问题:

  • Partial Evaluation Attacks:敌手可以针对不同输入 ( x , y ) , ( x , y ′ ) (x,y),(x,y') (x,y),(x,y) 计算部分矩阵乘 ∏ i = j k A ˉ i , χ i n p ( i ) = R j − 1 ∏ i = j k A i , χ i n p ( i ) R k − 1 \prod_{i=j}^k \bar A_{i,\chi_{inp(i)}} = R_{j-1}\prod_{i=j}^k A_{i,\chi_{inp(i)}} R_k^{-1} i=jkAˉi,χinp(i)=Rj1i=jkAi,χinp(i)Rk1,由于 R j − 1 , R k R_{j-1},R_k Rj1,Rk 是固定的,因此比较两者就可以获得内部的关于 x x x 的矩阵 A i , χ i n p ( i ) A_{i,\chi_{inp(i)}} Ai,χinp(i) 的信息。
  • Mixed Input Attacks:由于每个 index 可能在 BP 中多次使用,如果敌手针对不同位置 i n p ( j ) = i n p ( k ) = i inp(j)=inp(k)=i inp(j)=inp(k)=i 的矩阵选用不同的取值 y i = 0 y_i=0 yi=0 y i = 1 y_i=1 yi=1,这也会泄露 x x x 的信息。
  • Other attacks:敌手可能不遵守矩阵的代数结构,或者在矩阵上计算非线性函数。

下面,我们依次解决这三个问题。

Multilinear Jigsaw Puzzles

为了解决 Other attacks,GGH+13 使用多线性拼图,约束敌手无法执行非线性运算。

  • J G e n JGen JGen 作为混淆器,
    1. 首先执行 I n s t G e n InstGen InstGen 获得一个多线性度(multi-linearity)为 n n n 的随机实例;
    2. 由 Jigsaw specifier 给出上一节中的 RBP 程序,它有 n n n 对明文矩阵;
    3. 执行 E n c o d e Encode Encode 对矩阵进行编码,将 A ˉ i , b \bar A_{i,b} Aˉi,b 的每个 entry 以级别 { i } \{i\} {i} 编码(受多线性型的约束,每个矩阵至多在乘法链中出现一次)。
  • J V e r JVer JVer 作为计算器,受限地计算矩阵乘积,并验证结果是否是单位阵。

Bookends Components

为了解决 Partial Evaluation Attacks,GGH+13 认为关键在于随机性不够多,于是通过扩张矩阵维度来加入更多随机性。

对于 5-PBP 中的矩阵 A i , b A_{i,b} Ai,b,将它扩充到更高维,
D i , b = [ $ ⋱ $ A i , b ] , D ˉ i , b = R i − 1 D i , b R i − 1 D_{i,b} = \begin{bmatrix} \$\\ &\ddots\\ &&\$\\ &&& A_{i,b} \end{bmatrix}, \bar D_{i,b} = R_{i-1} D_{i,b} R_i^{-1} Di,b= $$Ai,b ,Dˉi,b=Ri1Di,bRi1

其中 $$$ 表示随机数, D i , b D_{i,b} Di,b 2 m + 5 2m+5 2m+5 阶矩阵,它的左上角是 2 m 2m 2m 阶随机对角阵,这个对角阵关于每个 A i , b A_{i,b} Ai,b 是唯一的(不要复用)。随机化矩阵 R i R_i Ri 的维度也提升到了 2 m + 5 2m+5 2m+5 阶。

虽然没有理由认为 m = 1 m=1 m=1 不安全,GGH+13 还是选取了较大的 m = 2 n + 5 m=2n+5 m=2n+5 以抵御非预期的攻击。

现在,RBP 的计算结果为 ∏ i D ˉ i , χ i n p ( i ) = R 0 P R n − 1 \prod_i \bar D_{i,\chi_{inp(i)}} = R_0PR_n^{-1} iDˉi,χinp(i)=R0PRn1,其中 P = ∏ i D i , χ i n p ( i ) P = \prod_i D_{i,\chi_{inp(i)}} P=iDi,χinp(i) 的右下角的 5 5 5 阶子矩阵为原始 5-PBP 的计算结果 A = ∏ i A i , χ i n p ( i ) A=\prod_i A_{i,\chi_{inp(i)}} A=iAi,χinp(i)。为了提取它,GGH+13 设计了特殊的”书挡向量“(bookend),它们被分为 m + m + 5 m+m+5 m+m+5 三块,
s = ( 0 , ⋯   , 0 , $ , ⋯   , $ , − s ∗ − ) ,    t = ( $ , ⋯   , $ , 0 , ⋯   , 0 , − t ∗ − ) s=(0,\cdots,0,\$,\cdots,\$,-s^*-),\ \ t=(\$,\cdots,\$,0,\cdots,0,-t^*-) s=(0,,0,$,,$,s),  t=($,,$,0,,0,t)

s ˉ = s R 0 − 1 \bar s=sR_0^{-1} sˉ=sR01 以及 t ˉ = R n t T \bar t=R_nt^T tˉ=RntT 作为 RBP 的一部分。容易看出 r : = s ˉ ⋅ ∏ i D ˉ i , χ i n p ( i ) ⋅ t ˉ = s ∗ A t ∗ T r:=\bar s \cdot \prod_i \bar D_{i,\chi_{inp(i)}} \cdot \bar t = s^* A {t^*}^T r:=sˉiDˉi,χinp(i)tˉ=sAtT,当 A = I A=I A=I 时它为内积 r ∗ : = ⟨ s ∗ , t ∗ ⟩ r^*:=\lang s^*,t^* \rang r:=s,t,当 A A A 是随机置换阵等于这个值的概率约为 1 / p 1/p 1/p

因此,判断 C x ( y ) = 0 C_x(y)=0 Cx(y)=0 就是用 J V e r JVer JVer 判断 r ′ : = r − r ∗ r':=r-r^* r:=rr 是否为零,除了一个较小的错误率。

Multiplicative Bundling

为了解决 Mixed Input Attacks,可以类似 SPDZ 或者 ZKsnark,通过“牺牲”另一个相同的程序,来确保敌手的计算步骤的合法性。

GGH+13 使用乘法捆绑(multiplicative bundling),随机选择 { α i , b } \{\alpha_{i,b}\} {αi,b} 构造计算 C x ( y ) C_x(y) Cx(y)主程序 ( s , t , { D i , b ′ } ) (s,t,\{D_{i,b}'\}) (s,t,{Di,b})
D i , b = [ $ ⋱ $ α i , b A i , b ] , D ˉ i , b ′ = R i − 1 D i , b R i − 1 D_{i,b} = \begin{bmatrix} \$\\ &\ddots\\ &&\$\\ &&& \alpha_{i,b}A_{i,b} \end{bmatrix}, \bar D_{i,b}' = R_{i-1} D_{i,b} R_i^{-1} Di,b= $$αi,bAi,b ,Dˉi,b=Ri1Di,bRi1

然后随机选择 { α i , b ′ } \{\alpha_{i,b}'\} {αi,b} 构造计算 f ( x , y ) = 1 f(x,y)=1 f(x,y)=1虚拟程序 ( s ′ , t ′ , { D i , b ′ } ) (s',t',\{D_{i,b}'\}) (s,t,{Di,b})
D i , b ′ = [ $ ⋱ $ α i , b ′ I ] , D ˉ i , b ′ = R i − 1 ′ D i , b ′ R i ′ − 1 D_{i,b}' = \begin{bmatrix} \$\\ &\ddots\\ &&\$\\ &&& \alpha_{i,b}'I \end{bmatrix}, \bar D_{i,b}' = R_{i-1}' D_{i,b}' {R_i'}^{-1} Di,b= $$αi,bI ,Dˉi,b=Ri1Di,bRi1

为了保证当 A = I A=I A=I 时,主程序的结果 r : = s ∗ A t ∗ T ⋅ ∏ i α i , χ i n p ( i ) r:=s^*A{t^*}^T \cdot \prod_i \alpha_{i,\chi_{inp(i)}} r:=sAtTiαi,χinp(i) 与虚拟程序的结果 r ∗ : = s ∗ ′ I t ∗ ′ T ⋅ ∏ i α i , χ i n p ( i ) ′ r^*:=s^{*'}I{t^{*'}}^T \cdot \prod_i \alpha'_{i,\chi_{inp(i)}} r:=sItTiαi,χinp(i) 相同,这需要满足两个约束条件:首先是 ⟨ s ∗ , t ∗ ⟩ = ⟨ s ∗ ′ , t ∗ ′ ⟩ \lang s^*,t^* \rang = \lang s^{*'},t^{*'} \rang s,t=s,t,其次是
∏ i n p ( i ) = j α i , b = ∏ i n p ( i ) = j α i , b ′ , ∀ j ∈ [ l ] , b ∈ { 0 , 1 } \prod_{inp(i)=j}\alpha_{i,b} = \prod_{inp(i)=j}\alpha_{i,b}',\forall j \in [l],b \in \{0,1\} inp(i)=jαi,b=inp(i)=jαi,b,j[l],b{0,1}

如果敌手遵循了 PBP 的计算法则,那么 r ′ : = r − r ∗ = 0 r':=r-r^*=0 r:=rr=0 就正确反映了 C x ( y ) = 0 C_x(y)=0 Cx(y)=0 的计算结果。而如果敌手试图采取 mix-and-match 的攻击,那么主程序和虚拟程序的结果将是独立随机的,只有 1 / p 1/p 1/p 的概率使得 r ′ = 0 r'=0 r=0

iO Candidate for N C 1 NC^1 NC1

方便起见,我们定义 I j = { i : i n p ( i ) = j } I_j=\{i:inp(i)=j\} Ij={i:inp(i)=j}。另外,我们将 i n p ( ⋅ ) inp(\cdot) inp() 扩展到集合上,定义 i n p ( S ) = { i n p ( i ) : i ∈ S } inp(S)=\{inp(i):i \in S\} inp(S)={inp(i):iS},以及 I J = { I j : j ∈ J } I_J=\{I_j:j \in J\} IJ={Ij:jJ}

综合上述的技术,我们获得了如下的安全性更好的 RBP 程序:

在这里插入图片描述
在这里插入图片描述

我们使用多线性拼图来执行上述的长度为 n n n 的 RBP 程序:首先执行 J G e n . I n s t G e n JGen.InstGen JGen.InstGen 获得多线性度为 n + 2 n+2 n+2 的随机实例,然后执行拼图区分符 ( k , l , A ) (k,l,A) (k,l,A) 获得上述的 R N D p ( B P ) RND_p(BP) RNDp(BP) 及其编码索引,接着执行 J G e n . E n c o d e JGen.Encode JGen.Encode 将它编码为

在这里插入图片描述

给定一组输入 χ : = ( x ∥ y ) ∈ { 0 , 1 } l \chi:=(x\|y) \in \{0,1\}^l χ:=(xy){0,1}l,我们定义它的多线性型 F χ \mathcal F_\chi Fχ 为:
F χ ( R N D p ( B P ) ) : = s ˉ ⋅ ∏ i D ˉ i , χ i n p ( i ) ⋅ t ˉ − s ˉ ′ ⋅ ∏ i D ˉ i , χ i n p ( i ) ′ ⋅ t ˉ ′ ( m o d p ) \mathcal F_\chi(RND_p(BP)) := \bar s \cdot \prod_i \bar D_{i,\chi_{inp(i)}} \cdot \bar t - \bar s' \cdot \prod_i \bar D'_{i,\chi_{inp(i)}} \cdot \bar t' \pmod{p} Fχ(RNDp(BP)):=sˉiDˉi,χinp(i)tˉsˉiDˉi,χinp(i)tˉ(modp)

易知,当 C x ( y ) = 0 C_x(y)=0 Cx(y)=0 B P ( χ ) = I BP(\chi)=I BP(χ)=I,此时以 P r = 1 Pr=1 Pr=1 的概率 F χ ( R N D p ( B P ) ) = 0 \mathcal F_\chi(RND_p(BP))=0 Fχ(RNDp(BP))=0。而当 C x ( y ) ≠ 0 C_x(y)\neq0 Cx(y)=0 B P ( χ ) ≠ I BP(\chi)\neq I BP(χ)=I,此时以 P r = 1 − 1 / p Pr=1-1/p Pr=11/p 的概率 F χ ( R N D p ( B P ) ) ≠ 0 \mathcal F_\chi(RND_p(BP))\neq0 Fχ(RNDp(BP))=0

现在,我们定义部分赋值的 RBP 程序(Garbled Branching Programs)。定义赋值函数为 σ : J → { 0 , 1 } , J ⊆ [ l ] \sigma:J \to \{0,1\}, J \subseteq [l] σ:J{0,1},J[l],接着从 RBP 中移除 i ∈ I J , b ≠ σ ( i n p ( i ) ) i \in I_J,b \neq \sigma(inp(i)) iIJ,b=σ(inp(i)) 的那些矩阵 D i , b , D i , b ′ D_{i,b},D'_{i,b} Di,b,Di,b,程序如下:

在这里插入图片描述

其中 ( J , σ ) (J,\sigma) (J,σ) 是一组部分赋值,如果 B P BP BP 计算的原始函数为 F F F,那么现在它所计算的函数为 F ∣ σ F|_\sigma Fσ。对于不同的赋值 ( J , σ 0 ) , ( J , σ 1 ) (J,\sigma_0),(J,\sigma_1) (J,σ0),(J,σ1),如果 F ∣ σ 0 = F ∣ σ 1 F|_{\sigma_0} = F|_{\sigma_1} Fσ0=Fσ1,我们称两个部分赋值是关于 F F F 功能等价的(functionally equivalent)。

GGH+13 做了一个 Equivalent Program Indistinguishability 假设:任意的 n n n 长 BP 程序可计算函数 F : { 0 , 1 } l → { 0 , 1 } F:\{0,1\}^l \to \{0,1\} F:{0,1}l{0,1},以及任意部分赋值 ( J , σ 0 ) , ( J , σ 1 ) (J,\sigma_0),(J,\sigma_1) (J,σ0),(J,σ1),如果它们是功能等价的,那么它们的 garbled programs 是计算不可区分的,
G A R B L E ( R N D ‾ p ( B P ) , ( J , σ 0 ) ) ≡ c G A R B L E ( R N D ‾ p ( B P ) , ( J , σ 1 ) ) GARBLE(\overline{RND}_p(BP),(J,\sigma_0)) \overset{c}{\equiv} GARBLE(\overline{RND}_p(BP),(J,\sigma_1)) GARBLE(RNDp(BP),(J,σ0))cGARBLE(RNDp(BP),(J,σ1))

根据上述假设,就可以构造出电路类 N C 1 NC^1 NC1 上的不可区分混淆器 i O i\mathcal O iO

  1. 对于固定常数 c c c,任意安全参数 λ \lambda λ,电路簇 C λ \mathcal C_\lambda Cλ 包含所有的深度为 c log ⁡ λ c\log\lambda clogλ 大小至多为 λ \lambda λ 的电路,令 U λ U_\lambda Uλ 是通用电路, U λ ( C , m ) = C ( m ) , ∀ C ∈ C λ U_\lambda(C,m)=C(m),\forall C \in \mathcal C_\lambda Uλ(C,m)=C(m),CCλ,其中 C C C 是长度 l ( λ ) l(\lambda) l(λ) 的电路描述。

  2. 将通用电路 U λ U_\lambda Uλ 转化为 universal branching program U B P λ ( C , m ) UBP_\lambda(C,m) UBPλ(C,m),令混淆器的输入 C C C 对应的矩阵指标集为 I C I_C IC,电路 C C C 的一组赋值为 σ C \sigma_C σC,那么定义不可区分混淆器为
    i O ( λ , C ) : = G A R B L E ( R N D ‾ p ( U B P λ ) , ( I C , σ C ) ) i\mathcal O(\lambda,C) := GARBLE(\overline{RND}_p(UBP_\lambda),(I_C,\sigma_C)) iO(λ,C):=GARBLE(RNDp(UBPλ),(IC,σC))

  3. 对于不同的两个有相同功能的电路 U B P λ ( C 1 , ⋅ ) , U B P λ ( C 2 , ⋅ ) UBP_\lambda(C_1,\cdot), UBP_\lambda(C_2,\cdot) UBPλ(C1,),UBPλ(C2,),根据 Equivalent Program Indistinguishability 的假设, i O ( λ , C 1 ) ≡ c i O ( λ , C 2 ) i\mathcal O(\lambda,C_1) \overset{c}{\equiv} i\mathcal O(\lambda,C_2) iO(λ,C1)ciO(λ,C2),混淆后两者计算不可区分。

iO for Poly-sized Circuit

为了构造语言类 P / p o l y P/poly P/poly 上不可区分混淆,GGH+13 引入一个解密算法属于 N C 1 NC^1 NC1全同态加密,使得我们可以在密文下计算 P / p o l y P/poly P/poly 电路。另外,还需要一个 Perfect Soundness 的 NI-ZKP,特别地要求它有 low-depth proof,可以在 N C 1 NC^1 NC1 电路中被验证。

选取两个公私钥对 ( S K 1 , P K 1 ) , ( S K 2 , P K 2 ) (SK_1,PK_1), (SK_2,PK_2) (SK1,PK1),(SK2,PK2),将电路 C C C 加密两次,然后将其中之一的解密电路做混淆(不可区分是哪个秘钥的解密电路)。在解密之前,首先验证敌手在两个电路上都是正确计算的。协议如下:

在这里插入图片描述
在这里插入图片描述

接着 GGH+13 在这个的基础上,再加入 PKESSS-NIZK(Statistical Simulation-Soundness),构造了一个应用:函数加密(Functional Encryption)。思路是:在 i O i\mathcal O iO 下简单地解密密文,然后直接在明文上计算任意函数,将这个混淆程序 i O ( f ( D e c ( s k , c t ) ) ) i\mathcal O(f(Dec(sk,ct))) iO(f(Dec(sk,ct))) 作为函数私钥 S K f SK_f SKf。类似上面的构造,它也需要两个公私钥对,并使用 NIZK 验证密文的正确性,然后才提供解密谕言服务。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/425525.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

音视频八股文(2)--ffmpeg常见命令(1)

官方文档: https://www.ffmpeg.org/ffplay-all.html https://www.ffmpeg.org/ffmpeg-all.html 01-Windows FFMPEG命令行环境搭建 要在Windows系统上使用FFmpeg命令行,可以按照以下步骤搭建环境: 1.访问FFmpeg官方网站,下载已经…

《趣学数据结构》大纲

文章目录趣学数据结构一、数据结构入门(一)数据结构的基础知识1、基本概念(1)数据(2)数据元素(3)数据项(4)数据对象(5)数据结构2、逻辑…

利用在线Linux内核代码阅读分析网站linux kernel map分析CFS调度器代码调用链路

linux kernel map网址 https://makelinux.github.io/kernel/map/ 源码分析 点击Scheduler标签内的kernel/sched/ 左侧菜单,选择一个内核版本 Search Identifier搜索框输入要搜索的函数,回车执行搜索 结果列出了一处函数定义及两处引用 新窗口打开定义 …

14.Java面向对象----Object类

Object类 Java中Object 类是所有类的父类,也就是说 Java 的所有类都继承了 Object,子类可以使用 Object 的所有方法。 Object 类位于 java.lang 包中,编译时会自动导入,我们创建一个类时,如果没有明确继承一个父类&am…

【Spark】介绍 快速入门

目录 介绍 Spark and Hadoop Spark or Hadoop 核心模块 Spark Core Spark SQL Spark Streaming Spark MLlib Spark GraphX 快速上手 来源: 介绍 Spark 是一种基于内存的快速、通用、可扩展的大数据分析计算引擎。 Spark and Hadoop HadoopHadoop 是由 java…

Linux 网络I/O模型

一、Linux下面的I/O模型 Linux下面一共有五种可以使用的I/O模型,如下: 1)阻塞式I/O 2)非阻塞式I/O 3)I/O多路复用(select与epoll) 4)信号驱动式I/O 5)异步I/O 下面重点介…

知识图谱-实体抽取

命名实体识别(Named Entity Recognition,简称NER)是信息抽取、问答系统、句法分析、机器翻译等应用领域的重要基础工具,在自然语言处理技术走向实用化的过程中占有重要地位。一般来说,命名实体识别的任务就是识别出待处…

【产品设计】电商后台系统设计--库存

电商后台产品,涉及众多模块,而以商品、订单、库存为核心模块,模块间存在大量交互。库存决定商品是否可售卖,下单是否能成功。 电商中的库存管理是为了保证前台商品的正常售卖,库存的管理和仓库密不可分,而仓…

Midjourney详细注册和使用教程

来源:Midjoureny详细注册使用教程【探索ChatGPT】 Midjourney,用户只需要输入一段图片的文字描述,即可生成精美的绘画,相信了解Midjourey的小伙伴已经对它强大之处而赞叹! 下面是用通俗易懂的步骤教会大家如何注册和…

【严蔚敏版数据结构】你分得清顺序栈和链栈吗

【严蔚敏版数据结构】顺序栈和链栈的剖析和对比一、顺序栈和链栈的存储结构二、顺序栈和链栈的初始化三、顺序栈和链栈的判断是否栈空四、顺序栈和链栈的入栈五、顺序栈和链栈的弹栈六、顺序栈和链栈的取栈顶元素一、顺序栈和链栈的存储结构 顺序栈的存储结构图如下&#xff1…

Windows 10系统,JDK安装与环境变量配置

引言 随着互联网的日益发展, 越来越多的小伙伴加入了程序员这个行列, 也有很多小伙伴正计划学习编程, 学习Java 那么对于新手来说, 第一件事就是下载安装Java开发工具包, 也就是JDK, 今天我们就来一起详细的说说怎么操作 JDK版本描述 学习环境中, 我们通常使用较新版本的JD…

支持PHP运行环境和系统防火墙配置管理,1Panel开源面板v1.1.0发布

2023年4月17日,现代化、开源的Linux服务器运维管理面板1Panel正式发布v1.1.0版本。 在这一版本中,1Panel新增支持PHP运行环境、系统防火墙配置管理以及同步本地应用等功能,并带来了40多项功能更新和问题修复,感谢各位社区用户的反…

回归预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入单输出回归预测

回归预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入单输出回归预测 目录回归预测 | MATLAB实现GA-LSTM遗传算法优化长短期记忆网络的数据多输入单输出回归预测效果一览基本介绍程序设计参考资料效果一览 基本介绍 MATLAB实现GA-LSTM遗传算法优化长短期记忆网…

nvm管理node

开发的时候node版本不兼容问题频频出现,就得安装多个版本node,nvm管理起来就很方便。 首先nvm是一个nodejs的版本管理工具。为了解决node.js各种版本存在不兼容现象可以通过它安装和切换不同版本的node.js。 打开CMD,输入命令 nvm &#xf…

密码基础知识——密码的概念与作用

密码基础知识——密码的概念与作用密码的概念与作用密码的概念密码的重要作用密码的功能密码应用技术框架密码应用中的安全性问题密码应用安全性评估的基本原理信息安全管理标准PDCA 管理循环信息安全风险评估定义信息安全风险评估的目的和用途信息安全风险评估的基本要素密码的…

Centos 7 安装系列(10):ElasticSearch 8.6.2

ElasticSearch 部署一、系统环境二、解压安装2.1 解压压缩包2.2 修改配置文件2.3 添加操作用户2.4 启动2.5 开放端口2.6 开机自启动配置2.7 设置用户名密码认证三、总结一、系统环境 操作系统:Centos 7 已配置环境:空 二、解压安装 2.1 解压压缩包 上…

基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土地、土壤、农业、大气等领域的数据分析能力与项目科研水平

【原文链接】:基于ArcGIS、ENVI、InVEST、FRAGSTATS等多技术融合提升环境、生态、水文、土壤、农业、大气等领域的数据分析https://mp.weixin.qq.com/s?__bizMzU5NTkyMzcxNw&mid2247537467&idx4&sn10c4c12897282daf5320efae05caf3a4&chksmfe689551…

黑马2023JavaScript笔记1

一、js知识点 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-widt…

LoRA 指南之 LyCORIS 模型使用

LoRA 指南之 LyCORIS 模型使用 在C站看到这个模型&#xff0c;一眼就非常喜欢 在经历几番挣扎之后终于成功安装 接下来&#xff0c;我们一起开始安装使用吧&#xff01; 1、根据原作大佬的提示&#xff0c;需要安装两个插件 https://github.com/KohakuBlueleaf/a1111-sd-web…

蓝桥杯之我见

前言 关于蓝桥杯&#xff0c;应该有很多人不知道这是一个什么样的比赛。但是作为一名合格的程序员&#xff0c;就算之前没有参加过蓝桥杯的比赛&#xff0c;或者没听说过蓝桥杯&#xff0c;读完本篇文章再说不知道蓝桥杯&#xff0c;就有点不合适了吧&#xff1f;&#xff01;那…