Oblivious Transfer: 不经意传输
OT是混淆电路(GC)等许多MPC方案的的基石,一种基础的安全多方计算协议。
来看一个例子:假设某旅行社拥有N个景点的旅游资料,小淘想去其中的A景点游玩,希望向旅行社购买相关资料做好出游功课。但是小淘非常在意自己的隐私,不希望向旅行社泄露自己的目的地是哪里。因此双方希望这笔交易能够满足以下隐私条件:
- 小淘不希望向旅行社泄露“我准备去A景点”这一信息;
- 旅行社只希望出售小淘出钱购买的那份资料,而不泄露小淘未购买的N-1份资料;
粗看起来这种隐私条件似乎是无法满足的:旅行社只要把景点A的资料给到小淘,就必然了解了“小淘正在关注A景点”这一信息;除非旅行社把所有N份资料都给出,但是这又违背了旅行社的利益;
但是神奇的OT可以让交易在这种“不可能的条件”下达成。简而言之,在OT协议中,旅行社把他拥有的N份资料使用某种双方协商同意的加密算法和参数进行加密,然后发送给小淘;小淘可以从密文中解密出A的资料,而无法解密出其他N-1份资料。
非正式的描述,以N=2为例,基于Diffie-Hellman密钥交换协议,其中S(Sender)=旅行社,R(Receiver)=小淘,S拥有两份资料$M_0, M_1$,R想取到$M_0$:
- S和R分别秘密生成随机数a和b;
- S将$A=g^a$发送给R,R将$B=g^b$发送给S;
- S计算$k_0 = Hash(B^a), k_1 = Hash((B/A)^a)$;
- S加密$M_0,M_1$, $C_0=E(k_0,M_0), C_1=E(k_1,M_1)$, 将密文$C_0,C_1$发送给R;
- 此时R拥有$b, A, C_0, C_1$,由于$A^b = B^a$,所以R可以计算出$k_0$,从而解密得到自己想要的$M_0 = D(k_0, C_0) $,而无法解密$M_1$.
如果R想要得到$M_1$,只需要在2中发送$B = A \cdot g^b$给S。
Reference
作者:阿里云云栖社区
链接:https://zhuanlan.zhihu.com/p/59108808