参考资料:
- Joe Kilian. Founding cryptography on oblivious transfer. In Janos Simon, editor, STOC, pages 20–31. ACM, 1988.
- 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.
- 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.
- 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.
- 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.
- 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.
- 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.
- 什么是iO,基于多线性配对的iO:多线性拼图,从MBP开始构建多线性拼图
- 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),如果它满足
-
功能性保持(Functionality Preserving):对于任意的 λ ∈ N \lambda \in \mathbb N λ∈N,任意电路 C ∈ C λ C \in \mathcal C_\lambda C∈Cλ,有
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):C′←iO(λ,C)]=1 -
不可区分性(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,C1∈Cλ,如果 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) -
有效性(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 n≥3 的多线性映射如何实现安全性是个问题;目前已知双线性映射是安全的。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×⋯×Gk→GT(g1x1,g2x2,⋯,gkxk)→gT∏ixi
易知 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)=gT∏ixi+∏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)wi⋅∏jgTwj 的可通过群运算和多线性映射表示的任意组合。
多线性拼图猜谜,它是一个 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,l∈Z+,而 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 ai∈Zp 是明文, 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,l∈Z+, Π \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)→(S1∪S2,a1⋅a2)
- 忽略门(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),
- 随机实例生成器 ( 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
- 随机编码算法 ( 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
- ( 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,
- 0 / 1 ← J V e r ( p u z z l e , F ) 0/1 \leftarrow JVer(puzzle,\mathcal F) 0/1←JVer(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)
- 正确性:如果满足 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 表示拒绝。
- 我们要求对于随机的 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) χ:=(x∥y),步骤如下,
- 首先 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
- 然后 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=Ri−1Ai,bRi−1,这里 i − 1 ( m o d n ) i-1 \pmod n i−1(modn) 从而 R 0 R n − 1 = I R_0R_n^{-1}=I R0Rn−1=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) 之间的对应关系。
- 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
- 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∣}
- 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)=Rj−1∏i=jkAi,χinp(i)Rk−1,由于 R j − 1 , R k R_{j-1},R_k Rj−1,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 作为混淆器,
- 首先执行 I n s t G e n InstGen InstGen 获得一个多线性度(multi-linearity)为 n n n 的随机实例;
- 由 Jigsaw specifier 给出上一节中的 RBP 程序,它有 n n n 对明文矩阵;
- 执行 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=Ri−1Di,bRi−1
其中 $$$ 表示随机数, 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)=R0PRn−1,其中
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ˉ=sR0−1 以及 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ˉ=s∗At∗T,当 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′:=r−r∗ 是否为零,除了一个较小的错误率。
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′=Ri−1Di,bRi−1
然后随机选择
{
α
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,b′I
,Dˉi,b′=Ri−1′Di,b′Ri′−1
为了保证当
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:=s∗At∗T⋅∏iα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∗:=s∗′It∗′T⋅∏iα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′:=r−r∗=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):i∈S},以及 I J = { I j : j ∈ J } I_J=\{I_j:j \in J\} IJ={Ij:j∈J}。
综合上述的技术,我们获得了如下的安全性更好的 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
χ:=(x∥y)∈{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ˉ⋅i∏Dˉi,χinp(i)⋅tˉ−sˉ′⋅i∏Dˉ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=1−1/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)) i∈IJ,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:
-
对于固定常数 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),∀C∈Cλ,其中 C C C 是长度 l ( λ ) l(\lambda) l(λ) 的电路描述。
-
将通用电路 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)) -
对于不同的两个有相同功能的电路 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 在这个的基础上,再加入 PKE 和 SSS-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 验证密文的正确性,然后才提供解密谕言服务。