回顾一下,最近几次的科普我们介绍了三方复制秘密共享的秘密分享方式,其主要应用为作为隐私保护机器学习的隐私保护框架,将数据作为秘密,按机器学习对数据的操作进行安全多方计算。
机器学习需要对数据进行定点数的加法、乘法、矩阵运算等,需要三方复制秘密共享也有对应的这些操作。因此之后我们介绍了在和下三方复制秘密共享的乘法。在进行定点数运算时会带来定点数精度扩大问题,于是我们接着介绍了两个定点数截断算法Truncate I和Truncate II。秘密在三方复制秘密共享中有\( Z_2 \)和\( Z_{2^k} \)两种表示方式,需要有互相转换的方式,我们接着介绍了将在\( Z_{2^k} \)下的子秘密\( [x]^A \)转换为在\( Z_2 \)下的子秘密\( [x]^B \)的 Bit Decomposition算法。
有两种子秘密的表示形式,那么当需要两个不同表示形式的秘密进行计算,如需要子秘密\( [x]^A \)和子秘密\( [y]^B \)进行计算\( [x]^A[y]^B=[xy]^A \)时又该怎么办呢?将\( [x]^A \)转换为\( [x]^B \),或者将\( [y]^B \)转换为\( [y]^A \)进行计算,是一种办法。本次科普将介绍更高效的跨秘密表示形式的计算方法。在介绍实现夸秘密表示形式的计算方法之前,先介绍一种半诚实的三方OT和计算\( a[b]^B=[ab]^A \)的方法。
三方OT
与双方 OT 相比,这个三方 OT 协议较为简单,是双方 OT 的一个变形,实际依旧只有两方进行OT,而让第三方作为 OT 协议的帮助者。假设参与者为Alice、Bob、Candy,Alice是秘密的发送方,Bob是秘密的接收方,而Candy则是帮助者,则整个三方 OT 协议可以被表示成\( ((m_0,m_1),𝑐,𝑐)→ (⊥,m_c,⊥) \),符号「⊥」表示空,即未接收到信息。
OT 协议的具体流程为:首先Alice和Candy共同产生两个𝑘比特的随机数\( w_0,w_1 \),Alice和Candy都知道\( w_0,w_1 \)的具体值,接着Alice计算\( m_0\oplus w_0,m_1\oplus w_1 \),并且将\( m_0\oplus w_0,m_1\oplus w_1 \)发送给Bob。Bob将自己的选择比特𝑐发送给Candy,Candy根据选择比特的值发送\( w_c \)给Bob,Bob利用\( w_c \)即可成功解密出\( m_c \)。
完整执行完成后,Bob只获得了\( m_c \),Candy只知道\( c,w_0,w_1 \)而不知道\( m_0,m_1 \),Alice只知道\( w_o,w_1,m_0,m_1 \),而不知道Bob的选择,三者都只掌握了部分信息。
跨表示形式的子秘密计算
接着介绍计算\( a[b]^B=[ab]^A \)的方式:最简单的例子是𝑎为\( Z_{2^k} \)上的明文,而𝑏为单比特。秘密𝑏以\( (b_1,b_2,b_3) \)的形式被三方分享,Alice掌握\( (b_1,b_2) \),Bob掌握 \( (b_2,b_3) \),Candy 掌握\( (b_3,b_1) \)。首先Alice(发送者)在环\( Z_{2^k} \)上产生一个随机数 𝑟,接着产生两个消息\( m_0=(0\oplus b_1\oplus b_2)a-r \)和\( m_1=(1\oplus b_1\oplus b_2)a-r \)。Bob(接收者)掌握有\( b_3 \),而Candy(帮助者)也掌握有\( b_3 \),因此三者可以进行上述的三方OT。Alice作为 OT 的发送方,在这次 OT 中的输入为\( m_i=(i\oplus b_1\oplus b_2)a-r,i\in \) { 0,1 } ;Bob作为接收方,在这次OT的输入为\( b_3 \);Candy则作为帮助者。注意\( b_1,b_2,b_3 \)都是单比特值,因此Bob通过OT可以获得\( m_{b_3}=(b_3\oplus b_1\oplus b_2)a-r=ba-r \)。注意我们目标是让参与的三方获得\( [ab]^A \)。
接着,Alice、Bob和Candy可以利用之前预先产生的\( (s_1,s_2,s_3) \)来计算\( [c]^A=[ab]^A=(s_1+r,ab-r+s_3,s_3) \)。注意Bob已经获得了𝑏𝑎−𝑟,也掌握了\( s_2,s_3 \),因此Bob可以本地计算\( c_2=ab-r+s_3 \),同样 Alice 也可本地直接计算\( c_1=s_1+r \),Candy本身就掌握有\( c_3=s_3 \)。
图:三方OT计算\( a[b]^B \)
回忆一下三方复制秘密共享的规则,要求Alice掌握\( c_1 \),Bob掌握\( c_2,c_3 \),Candy掌握\( c_3,c_1 \)。因此为了符合复制秘密共享的规则,Bob计算\( c_2=ab-r+s_3 \)之后,需要再将\( c_2 \)发送给Alice,同样Alice在计算完\( s_1+r \)后需要将它发送给Candy。或者也可以再进行一次三方OT,这次由 Bob来扮演发送方,Bob在OT协议的输入为\( m_i=(i\oplus b_2\oplus b_3)a-r+s_3 \), 𝑖∈{0,1},接收方由Alice扮演,Alice输入选择比特\( b_1 \)来获得消息\( c_2=ab-r+s_3 \)。这样就成功的完成了\( [c]^A=[ab]^A=(s_1+r,ab-r+s_3,s_3) \)的计算。
有了\( a[b]^B=[ab]^A \)的计算方式,我们就可以进一步计算\( [a]^A[b]^B=[ab]^A \)了。\( a[b]^B \)和\( [a]^A[b]^B \)的区别只是前者𝑎以明文的形式,而后者是以密文的形式,思考一下复制秘钥共享的性质,实际上\( [a]^A=a_1+a_2+a_3 \),因此\( [a]^A[b]^B=a_1[b]^B+(a_2+a_3)[b]^B \)。只需进行两次\( a[b]^B \)形式的乘法,再进行加法,即可成功计算出\( [a]^A[b]^B \)。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。