混合 2PC:ABY 架构

参考文献:

  1. Demmler D, Schneider T, Zohner M. ABY-A framework for efficient mixed-protocol secure two-party computation[C]//NDSS. 2015.
  2. Kolesnikov V, Sadeghi A R, Schneider T. A systematic approach to practically efficient general two-party secure function evaluation protocols and their modular design[J]. Journal of Computer Security, 2013, 21(2): 283-315.
  3. 高效 OT 协议:https://blog.csdn.net/weixin_44885334/article/details/127084970

ABY架构

ABY 含义:Arithmetic(基于SS的算术电路), Boolean(基于SS的布尔电路), and Yao(姚的混淆电路)

算术电路使用的 SS 是:
< x > 0 A + < x > 1 A ≡ x m o d    2 l <x>_0^A + <x>_1^A \equiv x \mod 2^l <x>0A+<x>1Axmod2l
布尔电路使用的 SS 是:
< x > 0 B ⊕ < x > 1 B = x <x>_0^B \oplus <x>_1^B = x <x>0B<x>1B=x
ABY 将使用 Free XOR 技术的 Yao’s GC 的输入线标签,也视作是 shares,对于 x ∈ { 0 , 1 } x \in \{0,1\} x{0,1}
< x > 0 Y = k 0 ,   < x > 1 Y = k x = k 0 ⊕ x R <x>_0^Y = k_0,\, <x>_1^Y = k_x = k_0 \oplus xR <x>0Y=k0,<x>1Y=kx=k0xR
并且将 P&P 技术的选择比特 p 0 p_0 p0作为线标签 k 0 k_0 k0的第一比特。再固定 R R R的第一比特为 1 1 1,保证 k 0 , k 1 k_0,k_1 k0,k1的第一比特随机但不相同。它们满足
< x > 0 Y ⊕ < x > 1 Y = x R <x>_0^Y \oplus <x>_1^Y = xR <x>0Y<x>1Y=xR
对于 Yao’s GC 的输入比特的 shares,可以使用 C-OT 快速分享。另外,对于布尔电路和算术电路的 Beaver Triple,都可以使用 R-OT 批量获得。

ABY 框架结合三种 2PC 的优势,让 shares 在它们之间相互转换,从而提高 2PC 的效率。

在这里插入图片描述

转换

Y2B

对于秘密值 x ∈ { 0 , 1 } x \in \{0,1\} x{0,1},Yao’s GC 的 shares 为
< x > 0 Y = k 0 ,   < x > 1 Y = k x = k 0 ⊕ x R <x>_0^Y = k_0,\, <x>_1^Y = k_x = k_0 \oplus xR <x>0Y=k0,<x>1Y=kx=k0xR
其中 R [ 0 ] = 1 R[0]=1 R[0]=1,因此它们的选择比特满足:
< x > 0 Y [ 0 ] ⊕ < x > 1 Y [ 0 ] = x <x>_0^Y[0] \oplus <x>_1^Y[0] = x <x>0Y[0]<x>1Y[0]=x
所以,转换方法就是:
< x > i B = Y 2 B ( < x > i Y ) = < x > i Y [ 0 ] <x>_i^B = Y2B(<x>_i^Y) = <x>_i^Y[0] <x>iB=Y2B(<x>iY)=<x>iY[0]

这是 free 的,只需要一丁点的本地计算。

B2Y

对于秘密值 x ∈ { 0 , 1 } x \in \{0,1\} x{0,1},布尔电路的 shares 为
< x > 0 B = r ∈ R { 0 , 1 } ,   < x > 1 B = x ⊕ r <x>_0^B = r \in_R \{0,1\},\, <x>_1^B = x \oplus r <x>0B=rR{0,1},<x>1B=xr
它们满足
< x > 0 B ⊕ < x > 1 B = x <x>_0^B \oplus <x>_1^B = x <x>0B<x>1B=x

  • P 0 P_0 P0是 Yao’s GC 的生成者,它持有随机的线标签 k 0 k_0 k0和全局随机数 R R R,以及 < x > 0 B = r <x>_0^B=r <x>0B=r
  • P 1 P_1 P1是计算方,它持有 < x > 1 B <x>_1^B <x>1B

运行 OT 协议, P 0 P_0 P0输入 ( k 0 ⊕ r R ,   k 0 ⊕ ( 1 − r ) R ) (k_0 \oplus rR,\, k_0 \oplus (1-r)R) (k0rR,k0(1r)R) P 1 P_1 P1输入 < x > 1 B <x>_1^B <x>1B,并获得
o u t = { k 0 ⊕ ( r ⊕ 0 ) R , < x > 1 B = 0 k 0 ⊕ ( r ⊕ 1 ) R , < x > 1 B = 1 out = \left\{ \begin{aligned} k_0 \oplus (r \oplus 0)R, && <x>_1^B = 0\\ k_0 \oplus (r \oplus 1)R, && <x>_1^B = 1\\ \end{aligned} \right. out={k0(r0)R,k0(r1)R,<x>1B=0<x>1B=1

o u t = k 0 ⊕ ( < x > 0 B ⊕ < x > 1 B ) R = k x out = k_0 \oplus (<x>_0^B \oplus <x>_1^B)R = k_x out=k0(<x>0B<x>1B)R=kx
因此 P 1 P_1 P1获得了 Yao’s GC 的 share,
< x > 1 Y = o u t = k x <x>_1^Y = out = k_x <x>1Y=out=kx
P 0 P_0 P0简单地设置 < x > 0 Y = k 0 <x>_0^Y = k_0 <x>0Y=k0

A2Y

对于秘密值 x ∈ { 0 , 1 } l x \in \{0,1\}^l x{0,1}l,算术电路的 shares 为
< x > 0 A = r ∈ R { 0 , 1 } l ,   < x > 1 A = x − r <x>_0^A = r \in_R \{0,1\}^l,\, <x>_1^A = x - r <x>0A=rR{0,1}l,<x>1A=xr

构造布尔加法电路,其功能为
x = < x > 0 A + < x > 1 A x = <x>_0^A + <x>_1^A x=<x>0A+<x>1A
P 0 P_0 P0构建对应的混淆版本,

  1. 输入: P 0 P_0 P0输入 < x > 0 A <x>_0^A <x>0A l l l比特, P 1 P_1 P1输入 < x > 1 A <x>_1^A <x>1A l l l比特
  2. 输出:电路输出 x ∈ Z 2 l x \in \mathbb Z_{2^l} xZ2l l l l比特的混淆值 < x > Y <x>^Y <x>Y

那么,对于每个 1 ≤ i ≤ l 1 \le i \le l 1il P 0 P_0 P0持有 < x i > 0 Y = k 0 i <x_i>^Y_0 = k_0^i <xi>0Y=k0i P 1 P_1 P1持有 < x i > 1 Y = k x i <x_i>_1^Y = k_x^i <xi>1Y=kxi

A2B

方案一

类似 A2Y,构建布尔加法电路,功能是计算
x = < x > 0 A + < x > 1 A x = <x>_0^A + <x>_1^A x=<x>0A+<x>1A
使用基于 SS 的布尔电路,

  1. P 0 P_0 P0 < x > 0 A ∈ Z 2 l <x>_0^A \in \mathbb Z_{2^l} <x>0AZ2l的每一比特都共享出去, < < x > 0 A [ i ] > B <<x>_0^A[i]>^B <<x>0A[i]>B
  2. P 1 P_1 P1 < x > 1 A ∈ Z 2 l <x>_1^A \in \mathbb Z_{2^l} <x>1AZ2l的每一比特都共享出去, < < x > 1 A [ i ] > B <<x>_1^A[i]>^B <<x>1A[i]>B
  3. 然后计算出结果 < x > B <x>^B <x>B
方案二

可以复用其他的转换函数,
< x > B = A 2 B ( < x > A ) = Y 2 B ∘ A 2 Y ( < x > A ) <x>^B = A2B(<x>^A) = Y2B \circ A2Y(<x>^A) <x>B=A2B(<x>A)=Y2BA2Y(<x>A)
因为 Y2B 是 free 的,并且 A2Y 基于 Yao’s GC,它的计算效率远高于基于 SS 的布尔电路,所以方案二速度更快。

B2A

对于 l l l比特的秘密值 x ∈ { 0 , 1 } l x \in \{0,1\}^l x{0,1}l,布尔电路的 shares 满足
< x i > 0 B ⊕ < x i > 1 B = x i <x_i>_0^B \oplus <x_i>_1^B = x_i <xi>0B<xi>1B=xi

于是
x = ∑ i = 0 l − 1 2 i x i = ∑ i = 0 l − 1 2 i ⋅ ( < x i > 0 B ⊕ < x i > 1 B ) x = \sum_{i=0}^{l-1} 2^i x_i = \sum_{i=0}^{l-1} 2^i \cdot (<x_i>_0^B \oplus <x_i>_1^B) x=i=0l12ixi=i=0l12i(<xi>0B<xi>1B)
可以用 OT 协议完成转换:

  1. P 0 P_0 P0作为发送者,选择随机数 r i ∈ Z 2 l r_i \in \mathbb Z_{2^l} riZ2l,输入 ( s 0 i , s 1 i ) (s_0^i,s_1^i) (s0i,s1i)
    s 1 i = 2 i ⋅ < x i > 0 B − r i s 0 i = 2 i ⋅ ( 1 − < x i > 0 B ) − r i \begin{aligned} s_1^i &= 2^i \cdot <x_i>_0^B - r_i\\ s_0^i &= 2^i \cdot (1-<x_i>_0^B) - r_i \end{aligned} s1is0i=2i<xi>0Bri=2i(1<xi>0B)ri

  2. P 1 P_1 P1作为接收者,输入 < x i > 1 B <x_i>_1^B <xi>1B,获得
    o u t i = { 2 i ⋅ ( < x i > 0 B ⊕ 0 ) − r i , < x > 1 B = 0 2 i ⋅ ( < x i > 0 B ⊕ 1 ) − r i , < x > 1 B = 1 out_i = \left\{ \begin{aligned} 2^i \cdot (<x_i>_0^B \oplus 0) - r_i, && <x>_1^B = 0\\ 2^i \cdot (<x_i>_0^B \oplus 1) - r_i, && <x>_1^B = 1\\ \end{aligned} \right. outi={2i(<xi>0B0)ri,2i(<xi>0B1)ri,<x>1B=0<x>1B=1

    o u t i = 2 i ⋅ ( 0 B ⊕ 1 B ) − r i = 2 i x i − r i out_i = 2^i \cdot (_0^B \oplus _1^B) - r_i = 2^i x_i - r_i outi=2i(0B1B)ri=2ixiri

  3. P 0 P_0 P0设置
    < x > 0 A = ∑ i = 0 l − 1 r i <x>_0^A = \sum_{i=0}^{l-1} r_i <x>0A=i=0l1ri
    P 1 P_1 P1设置
    < x > 1 A = ∑ i = 0 l − 1 o u t i = x − < x > 0 A <x>_1^A = \sum_{i=0}^{l-1} out_i = x - <x>_0^A <x>1A=i=0l1outi=x<x>0A
    容易验证 < x > 0 A + < x > 1 A = x ∈ Z 2 l <x>_0^A + <x>_1^A = x \in \mathbb Z_{2^l} <x>0A+<x>1A=xZ2l

Y2A

方案一

对于 l l l比特的秘密值 x ∈ { 0 , 1 } l x \in \{0,1\}^l x{0,1}l,Yao’s GC 中的 P 1 P_1 P1作为计算方,持有它的混淆值 k x i i , ∀ 1 ≤ i ≤ l k_{x_i}^i,\forall 1 \le i \le l kxii,∀1il,而 P 0 P_0 P0作为生成方持有对应的 k 0 i k_0^i k0i以及 R R R

  1. P 0 P_0 P0选择一个随机掩码(random mask) r ∈ R Z 2 l r \in_R \mathbb Z_{2^l} rRZ2l

  2. P 0 P_0 P0根据 k 0 i k_0^i k0i以及 R R R,构造一个布尔减法电路的混淆版本,功能为
    X = x − r X = x-r X=xr
    电路发送给 P 1 P_1 P1,同时发送 r r r对应的 l + σ l+\sigma l+σ个混淆值

  3. P 1 P_1 P1已经持有了 x x x对应的混淆值 k x i k_x^i kxi,不必执行 OT 协议。在混淆电路上计算,设置 < x > 1 A = X = x − r <x>_1^A = X = x-r <x>1A=X=xr

  4. P 0 P_0 P0简单地设置 < x > 0 A = r <x>_0^A = r <x>0A=r

方案二

可以复用其他的转换函数,
< x > A = Y 2 A ( < x > Y ) = B 2 A ∘ Y 2 B ( < x > Y ) <x>^A = Y2A(<x>^Y) = B2A \circ Y2B(<x>^Y) <x>A=Y2A(<x>Y)=B2AY2B(<x>Y)
因为 Y2B 是 free 的,并且 B2A 主要使用 OT 协议,在计算和通信上的开销比构造和计算 Yao’s GC 小得多,所以方案二速度更快。

效果

预处理阶段(构造电路,执行 OT 协议):
在这里插入图片描述

在线阶段(电路运算):
在这里插入图片描述

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值