【隐私计算笔谈】MPC系列专题(九):OT协议(二)

OT扩展协议

首先假设Alice是发送方,Bob是接收方,Bob的比特长的选择比特串为,\( _ \)表示选择比特串的第比特。Bob产生两个 × 的随机矩阵A和B:
 

图片
 

用\( ^,^ \)分别表示矩阵和的第列向量,用\( _,_ \)分别表示矩阵和的第行向量。矩阵和满足\( _⊕_=_.1^k \),即若\( _= 1 \),则\( _⊕_=1^k \);若\( _=0 \),则\( _ ⊕_=0^k \),其中\( 1^k \)表示比特长的1组成的比特串,\( 0^k \)表示比特长的0组成的比特串。
 

发送方Alice随机产生一个比特长的串。Alice和Bob之间利用2选1不经意传输协议,根据比特串的各个比特\( _1,…,_ \)的值,Bob向Alice发送不同的值。若\( _=0 \),则Bob发送\( ^ \);若\( _=1 \),则Bob发送\( ^ \)。
 

当Bob发送完后,Alice获得了一个×的矩阵,记为, 

图片

记\( ^ \)表示矩阵的第列向量,\( _ \)表示矩阵的第列向量。那么有结论:\( _=_\oplus[_.] \),即若\( _=0 \),则\( _=_\oplus[_.]=_ \);若\( _=1 \),则\( _=_\oplus[_.]=_\oplus \)。
 

假设有一个哈希函数,则Bob可以计算\( (_) \)和\( (_\oplus) \),对于每一个\( _ \),都等于\( _ \)或者\( _\oplus \)。Alice 分别使用\( (_) \)和\( (_\oplus) \)来加密秘密\( _0 \)和\( _1 \),得到\( _0=(_)\oplus_0,_1= (_\oplus)\oplus_1 \)。
 

加密之后Alice将\( _0 \)和\( _1 \)发送给Bob。由于\( _ \)的值为\( _ \)或\( _\oplus \),而\( _\oplus \)的值为\( _\oplus \)或\( _ \),根据\( _ \)的值而定,若\( _ \)为\( _ \)则\( _\oplus \)为\( _\oplus \);若\( _ \)为\( _\oplus \)则\( _\oplus \)为\( _ \),二者中必有一个是\( _ \)。
 

Bob只掌握\( _ \)而不知道\( _ \),Bob又掌握着\( _ \),因此对于Alice发送过来的\( (_)\oplus_0 \)和\( (_\oplus)\oplus_1 \),Bob可以本地计算\( (_) \)来解密\( (_)\oplus_0 \)或者\( (_\oplus)\oplus_1 \)中的一个,具体解密哪个取决于\( _ \)的值。矩阵C的每一列都可用来进行一次OT协议,因此可进行次比特的OT协议。 
 

假设Bob的选择比特串为=101,Bob产生两个3×3的随机矩阵A和B,且矩阵A和矩阵B符合\( _\oplus_=_.1^k \): 
 

图片

 
可以看到,\( _1\oplus_1= 1.1^k =[1 1 1]^T,_2\oplus_2=0.1^k=[0 0 0]^T,_3\oplus_3= 1.1^k =[1 1 1]^T \)。
 

图片

 
结合具体例子来看:发送方Alice随机产生一个=3比特长的选择比特串=[0 0 1],Alice和Bob间利用二选一的不经意传输协议,如之前介绍过的Naor-Pinkas协议,接收根据比特串的各个比特\( _1,_2,_3 \)的值,Bob向 Alice发送矩阵A和B的不同列。若\( _=0 \),则Bob发送\( ^ \);若\( _=1 \),则Bob发送\( ^ \) 。则Alice将收到\( ^1={[1 0 0]}^T, ^2={[1 0 0]}^T,^3={[1 1 1]}^T \)。
 

图片

 
将最后Alice收到的矩阵记为: 
 

图片

 
可以看到矩阵满足\( _=_\oplus[_.] \),如\( _1=_1\oplus[_.]=_1\oplus[1.]= [1 1 0]\oplus[0 0 1]=[1 1 1],_2= _2\oplus[_2.]=_2\oplus[0.]=_2=[0 0 1],_3=_3\oplus[_3.]=_3 \oplus = [0 1 0]\oplus [0 0 1]=[0 1 1] \)。可以看到矩阵的各行都满足关系式\( _=_ \oplus [_.] \)。
 

图片

 
Alice使用矩阵哈希函数H和矩阵C对秘密进行加密,Alice使用\( (_1) \)来加密Alice的秘密\( _0 \),使用\( (_1 \oplus ) \)来加密秘密\( _1 \),得到加密后的密文\( _0=(_1) \oplus _0,_1=(_1  \oplus ) \oplus _1 \),之后Alice将\( _0 \)和\( _1 \)发送给Bob。
 

图片

 
注意此时\( (_1)= ([1 1 1])=(_1 \oplus ),(_1 \oplus ) = (_1 \oplus \oplus )=(_1) \),Bob是不知道的,Bob只知道\( _1 \) ,当\( _1=1 \)时,由于\( (_1 \oplus )=(_1) \),Bob又掌握\( _1 \),因此Bob可以直接计算(),由此通过计算\( (_1 \oplus ) \oplus _1 \oplus (_1)=_1 \),可以解密出\( _1 \)。而Bob不知道,因此Bob无法计算\( (_1 \oplus ) \),也就无法计算出\( _2 \)。
 
Alice接着又使用\( (_2) \)来加密秘密\( _0′ \),使用\( (_2 \oplus ) \)来加密秘密\( _1′ \),得到加密后的密文\( _2=(_2) \oplus _0′, _3= (_2 \oplus ) \oplus _1′ \),之后Alice将\( _2 \)和\( _3 \)发送给Bob。
 
因为\( _2=0 \),因此\( (_2)=([0 0 1])=(_2 \oplus ) \)
\( (_2 \oplus )=(_2 \oplus \oplus )=(_2) \),Bob又掌握\( _2 \),因此 Bob可以直接计算\( (_2) \),由此通过计算\( (_2) \oplus _0′ \oplus (_2)=_0′ \),可以解密出\( _0 \)。而Bob不知道,因此 Bob无法计算\( (_2 \oplus ) \),也就无法计算出\( _2 \)。Bob能解密哪个取决于Bob的选择比特串的各比特值,正如上面的例子,\( _0=1 \)时Bob可解密\( _1 \);\( _1=0 \)时Bob可解密\( _0′ \),由此实现不经意传输。
 

图片

你可能感兴趣的:(区块链)