【隱私計算筆談】MPC系列專題(十三):位元分解

PlatON技術團隊發表於2023-02-13

位元分解

上一次科普介紹了位元比較(Bitwise Compare),位元比較可以實現多方下的比較,不過其要求比較的輸入是按位元分享的。回憶一下,在Shamir(t,n)秘密分享機制中所有被分享的秘密都是一個完整的位元串的形式,透過一個秘密多項式被分享成?個在域??上的子秘密。

圖片

 
那麼要想在Shamir(t,n)秘密分享機制中使用bitwise compare來實現多方比較,就需要將在域??上的子秘密以位元形式重新分享,將其記為\( [?]_?→[?]_B \),稱為位元分解(Bit Decomposition)。
 
如果已經有了\( [?]_B \),將\( [?]_B \)轉換成\( [?]_? \)較為簡單,因為\( [?]_B={[?_0]_B,…[?_{l-1}]_B} \),分別表示?從高位數起按位元分享的第?位元。由於

\( a=a_{0} \cdots a_{l-1}=\sum{_{i=0}^{l-1}} 2^{l-1-i} \cdot a_{i} \)
 
回憶一下Shamir(t, n)秘密共享機制的性質,所有對應的子秘密相加,等於主秘密相加;所有子秘密乘上同一個常數,等於主秘密乘上該常數。因此將\( [?]_B→[?]_? \)只需計算\( [?]_p=\sum{_{i=0}^{l-1}} 2^{l-1-i} \cdot [?]_{i} \)。 
 

圖片

圖:Bit Decomposition
 
位元分解(Bit Decomposition)\( [?]_?→[?]_B \)的主要步驟為: 
 
1.所有參與者共同產生一個隨機數\( [?]_B \)(上次科普介紹過如何共同產生隨機數),並計算對應的\( [?]_? \)。
 
2.每個參與者都計算\( [?]_?=[?]_?−[?]_? \),並將\( [?]_? \)進行公開。因此每個參與者都能獲得?=?−? ??? ?。
 
3.由於每個參與者都知道明文的?,因此每個參與者都可計算 \( [?]_B \),之後 計算\( [?]_B=[?]_B+[?]_B= {[?_0]_?,…,[?_?]_?} \)。(注意這裡用的加法是Bit-Add,\( [?=?+?]_B \),並不是直接按位元相加,同理下面用到的類似\( [\alpha]_B=[\beta]_B+[\gamma]_B \)形式的實際都為\( [\alpha=\beta+\gamma]_B \),因為:
 
image.png
 
若此時對\( [?]_B \)進行重構,獲得的?=?+??,?∈ {0,1} ,因此\( [?]_B \)的值其實是\( [?]_B=[?+??]_B \)。現在需要想辦法消去??。?的值可以使用上次科普介紹的位元比較(Bitwise Compare)協議,透過比較\( [?]_B \)和\( [p]_B \)得到\( [q]_B \),若?<?則?=0,反之則?=1。
 
4.考慮g=(2?−??) ??? 2?,將它的按位元分享記為\( [g]_{B}={[g_{l-1}]_{p}, \ldots,[g_{0}]_{p}} \)。將\( 2^?−? \)的二進位制表示記為\( ?_0⋯?_{?-1} \),則
 

圖片

 
若將?和\( 2^?−? \)相乘後模上\( 2^? \),可得到\( (2^?−?)? ??? 2^?=(2^??−??) ??? 2^?=(2^?−??) ??? 2^?=g \)。因此可以透過\( [g_i]_p=f_i[q]_p \)來計算\( [g]_B \)。 
 
5.現在有了\( [g]_B=[(2^l-qp) mod 2^l]_B \)和\( [?]_B=[?+??]_B \),可以透過將二者相加,獲得\( [h]_B=[d]_B+[g]_B=[a+q2^l]_B={{[h_0]_B,...,[h_l]_B}} \)。注意,?是?+1位的,而ℎ是?位,二者相加後得到的最高位為\( [q2^l]_B \),因此只要將最高位丟棄,那麼留下的就是\( [a]_B={[h_1]_B,...,[h_l]_B} \)。有了位元分解之後,就可將\( [a]_p \)轉換為\( [a]_B \),在透過上次科普介紹的Bitwise Compare(Less-Than)來進行多方比較。
 

圖片

 

相關文章