阅读论文(Foundation of Garbled Circuits)
文章目录
一、往期回顾
混淆电路论文学习笔记——part1
混淆电路论文学习笔记——part2
前面两部分我们主要介绍了混淆方案的一些基本的概念以及几个安全性概念之间的关系,这部分主要记录一下论文给出的满足隐私性的混淆方案一以及同时满足满足隐私性,不经意性,认证性的混淆方案二。
二、混淆方案一代码
1、电路混淆函数Gb
- G b ( f , x ) : Gb(f,x): Gb(f,x):
- ( n , m , q , A ′ , B ′ , G ) ← f (n,m,q,A',B',G)\leftarrow f (n,m,q,A′,B′,G)←f
- for i ∈ { 1 , 2 , ⋯ , n + q − m } i \in \{1,2,\cdots,n+q-m\} i∈{1,2,⋯,n+q−m} do t i ↞ { 0 , 1 } , X i 0 = { 0 , 1 } k − 1 t i , X i 1 = { 0 , 1 } k − 1 t i ‾ t_i \twoheadleftarrow \{0,1\},X_i ^0=\{0,1\}^{k-1}t_i,X_i^1=\{0,1\}^{k-1}\overline{t_i} ti↞{0,1},Xi0={0,1}k−1ti,Xi1={0,1}k−1ti
- for i ∈ { n + q − m + 1 , ⋯ , n + q } i \in\{n+q-m+1,\cdots,n+q\} i∈{n+q−m+1,⋯,n+q} do X i 0 = { 0 , 1 } k − 1 0 , X i 1 = { 0 , 1 } k − 1 1 X_i ^0=\{0,1\}^{k-1}0,X_i^1=\{0,1\}^{k-1}1 Xi0={0,1}k−10,Xi1={0,1}k−11
- for { g , i , j } ∈ { n + 1 , … , n + q } × { 0 , 1 } × { 0 , 1 } \{g,i,j\}\in\{n+1,\dots,n+q\}\times\{0,1\}\times\{0,1\} {g,i,j}∈{n+1,…,n+q}×{0,1}×{0,1} do
- \qquad a ← A ( g ) , b ← B ( g ) a\leftarrow A(g),b\leftarrow B(g) a←A(g),b←B(g)
- \qquad A ← X a i , a ← l s b ( a ) , B ← X b j , b ← l s b ( b ) , T ← g ∣ ∣ a ∣ ∣ b , P [ g , a , b ] ← E A , B T ( X g G g ( i , j ) ) A\leftarrow X_a^i,\mathrm{a}\leftarrow lsb(a),B\leftarrow X_b^j,\mathrm{b}\leftarrow lsb(b),T\leftarrow g||\mathrm{a}||\mathrm{b},P[g,\mathrm{a,b}]\leftarrow \mathbb{E}^T_{A,B}(X_g^{G_g(i,j)}) A←Xai,a←lsb(a),B←Xbj,b←lsb(b),T←g∣∣a∣∣b,P[g,a,b]←EA,BT(XgGg(i,j))
- F ← ( n , m , q , A ′ , B ′ , P ) F\leftarrow(n,m,q,A',B',P) F←(n,m,q,A′,B′,P)
- e ← ( X 1 0 , X 1 1 , ⋯ , X n 0 , X n 1 ) e \leftarrow(X_1^0,X_1^1,\cdots,X_n^0,X_n^1) e←(X10,X11,⋯,Xn0,Xn1)
- d = ε d = \varepsilon d=ε
- return ( F , e , d ) (F,e,d) (F,e,d)
代码解释:
代码中
↞
{
}
\twoheadleftarrow\{\}
↞{}表示从集合中随机选择一个元素对变量进行赋值操作
X
i
0
X_i^0
Xi0表示线路i与语义0对应的token。同理,
X
i
1
X_i^1
Xi1表示线路i与语义1对应的token,它们的最后一比特表示token类型。
代码中
l
s
b
(
a
)
lsb(a)
lsb(a)函数表示取二进制字符串
a
a
a的最后1 bit。即,获得
a
a
a token对应的类型。
代码中
E
A
,
B
T
(
)
\mathbb{E}^T_{A,B}()
EA,BT()表示双密钥加密,其中A,B为两个密钥,T为初始向量。
ε
\varepsilon
ε表示空,即NULL
Gb函数的功能:把
f
f
f电路具体展开成三元组
(
F
,
e
,
d
)
(F,e,d)
(F,e,d).
代码第三行和第四行把原来函数
f
f
f的输入对应成token形式。对应规则:若该线路不是输出线路,则token类型和语义的对应是随机的。否则就把、让类型和语义相同。
代码第五,六,七行把原来门电路功能通过新的函数实现,新的函数的输入是线路对应的token类型。
2、编码函数En
- En ( e , x ) (e,x) (e,x):
- ( X 1 0 , X 1 1 , ⋯ , X n 0 , X n 1 ) ← e (X_1^0,X_1^1,\cdots,X_n^0,X_n^1)\leftarrow e (X10,X11,⋯,Xn0,Xn1)←e
- x 1 , ⋯ , x n ← x x_1,\cdots,x_n \leftarrow x x1,⋯,xn←x
- X ← X 1 x 1 ⋯ X n x n X \leftarrow X_1^{x1}\cdots X_n^{x_n} X←X1x1⋯Xnxn
- return X
3、解码函数De
- De(d,y):
- Y 1 ⋯ Y n ← Y Y_1\cdots Y_n \leftarrow Y Y1⋯Yn←Y
- y ← y 1 ⋯ y n ← l s b ( Y 1 ) ⋯ l s b ( Y n ) y \leftarrow y_1\cdots y_n \leftarrow lsb(Y_1)\cdots lsb(Y_n) y←y1⋯yn←lsb(Y1)⋯lsb(Yn)
- return y
4、求值函数ev
- ev ( f , x ) (f,x) (f,x):
- ( n , m , q , A , B , G ) ← f (n,m,q,A,B,G)\leftarrow f (n,m,q,A,B,G)←f
- x 1 ⋯ x n ← x x_1\cdots x_n \leftarrow x x1⋯xn←x
- for g ∈ { n + 1 , ⋯ , n + q } g \in \{n+1,\cdots,n+q\} g∈{n+1,⋯,n+q}: then
- a ← A ( g ) , b ← B ( g ) , y g ← G ( x a , x b ) \qquad a \leftarrow A(g),b\leftarrow B(g),y_g \leftarrow G(x_a,x_b) a←A(g),b←B(g),yg←G(xa,xb)
- return y n + q − m + 1 ⋯ y n + q y_{n+q-m+1 \cdots y_{n+q}} yn+q−m+1⋯yn+q
5、求值函数Ev
- Ev ( F , X ) (F,X) (F,X)
- ( n , m , q , A ′ , B ′ , P ) ← F (n,m,q,A',B',P)\leftarrow F (n,m,q,A′,B′,P)←F
- X 1 ⋯ X n ← X X_1\cdots X_n\leftarrow X X1⋯Xn←X
- for g ∈ { n + 1 ⋯ n + q } g \in\{ n+1\cdots n+q\} g∈{n+1⋯n+q}
- a ← A ′ ( g ) , A ← X a , a ← l s b ( a ) \qquad a \leftarrow A'(g),A \leftarrow X_a, \mathrm{a} \leftarrow lsb(a) a←A′(g),A←Xa,a←lsb(a)
- b ← B ′ ( g ) , B ← X b , b ← l s b ( b ) \qquad b \leftarrow B'(g),B \leftarrow X_b, \mathrm{b} \leftarrow lsb(b) b←B′(g),B←Xb,b←lsb(b)
- T ← g ∣ ∣ a ∣ ∣ b , Y g ← D a , b T ( P [ g , a , b ] ) \qquad T \leftarrow g||\mathrm{a||b},Y_g \leftarrow \mathbb{D}^T_{\mathrm{a,b}}(P[g,\mathrm{a,b}]) T←g∣∣a∣∣b,Yg←Da,bT(P[g,a,b])
- return Y n + q − m + 1 ⋯ Y n + q Y_{n+q-m+1}\cdots Y_{n+q} Yn+q−m+1⋯Yn+q
上面五个函数就构成了混淆方案一。
结论:如果我们采用的双密钥加密函数是安全的,那么混淆方案一就是安全的(证明相对繁琐,因此这里就不进行给出)。
三、关于混淆方案一的讨论
混淆方式一只满足隐私性,而不满足不经意性和认证性
1、关于混淆方案一不满足不经意性的讨论
因为模拟不经意性相比于不可区分不经意性要要更加强一些,因此我们这里讨论模拟不经意性。
模拟不经意性游戏是输入
f
,
x
f,x
f,x,输出
F
,
X
F,X
F,X。由于我们方案中d为NULL,因此我们获得了X之后,可以通过F(X)直接算出Y,然后通过Y,我们可以直接得到y。由于在不经意性游戏中我们并不要求模拟器生成的F,X,计算出来最终的y和输入f,x计算出来的y一致。因此我们可以对比最终y和我们初始输入的f,x计算结果对比即可知道挑战比特b。
1、关于混淆方案一不满足认证性的讨论
由于方案一中 d d d为NULL,我们可以通过 Y Y Y计算出 y y y,因此我们只需要选择和 F ( X ) F(X) F(X)token类型不同的Y就可以轻松的破解认证性。
四、混淆方案二
我们通过上面讨论可以知道混淆方案一不满足不经意性和认证性的原因就是因为混淆方案一的d设置为NULL。因此要解决这个问题,我们自然而然就应该想到把混淆方案的d设置为和e一样的形式。这样我们就得到了混淆方案二。混淆方案二具体代码我们这里就不进行给出了。