• 混合 MPC: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 _0^A + _1^A \equiv x \mod 2^l <x>0A+<x>1Axmod2l
    布尔电路使用的 SS 是:
    < x > 0 B ⊕ < x > 1 B = x _0^B \oplus _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 _0^Y = k_0,\, _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 _0^Y \oplus _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 _0^Y = k_0,\, _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 _0^Y[0] \oplus _1^Y[0] = x <x>0Y[0]<x>1Y[0]=x
    所以,转换方法就是:
    < x > i B = Y 2 B ( < x > i Y ) = < x > i Y [ 0 ] _i^B = Y2B(_i^Y) = _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 _0^B = r \in_R \{0,1\},\, _1^B = x \oplus r <x>0B=rR{0,1},<x>1B=xr
    它们满足
    < x > 0 B ⊕ < x > 1 B = x _0^B \oplus _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 _0^B=r <x>0B=r
    • P 1 P_1 P1是计算方,它持有 < x > 1 B _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 _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\{

    k0(r0)R,<x>1B=0k0(r1)R,<x>1B=1" role="presentation">k0(r0)R,<x>1B=0k0(r1)R,<x>1B=1
    \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 (_0^B \oplus _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 _1^Y = out = k_x <x>1Y=out=kx
    P 0 P_0 P0简单地设置 < x > 0 Y = k 0 _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 _0^A = r \in_R \{0,1\}^l,\, _1^A = x - r <x>0A=rR{0,1}l,<x>1A=xr

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

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

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

    A2B

    方案一

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

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

    可以复用其他的转换函数,
    < x > B = A 2 B ( < x > A ) = Y 2 B ∘ A 2 Y ( < x > A ) ^B = A2B(^A) = Y2B \circ A2Y(^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 _0^B \oplus _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 (_0^B \oplus _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

      s1i=2i<xi>0Bris0i=2i(1<xi>0B)ri" role="presentation">s1i=2i<xi>0Bris0i=2i(1<xi>0B)ri
      s1is0i=2i<xi>0Bri=2i(1<xi>0B)ri

    2. P 1 P_1 P1作为接收者,输入 < x i > 1 B _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\{

      2i(<xi>0B0)ri,<x>1B=02i(<xi>0B1)ri,<x>1B=1" role="presentation">2i(<xi>0B0)ri,<x>1B=02i(<xi>0B1)ri,<x>1B=1
      \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 _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 _1^A = \sum_{i=0}^{l-1} out_i = x - _0^A <x>1A=i=0l1outi=x<x>0A
      容易验证 < x > 0 A + < x > 1 A = x ∈ Z 2 l _0^A + _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 _1^A = X = x-r <x>1A=X=xr

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

    方案二

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

    效果

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

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

  • 相关阅读:
    springboot停车场车辆定位管理可视化分析系统的设计与实现毕业设计源码101702
    使用openssl工具生成CSR文件
    VUE build:gulp打包:测试、正式环境
    【教3妹学java】Java之happens-before是什么?
    Linux孤儿进程|僵尸进程
    PMP每日一练 | 考试不迷路-8.31(包含敏捷+多选)
    强化学习从基础到进阶-案例与实践[2]:马尔科夫决策、贝尔曼方程、动态规划、策略价值迭代
    vue前端使用echart径向树形图修改样式
    角色扮演?一款跨平台可移植开源游戏
    java基于微信小程序的游戏外包管理信息系统 uniapp 小程序
  • 原文地址:https://blog.csdn.net/weixin_44885334/article/details/127099346