参考文献:
最知名的半诚实敌手下安全的 OT 协议是 Naor-Pinkas 协议(找不到免费论文 ╥﹏╥ )
Asharov 等人提出了一种新的基于 DDH 假设的 1-out-of-2 n × O T l n \times OT_l n×OTl 协议。在椭圆曲线群下,它比 Naor-Pinkas 协议的 RO 模型下的协议慢 1 1 1倍,比标准模型下的协议快 3 3 3倍;并行的 n n n越大,平局每次 OT 的代价就越小。
安全参数 κ \kappa κ,素数 q q q为 κ \kappa κ比特。算法如下:
IKNP 平均每次 OT 操作,仅仅需要 3 3 3次 Hash 运算(发送方 2 2 2次加密运算,接收方 1 1 1次解密运算),在计算复杂度上似乎已经是最优了。
但是,IKNP 协议需要构造 m × κ m \times \kappa m×κ的矩阵,其中 κ = 80 \kappa=80 κ=80很小,而 m m m取决于 MPC 电路的规模可以达到数十万。IKNP 需要在 OT 之前,预先确定 m m m的上界,然后在执行 OT 时,发送巨大的矩阵。因此,通信复杂度过高,尤其是互联网的发展速度远不及 CPU 的发展速度的今天,通信往往是制约 MPC 的瓶颈。
Asharov 等人的思路是:先用 OT 发送 κ × κ \kappa \times \kappa κ×κ的小矩阵 K 0 = [ k 1 0 ∣ ⋯ ∣ k κ 0 ] , K 1 = [ k 1 1 ∣ ⋯ ∣ k κ 1 ] K_0=[k_1^0|\cdots|k_\kappa^0],K_1=[k_1^1|\cdots|k_\kappa^1] K0=[k10∣⋯∣kκ0],K1=[k11∣⋯∣kκ1],然后将它们的每一列作为随机种子(seed)输入到 PRG 中,扩展为 m × κ m \times \kappa m×κ的大矩阵,将它们作为 OT 的密钥,来发送 ( t i , t i ⊕ r ) (t^i,t^i \oplus r) (ti,ti⊕r),
接收方持有 k i 0 , k i 1 k_i^0,k_i^1 ki0,ki1,然后利用 OT 发送
( v i 0 , v i 1 ) = ( G ( k i 0 ) ⊕ t i , G ( k i 1 ) ⊕ ( t i ⊕ r ) ) (v_i^0,v_i^1) = (G(k_i^0)\oplus t^i,G(k_i^1)\oplus (t^i \oplus r)) (vi0,vi1)=(G(ki0)⊕ti,G(ki1)⊕(ti⊕r))
发送方持有 s i s_i si对应的密钥随机性 k i s i k_i^{s_i} kisi,收到 v i s i v_i^{s_i} visi后,计算
q i = G ( k i s i ) ⊕ v i s i = { t i , s i = 0 t i ⊕ r , s i = 1 q^i = G(k_i^{s_i}) \oplus v_i^{s_i} = \left\{ \begin{aligned} t^i, && s_i=0\\ t^i \oplus r, && s_i=1\\ \end{aligned} \right. qi=G(kisi)⊕visi={ti,ti⊕r,si=0si=1
Asharov 等人发现,因为 t i t^i ti只是个随机数,如果不再随机选择 t i t^i ti,而是直接设置 t i = G ( k i 0 ) t^i = G(k_i^0) ti=G(ki0),那么 v i 0 = 0 v_i^0=0 vi0=0就不用发送(类似于减少 Yao’s GC 通信量的 GRR3 技术),接收方只需发送:
u i : = v i 1 = G ( k i 1 ) ⊕ ( t i ⊕ r ) = G ( k i 0 ) ⊕ G ( k i 1 ) ⊕ r u^i := v_i^1 = G(k_i^1)\oplus (t^i \oplus r) = G(k_i^0) \oplus G(k_i^1) \oplus r ui:=vi1=G(ki1)⊕(ti⊕r)=G(ki0)⊕G(ki1)⊕r
那么相较于 IKNP 通信量减半。发送方可以直接计算出
q i = { G ( k i 0 ) = t i , s i = 0 G ( k i 1 ) ⊕ u i = t i ⊕ r , s i = 1 q^i = \left\{ \begin{aligned} G(k_i^0) &= t^i, && s_i=0\\ G(k_i^1) \oplus u^i &= t^i \oplus r, && s_i=1\\ \end{aligned} \right. qi={G(ki0)G(ki1)⊕ui=ti,=ti⊕r,si=0si=1
然后发送方用秘密 s s s以及矩阵 Q ∈ { 0 , 1 } m × κ Q \in \{0,1\}^{m \times \kappa} Q∈{0,1}m×κ的每一行来加密消息对 ( x i 0 , x i 1 ) (x_i^0,x_i^1) (xi0,xi1),接收方不知道 s s s因此只能解密一个消息。另外因为 PRG 是可以连续扩张的, r r r也可以用 PRG 来连续生成,因此 q i q^i qi的长度可以任意扩展,以执行不固定的 m m m数量的 OT 协议。
由于密钥随机性 K 0 , K 1 K_0,K_1 K0,K1与 OT 要传输的消息 ( x i 0 , x i 1 ) (x_i^0,x_i^1) (xi0,xi1)完全独立,因此可以将传输 K 0 , K 1 K_0,K_1 K0,K1的 OT 协议作为 Initial OT Phase,之后的使用 K 0 , K 1 K_0,K_1 K0,K1作为密钥发送 ( x i 0 , x i 1 ) (x_i^0,x_i^1) (xi0,xi1)的过程作为 OT extension Phase,协议如下:
在构造矩阵 Q Q Q的过程中,G-OT 协议的通信量减半!
C-OT 专用于加速使用 Free XOR 技术的 Yao’ GC
输入线 w w w上的两个线标签为 k w 0 , k w 1 ⊕ R k_w^0,k_w^1 \oplus R kw0,kw1⊕R,其中 R R R是全局随机数。在使用 OT 协议时,两个密文为:
y j 0 = k w 0 ⊕ H ( q j ) , y j 1 = k w 1 ⊕ H ( q j ⊕ s ) y_j^0 = k_w^0 \oplus H(q_j),\,\, y_j^1 = k_w^1 \oplus H(q_j \oplus s) yj0=kw0⊕H(qj),yj1=kw1⊕H(qj⊕s)
Asharov 等人再次发现,因为 k w 0 k_w^0 kw0仅仅是个随机数,如果不再随机选择 k w 0 k_w^0 kw0,而是直接设置 k w 0 = H ( q j ) k_w^0 = H(q_j) kw0=H(qj),那么 y j 0 = 0 y_j^0=0 yj0=0就不用发送,发送方只需发送一个密文
y j : = y j 1 = k w 1 ⊕ H ( q j ⊕ s ) = R ⊕ H ( q j ) ⊕ H ( q j ⊕ s ) y_j := y_j^1 = k_w^1 \oplus H(q_j \oplus s) = R \oplus H(q_j) \oplus H(q_j \oplus s) yj:=yj1=kw1⊕H(qj⊕s)=R⊕H(qj)⊕H(qj⊕s)
通信量减半。接收方可以根据 r j r_j rj直接计算出:
k w r j = { H ( t j ) = k w 0 , r j = 0 y j ⊕ H ( t j ) = k w 1 , r j = 1 k_w^{r_j} = \left\{ \begin{aligned} H(t_j) &= k_w^0, && r_j=0\\ y_j \oplus H(t_j) &= k_w^1, && r_j=1\\ \end{aligned} \right. kwrj={H(tj)yj⊕H(tj)=kw0,=kw1,rj=0rj=1
注意,由于设置的线标签 k w 0 = H ( q j ) k_w^0 = H(q_j) kw0=H(qj)与 Q Q Q有关,因此需要先执行 OT,后生成混淆电路!
上述协议可以扩展到任意的 第一个消息是随机数 x j 0 x_j^0 xj0,第二个消息是第一个消息的函数值 x j 1 = f j ( x j 0 ) x_j^1 = f_j(x_j^0) xj1=fj(xj0) 的不经意传输上。对于每一行 1 ≤ j ≤ m 1 \le j \le m 1≤j≤m, f j f_j fj可以是任意的不同函数。
发送方设置
x j 0 = H ( q j ) , y j 0 = x j 0 ⊕ H ( q j ) = 0 x_j^0 = H(q_j),\, y_j^0 = x_j^0 \oplus H(q_j) = 0 xj0=H(qj),yj0=xj0⊕H(qj)=0
然后仅仅发送一个密文
y j : = y j 1 = x j 1 ⊕ H ( q j ⊕ s ) = f j ( x j 0 ) ⊕ H ( q j ⊕ s ) y_j := y_j^1 = x_j^1 \oplus H(q_j \oplus s) = f_j(x_j^0) \oplus H(q_j \oplus s) yj:=yj1=xj1⊕H(qj⊕s)=fj(xj0)⊕H(qj⊕s)
接收方获得了
x j r j = ( r j ⋅ y j ) ⊕ H ( t j ) x_j^{r_j} = (r_j \cdot y_j) \oplus H(t_j) xjrj=(rj⋅yj)⊕H(tj)
在根据矩阵 Q Q Q计算和发送密文的过程中,C-OT 协议的通信量减半!
R-OT 专用于加速使用 Beaver Triple 的 GMW
在构建乘法三元组时,需要利用 OT 发送随机比特对 b 0 , b 1 b_0,b_1 b0,b1,密文为
y j 0 = b 0 ⊕ H ( q j ) , y j 1 = b 1 ⊕ H ( q j ⊕ s ) y_j^0 = b_0 \oplus H(q_j),\,\, y_j^1 = b_1 \oplus H(q_j \oplus s) yj0=b0⊕H(qj),yj1=b1⊕H(qj⊕s)
Asharov 等人又双叒叕发现,因为两个消息是独立的随机数,如果不再随机选择,而是直接设置 b j 0 = H ( q j ) b_j^0 = H(q_j) bj0=H(qj)以及 b j 1 = H ( q j ⊕ s ) b_j^1 = H(q_j \oplus s) bj1=H(qj⊕s),那么 y j 0 = 0 , y j 1 = 0 y_j^0=0,y_j^1=0 yj0=0,yj1=0就都不用发送了!
发送者不必发送密文,而接收者直接计算
b j r j = H ( t j ) { H ( q j ) = b j 0 , r j = 0 H ( q j ⊕ s ) = b j 1 , r j = 1 b_j^{r_j} = H(t_j) \left\{ \begin{aligned} H(q_j) &= b_j^0, && r_j=0\\ H(q_j \oplus s) &= b_j^1, && r_j=1\\ \end{aligned} \right. bjrj=H(tj){H(qj)H(qj⊕s)=bj0,=bj1,rj=0rj=1
利用上述的 R-OT 协议,可以构建两方功能 f a b f_{ab} fab,双方都没有输入,一方获得 ( a , u ) (a,u) (a,u),另一方获得 ( b , v ) (b,v) (b,v),它们都是随机的布尔值,满足约束 a b = u ⊕ v ab=u \oplus v ab=u⊕v,协议如下:
然后利用两次 f a b f_{ab} fab(也就是两次 R-OT),可以计算 Beaver Triple ( a , b , c = a b ) ∈ { 0 , 1 } 3 (a,b,c=ab) \in \{0,1\}^3 (a,b,c=ab)∈{0,1}3,
令 a = a 0 ⊕ a 1 a=a_0 \oplus a_1 a=a0⊕a1, b = b 0 ⊕ b 1 b=b_0 \oplus b_1 b=b0⊕b1, c = c 0 ⊕ c 1 c=c_0 \oplus c_1 c=c0⊕c1,一方持有 0 0 0的那些 shares,另一方持有 1 1 1的那些 shares,需满足约束
c 0 ⊕ c 1 = ( a 0 ⊕ a 1 ) ( b 0 ⊕ b 1 ) = a 0 b 0 ⊕ a 0 b 1 ⊕ a 1 b 0 ⊕ a 1 b 1 c_0 \oplus c_1 = (a_0 \oplus a_1)(b_0 \oplus b_1) = a_0b_0 \oplus a_0b_1 \oplus a_1b_0 \oplus a_1b_1 c0⊕c1=(a0⊕a1)(b0⊕b1)=a0b0⊕a0b1⊕a1b0⊕a1b1
P 0 P_0 P0作为发送者, P 1 P_1 P1作为接收者,执行 f a b f_{ab} fab,使得 P 0 P_0 P0获得 ( a 0 , u 0 ) (a_0,u_0) (a0,u0), P 1 P_1 P1获得 ( b 1 , v 1 ) (b_1,v_1) (b1,v1),满足
a 0 b 1 = u 0 ⊕ v 1 a_0b_1 = u_0 \oplus v_1 a0b1=u0⊕v1
P 0 P_0 P0作为接收者, P 1 P_1 P1作为发送者,执行 f a b f_{ab} fab,使得 P 0 P_0 P0获得 ( b 0 , v 0 ) (b_0,v_0) (b0,v0), P 1 P_1 P1获得 ( a 1 , u 1 ) (a_1,u_1) (a1,u1),满足
a 1 b 0 = v 0 ⊕ u 1 a_1b_0 = v_0 \oplus u_1 a1b0=v0⊕u1
那么, P i P_i Pi设置
c i = a i b i ⊕ u i ⊕ v i c_i = a_ib_i \oplus u_i \oplus v_i ci=aibi⊕ui⊕vi
容易验证 c 0 ⊕ c 1 = ( a 0 ⊕ a 1 ) ( b 0 ⊕ b 1 ) c_0 \oplus c_1 = (a_0 \oplus a_1)(b_0 \oplus b_1) c0⊕c1=(a0⊕a1)(b0⊕b1),双方获得了随机的 Beaver Triple ( a , b , c ) (a,b,c) (a,b,c) 的 shares
在根据矩阵 Q Q Q计算和发送密文的过程中,R-OT 协议的通信量可以完全去除!
Asharov 等人对 IKNP 的通信量复杂度做了优化,