比特比較

學習&&轉載文章:

  • 通過共享隨機數來實現比特分享,再通過比特分享來實現比特串比較
  • 利用比特分享的方式,可以對\(𝑙\)比特的一個數按比特進行多方分享,之後可以據此實現多方比較多方比較則可以用來構造安全多方計算的基礎模塊,無論是隱私保護的機器學習還是隱私保護的DNA比較等,都需要用到多方比較模塊。

image-20230225105838890

安全模型

安全多方計算的安全顯然是在有攻擊者情況下的安全,在不同情形下,實現安全的難度也不同,最極端的例子是一個安全多方計算協議的所有參與者都是惡意參與者,那麼這個協議的安全性就很難保證了。

要實現安全,首先應該針對不同的情況建立不同的模型,而後針對這些模型進行研究。

首先假設有攻擊者(Adversary,攻擊者可以通過各種手段收買或者控制(Corrupt部分參與者,而參與者一旦被收買或者控制,該參與者的所有通信歷史信息和本地信息都會被攻擊者掌握。

攻擊者:

  • 攻擊者可以實際理解成黑客,他通過黑客手段入侵到了參與者的計算機中,取得了參與者計算機的控制權,因此可以掌握所有該參與者掌握的信息;
  • 攻擊者也可以理解成競爭公司的人,通過金錢來賄賂參與者,以此取得信息。
图片

那麼顯然,攻擊者能夠最大收買的參與者人數,很大程度上影響了協議是否安全。

(t,n)門限攻擊者結構是指參與者總數是\(n\),攻擊者最多能夠收買\(t\)個參與者。對於攻擊者結構,經常會說是\(Q^2,Q^3\)

  • \(Q^2\)的攻擊者結構指攻擊者收買的參與者的人數小於參與者總人數的 \(1/2\),即\(𝑡 < 1/2\)
  • \(Q^3\)的攻擊者結構指攻擊者收買的參與者的人數小於參與者總人數的\(1/3\),即\(𝑡 < 1/3\)

攻擊者模型分爲半誠實攻擊者模型惡意攻擊者模型

  • 在半誠實攻擊者模型下,被攻擊者收買的參與者遵守協議,不會在協議執行中途退出,也會誠實地發送自己的計算結果,不會篡改協議計算結果,但是被收買的參與者的所有信息,包括歷史通訊信息、計算結果等都會被攻擊者得知
  • 在惡意攻擊者模型下,被攻擊者收買的參與者不會再誠實地遵守協議,可能會篡改協議計算結果,其發送給其他參與者的信息有可能是虛假和僞造的

攻擊者的能力還可以根據其計算能力進行劃分:

  • 計算意義下安全的模型中,攻擊者的計算能力是概率多項式時間的,意味着攻擊者無法解決常見的困難問題,即使計算出來,所花費的時間也已經超過了信息的有效期,獲得的信息已經是過時的信息。
  • 另一種模型爲信息論意義下安全的模型,在這種模型下,攻擊者的計算能力是無限的。

Shamir祕密分享

設$ t $和 \(n\) 爲兩個正整數,且 \(t≤n\)\(n\)個需要共享祕密的參與者集合爲\(𝑃 =\left \{P_1,...,P_n \right \}\)

原理介紹

一個\((t,n)\)門限祕密共享體制是指:假設\(\left \{P_1,...,P_n \right \}\)要共享同一個祕密\(s\), 將\(s\)稱爲主祕密,有一個祕密管理中心\(𝑃_0\)來負責對\(s\)進行管理和分配,祕密管理中心\(𝑃_0\)掌握有祕密分配算法和祕密重構算法,這兩個算法均滿足重構要求和安全性要求。

  • 祕密分配

祕密管理中心\(𝑃_0\)首先通過將主祕密\(s\)輸入祕密分配算法,生成\(n\)個值,分別爲\(𝑠_1,… ,𝑠_𝑛\),稱\(𝑠_1,… ,𝑠_𝑛\)爲子祕密。然後祕密管理中心\(𝑃_0\)分別將祕密分配算法產生的子祕密\(𝑠_1,… ,𝑠_𝑛\)通過\(𝑃_0\)\(𝑃_𝑖\)之間的安全通信信道祕密地傳送給參與者\(𝑃_𝑖\),參與者\(𝑃_𝑖\)不得向任何人泄露自己所收到的子祕密\(𝑠_𝑖\)

图片
  • 祕密重構

門限值\(t\)指的是任意大於或等於\(t\)個參與者\(𝑃_𝑖\),將各自掌握的子祕密\(𝑠_𝑖\)進行共享,任意的一個參與者\(𝑃_𝑖\)在獲得其餘\(𝑡−1\)個參與者所掌握的子祕密後,都可獨立地通過祕密重構算法恢復出主祕密\(s\)。而即使有任意的\(𝑛−𝑡個\)參與者丟失了各自所掌握的子祕密,剩下的$ t \(個參與者依舊可以通過將各自掌握的子祕密與其他參與者共享,再使用祕密重構算法來重構出主祕密\)s$。

图片
  • 安全性要求是指任意攻擊者通過收買等手段獲取了少於$ t\(個的子祕密,或者任意少於\) t$ 個參與者串通都無法恢復出主祕密$ s\(,也無法得到主祕密\) s $的信息。

方案介紹

Shamir於1979年,基於多項式插值算法設計了\(Shamir(t,n)\)門限祕密共享體制,它的祕密分配算法如下:

\(𝑃 =\left \{P_1,...,P_n \right \}\)是參與者集合,\(P\)共享主祕密\(𝑠,𝑠\in F𝑞\),祕密管理中心\(𝑃_0\)按如下所述的步驟對主祕密\(𝑠\)進行分配,(爲了可讀性起見,以下公式均略去了模\(q\)操作):

  • 祕密分享:

    • 參與者\(𝑃_0\)祕密的在有限域\(F_q\)中隨機選取\(𝑡−1\)個元素,記爲\(a_1,...,a_{t-1}\),並取以\(𝑥\)爲變元的多項式\(f(x)=a_{t-1} x^{t-1}+\cdots+a_{1} x^{1}+s=s+\sum_{i=1}^{t-1} a_{i} x^{i}\)

    • 對於\(1≤𝑖≤ 𝑛\)\(𝑃_0\)祕密計算\(𝑦_𝑖=𝑓(𝑖)\)

    • 對於\(1≤𝑖≤𝑛\)\(𝑃_0\)通過安全信道祕密地將\((𝑖,𝑦_𝑖)\)分配給\(𝑃𝑖\)

圖片

  • 祕密重構:

(1)\(Shamir(t,n)\)門限共享體制的祕密重構可以使用通俗的解方程法,即\(t\)個方程可以確定\(t\)個未知數,而這\(t\)個未知數即爲包括主祕密\(𝑠\)在內的多項式\(𝑓(𝑥)\)的各項係數,如參與者\(𝑃_1,… ,𝑃_𝑡\)掌握了子祕密\(𝑓(1),…,𝑓(𝑡)\),解方程:

\(\begin{array}{c} a_{t-1} 1^{t-1}+\cdots+a_{1} 1^{1}+s=f(1) \\ a_{t-1} 2^{t-1}+\cdots+a_{1} 2^{1}+s=f(2) \\ \vdots \\ a_{t-1} n^{t-1}+\cdots+a_{1} n^{1}+s=f(n) \end{array}\)

即可求解出係數\(a_{t-1},...,a_1,s\)

(2)另一種方式是使用多項式插值法進行重構主祕密,假設這$ t \(個子祕鑰分別爲\)(𝑥_𝑖 ,𝑦_𝑖)$ ,其中\(𝑦_𝑖=𝑓(𝑥_𝑖),𝑖=1,…, 𝑡\)\(𝑖 ≠ 𝑗\) 時$ 𝑥_𝑖 ≠ 𝑥_𝑗$。

參與者\(𝑃_1,… ,𝑃_𝑡\)共同計算\(\begin{array}{c} h(x)=y_{1} \frac{\left(x-x_{2}\right)\left(x-x_{3}\right) \ldots\left(x-x_{t}\right)}{\left(x_{1}-x_{2}\right)\left(x_{1}-x_{3}\right) \ldots\left(x_{1}-x_{t}\right)}+y_{2} \frac{\left(x-x_{1}\right)\left(x-x_{3}\right) \ldots\left(x-x_{t}\right)}{\left(x_{2}-x_{1}\right)\left(x_{2}-x_{3}\right) \ldots\left(x_{2}-x_{t}\right)}+\cdots+ \\ y_{t} \frac{\left(x-x_{1}\right)\left(x-x_{3}\right) \ldots\left(x-x_{t-1}\right)}{\left(x_{t}-x_{1}\right)\left(x_{t}-x_{2}\right) \ldots\left(x_{t}-x_{t-1}\right)} \end{array}\)

顯然,\(ℎ(𝑥)\)是一個\(𝑡−1\)次的多項式,且因爲\(𝑖≠𝑗\)\(𝑥_𝑖≠𝑥_𝑗\),每個加式的分母均不爲零,因此對於\(𝑖=1,…,𝑡,𝑦_𝑖=ℎ(𝑥_𝑖)=𝑓(𝑥_𝑖)\) ,又根據多項式的性質,如果存在兩個最高次均爲\(𝑡−1\)次的多項式,這兩個多項式在\(𝑡\)個互不相同的點所取的值均相同,那麼這兩個多項式相同,即\(ℎ(𝑥)=𝑓(𝑥)\),進而參與者\(𝑃_𝑖\)計算\(ℎ(0)=𝑓(0)=𝑠\),即可恢復主祕密\(𝑠\)

定理:對於有限域\(F_q\)\(n-1\)次的多項式,設爲\(𝑓(𝑥)\),存在有限域\(F_q\)上的\(n\)個元,記爲\(𝜆_1,…,𝜆_𝑛\),使得:$f(0)= {\textstyle \sum_{i=1}^{n}\lambda _if(i)} \(,稱\)(𝜆_1,…,𝜆_𝑛)$爲重組向量(recombinationn vector)

證明:

\(f(x)= {\textstyle \sum_{i=0}^{n-1}a_ix^i}\),則\(f(0)=a_0\),且\(a_0\)可以被表示爲:\(a_0=(1,0,0,...,0)(a_0,a_1,...,a_{n-1})^T\)

考慮一個\(n\)階矩陣:\(M=\left(\begin{array}{cccc} 1 & 1 & \cdots & 1 \\ 1 & 2^{1} & \cdots & 2^{n-1} \\ \vdots & \vdots & \vdots & \vdots \\ 1 & n^{1} & \cdots & n^{n-1} \end{array}\right)\),由於矩陣\(M\)是滿秩矩陣,因此存在\(𝜆_1,…,𝜆_𝑛\in F_q\),使得\((𝜆_1,…,𝜆_𝑛)M=(1,0,...,0)\)

因此有:\(f(0)=a_0=(𝜆_1,…,𝜆_𝑛)M(a_0,a_1,...,a_{n-1})^T=(𝜆_1,…,𝜆_𝑛)(f(1),f(2),...,f(n))^T= {\textstyle \sum_{i=1}^{n}\lambda _if(i)}\)

對於矩陣\(M=\left(\begin{array}{cccc} 1 & 1 & \cdots & 1 \\ 1 & 2^{1} & \cdots & 2^{n-1} \\ \vdots & \vdots & \vdots & \vdots \\ 1 & n^{1} & \cdots & n^{n-1} \end{array}\right)\),設祕密分配多項式爲\(𝑓(𝑥)\),參與者\(𝑃_𝑖\)掌握的子祕密爲\(𝑓(𝑖)\),因爲存在重組向量\((𝜆_1,…,𝜆_𝑛)\),因此有:\(f(0)=s=\left(\lambda_{1}, \ldots, \lambda_{n}\right) M\left(a_{0}, a_{1}, \ldots, a_{n-1}\right)^{T}=\lambda_{1} \cdot f(1)+\cdots+\lambda_{n} \cdot f(n)\)

證明:

這裏把$$\begin{array}{c}
a_{t-1} 1^{t-1}+\cdots+a_{1} 1^{1}+s=f(1) \
a_{t-1} 2^{t-1}+\cdots+a_{1} 2^{1}+s=f(2) \
\vdots \
a_{t-1} n^{t-1}+\cdots+a_{1} n^{1}+s=f(n)
\end{array}$$看作是\(M\left(a_{0}, a_{1}, \ldots, a_{n-1}\right)^{T}=(f(1),f(2),...,f(n))\),然後兩邊再乘\(\left(\lambda_{1}, \ldots, \lambda_{n}\right)\),所以得到了\(\left(\lambda_{1}, \ldots, \lambda_{n}\right) M\left(a_{0}, a_{1}, \ldots, a_{n-1}\right)^{T}=\lambda_{1} \cdot f(1)+\cdots+\lambda_{n} \cdot f(n)=f(0)=s\)

若要計算重組向量,可通過計算矩陣\(𝑀\)的逆矩陣\(M^{-1}\)計算重組向量\((𝜆_1,…,𝜆_𝑛)=(1,0...,0)M^{-1}\),在獲得重組向量後,可構建基於Shamir門限體制的安全多方計算協議

證明:\(s=f(0)=a=(1,0,0,...,0)(a_0,a_1,...,a_{n-1})^T=\left(\lambda_{1}, \ldots, \lambda_{n}\right) M\left(a_{0}, a_{1}, \ldots, a_{n-1}\right)^{T}\\ \to \left(\lambda_{1}, \ldots, \lambda_{n}\right)=M^{-1}(1,0...,0)\)

  • 首先假設\(𝑃={𝑃_1,…,𝑃_𝑛 }\)是參與者集合,\(𝑃_𝑖\)掌握輸入\(𝑥_𝑖(1≤𝑖≤𝑛)\),需要共同計算的函數爲\(𝑓(𝑥_1,…,𝑥_𝑛)\)

  • 有限域\(F_q\)上的\(𝑆ℎ𝑎𝑚𝑖𝑟(𝑡+1,𝑛)\)門限體制主要流程爲:

    • 輸入階段,每個參與者\(𝑃_𝑖\)將自己的輸入\(𝑥_𝑖\),利用\(𝑆ℎ𝑎𝑚𝑖𝑟(𝑡+1, 𝑛)\)門限祕密共享體制,祕密選取最高\(t\)次的隨機多項式\(𝑓_𝑖(𝑥)\),滿足\(𝑓_𝑖(0)=𝑥_𝑖\) ,然後\(𝑃_𝑖\)\(𝑓_𝑖(𝑗)\)發送給參與者\(𝑃_𝑗\)
    • 計算階段,假設輸入的\(𝑎\)\(𝑏\)已經通過至多\(t\)次的隨機多項式\(𝑓_𝑎(𝑥)\)\(𝑓_𝑏(𝑥)\)通過Shamir門限體制共享給了各個參與者,\(f_a(x)=m_tx^t+...+m_1x+a,f_b(x)=n_tx^t+...+n_1x+b\),其中\((m_t,...,m_1),(n_t,...,n_1)\)是隨機的多項式係數,參與者\(𝑃_𝑖\)掌握輸入\(𝑎\)的子祕密\(𝑎_𝑖\)和輸入\(𝑏\)的子祕密\(𝑏_𝑖\),至多\(t\)次的原因是多項式的係數是隨機產生的,因此\(t\)次的係數也有可能是0。
  • 加法(多方計算\(𝑎+𝑏\)

    • 每個參與者\(𝑃_𝑖\)獨立計算\(𝑐_𝑖 =𝑎_𝑖+𝑏_𝑖,1≤𝑖 ≤𝑛\)\(𝑐_1,…,𝑐_𝑛\) 即爲\(𝑎+𝑏\)通過隨機多項式共享後的結果,通過多項式插值法或者解方程即可恢復祕密\(s\)
    • 子祕密可以直接相加,是因爲對於\(𝑐_𝑖=𝑎_𝑖+𝑏_𝑖=𝑓_𝑎(𝑖)+𝑓_𝑏(𝑖)=(𝑚_𝑡+𝑛_𝑡)i^t+⋯+(𝑚_1+𝑛_1)𝑖+𝑎+𝑏\),多項式的次數並沒有發生變化,新的多項式\(𝑓_𝑎(𝑥)+𝑓_𝑏(𝑥)\)的最高次數依舊爲 \(t\)\(t+1\)個參與者共享他們所掌握的\(𝑐_𝑖\),即可根據\(t+1\)個方程解\(t+1\)個未知數,解出\(𝑎+𝑏\),或者也可直接使用拉格朗日插值法求解出\(𝑎+𝑏\)
图片
  • 乘法(多方計算\(ab\)
    • 首先每個參與者計算\(d_i=a_ib_i\),接着每個\(𝑃_𝑖\)獨自選取次數爲\(t\)次的隨機多項式\(ℎ_𝑖(𝑥)\) ,且滿足\(h_i(0)=d_i,1\le i\le n,t< \frac{n}{2}\)。向各個參與者分配\(𝑑_𝑖\),且\(c_{ij}=h_i(j),1\le i,j\le n\)
    • 所有參與者分配結束後,\(𝑃_𝑖\)掌握了信息\(c_{1i},c_{2i},...,c_{ni}\),同時\(𝜆_1,…,𝜆_𝑛\)是公開的重組向量,即\((𝜆_1,…,𝜆_𝑛)\)滿足\(ab=h(0)=\sum_{i=1}^{n}\lambda _id_i\),因此\(𝑃_𝑖\)可計算\(c_i= {\textstyle \sum_{j=1}^{n}\lambda _j c_{ji}}\),再利用多項式插值法,即可獲得\(𝑎𝑏\)。【即只需要\(t+1\)方就可以獲得祕密\(ab\)
图片

共享隨機數

本次主要介紹多方比較的實現方法,用之前介紹過的\(Shamir(t,n)\)祕密分享協議可以實現共享隨機數。

\(Shamir(t,n)\)協議主要基於拉格朗日插值,也可以通俗地理解成\(𝑛\)個方程求解\(𝑛\)個未知數。

BGW協議可以實現單比特分享,本次要介紹另一個比特分享方式

图片

按比特分享

如有一個比特串\(𝑎 =𝑎_𝑙a_{𝑙-1}…𝑎_1\),即𝑎的值爲\(a= {\textstyle \sum_{i=1}^{l}z^{i-1}a_i}\)\(𝑎\)進行比特分享即對\(𝑎\)的各個比特進行分享,每個參與者拿到\(𝑎_1,…,𝑎_𝑙\)\(𝑙\)個子祕密,將參與者\(𝑃_𝑖\)拿到的\(𝑎_𝑗\)的子祕密記爲\(𝑎_{𝑗,𝑖}\),則對\(𝑙\)比特長的\(𝑎\)進行比特分享後參與者\(𝑃_𝑖\)能夠獲得\(𝑎_{1,𝑖},𝑎_{2,𝑖},…,𝑎_{𝑙,𝑖}\)

首先簡要介紹一個多個參與者共同產生同一個隨機數的方式

假設有\(𝑛\)個參與者\(𝑃_1,…,𝑃_𝑛\),每個參與者\(𝑃_𝑖\)都產生一個隨機數\(𝑟_𝑖\),並通過\(Shamir(t,n)\)祕密分享機制將\(𝑟_𝑖\)進行分享,記\(𝑟_{𝑖,𝑗}\)爲參與者\(𝑃_𝑗\)獲得的\(𝑟_𝑖\)的子祕密。因此當每個參與者都產生隨機數並分享後,參與者\(𝑃_𝑖\)可以獲得\(𝑟_{1,𝑖},…,𝑟_{𝑛,𝑖}\)

图片

多方隨機數生成

本質上就是祕密分享-加法運算的應用,共同生成一個隨機數。

參與者\(𝑃_𝑖\)獲得子祕密\(𝑟_{1,𝑖},…,𝑟_{𝑛,𝑖}\)之後,將它們進行累加,將累加結果記爲\(r_{i}^{\prime}=\sum_{j=1}^{n} r_{j, i}\)。用符號\(𝑟\)表示\(𝑟_1,…,𝑟_𝑛\)之和,即\(r=\sum_{j=1}^{n} r_{j, i}\),則\(r_{i}^{\prime}\)就是\(𝑟\)的一個子祕密。因爲\(𝑟_{1,𝑖}\)\(𝑟_1\)的一個子祕密,\(𝑟_{𝑗,𝑖}\)\(𝑟_𝑖\)的一個子祕密,由於\(Shamir(t,n)\)具有可加性。

假設參與者\(𝑃_1\)\(𝑟_1\)的祕密分配函數是\(𝑓_1(𝑥) =𝑎_{t-1}𝑥_{t-1}+⋯+𝑎_1𝑥+𝑟_1\),參與者\(𝑃_2\)\(𝑟_2\)的祕密分配函數是\(𝑓_2(𝑥)=𝑏_{t-1}𝑥_{t-1}+⋯+𝑏_1𝑥+𝑟_2\),則參與者\(𝑃_1\)\(𝑃_2\)分配給參與者\(𝑃_𝑗\)的子祕密分別爲\(𝑟_{1,𝑗}=𝑓_1(𝑗)\)\(𝑟_{2,𝑗}=𝑓_2(𝑗)\),二者相加爲:\(𝑟_{1,𝑗}+𝑟_{2,𝑗}=𝑓_1(𝑗)+𝑓_2(𝑗)=(𝑎_{t-1}+𝑏_{t-1})𝑗^{t-1}+⋯+(𝑎_1+𝑏_1)𝑗+𝑟_1+𝑟_2\),即\(𝑟_{1,𝑗}+𝑟_{2,𝑗}\)也是\(𝑟_1+𝑟_2\)的一個子祕密,\(𝑟_{1,1}+𝑟_{2,1},𝑟_{1,2}+ 𝑟_{2,2},…,𝑟_{1,𝑛}+𝑟_{2,𝑛}\)也是\(𝑟_1+𝑟_2\)的子祕密。

同理\(𝑟_1'=𝑟_{1,1}+⋯+𝑟_{𝑛,1}, 𝑟_2'=𝑟_{1,2}+⋯+𝑟_{𝑛,2}, 𝑟_𝑛'=𝑟_{1,𝑛}+⋯+𝑟_{𝑛,𝑛}\)\(r=\sum_{i=1}^{n} r_{i}=r_{1}+\cdots+r_{n}\)的子祕密。

注意此時每個參與者\(𝑃_𝑖\)都不知道其他參與者產生的隨機數\(𝑟_𝑗\),因此參與者\(𝑃_𝑖\)也無法計算出\(𝑟\)的具體值「只能計算出子祕密」,但是他通過計算\(r_{i}^{\prime}=\sum_{j=1}^{n} r_{j, i}\),可以計算出\(𝑟\)的一個子祕密\(𝑟_𝑖'\)

通過每個參與者都產生一個隨機數並進行祕密共享,所有參與者共同協作產生了一個隨機數\(r=\sum_{i=1}^{n}r_i\),但是每個參與者\(𝑃_𝑖\)都不知道\(𝑟\)的具體值,都只掌握\(𝑟\)的一個子祕密\(𝑟_𝑖'\)

隨機單比特分享(Joint Random Bit Sharing)

本質上是祕密分享-乘法運算的應用

在學習了多方共同產生隨機數後,可以利用此來實現多方的隨機單比特分享,每個參與者拿到一個隨機比特的Share,在重構之前每個參與者都不知道該隨機比特的具體值。

  • 首先所有參與者利用上節所講述的共享隨機數生成方式共同生成一個隨機數,將其記爲\(𝑟\),將參與者\(𝑃_𝑖\)拿到\(𝑟\)的子祕密記爲\(𝑟_𝑖'\)(保持與上節的符號統一),用\([𝑟]\)表示\(𝑟\)處於被分享成子祕密的狀態,\([𝑟]\)\(𝑟_1',…,𝑟_𝑛'\)組成。

每個參與者只知道自己的子祕密\(r_i'\)

  • 之後通過第二次科普介紹的Shamir多方乘法,計算\([𝑟^2\)],參與者\(𝑃_𝑖\)能夠計算出\(𝑟^2\)的一個子祕密,之後所有參與者分享自己計算出的\(𝑟^2\)的子祕密,即公開\([𝑟^2\)]【即每個參與者都共享自己的子祕密】,每個參與者通過公開的\([𝑟^2]\)都可使用拉格朗日插值法重構出\(𝑟^2\)【即每個參與者都可以計算出\(r^2\)】,若重構出的\(,\)則各方再重新生成隨機數\(𝑟\)

每個參與者都能計算出\(r^2\)

  • 參與者\(𝑃_𝑖\)在計算出\(𝑟^2\)後,計算\(𝑟=\sqrt{r^2}\) ,由於這些操作都是在有限域\(𝐹_𝑞\)內進行,因此\(0<𝑟<𝑞\),此時能夠計算出兩個\(𝑟′′\)\(𝑟′′=𝑞−𝑟\)\(𝑟′′=𝑟\),則\((𝑟′′)^{-1}\)的逆乘上\(𝑟\)有兩種結果:\((𝑟′′)^{-1}𝑟=𝑞−1\)或者\((𝑟′′)^{-1}𝑟=1\)
    • 因爲\(𝑟′′∙(𝑟′′)^{-1}=1\),當\(𝑟′′=𝑟\)時,\((𝑟′′)^{-1}𝑟=𝑟^{-1}𝑟=1\)
    • \(𝑟′′=𝑞−𝑟\)時,\((𝑟′′)^{-1}𝑟= (−𝑟)^{-1}𝑟 =(−1)∙𝑟^{-1}𝑟=𝑞−1\)
    • 所以參與者可以約定選取\(0<𝑟′′<q/2\),那麼所有參與者就可以計算出相同的\(𝑟′′\),參與者\(𝑃_𝑖\)設置\(𝑟^{-1}=(𝑟′′)^{-1}\)

在約定好範圍後,每個參與者能夠計算出\(𝑟=\sqrt{r^2}\)

  • 對於參與者\(𝑃_𝑖\)來說,\(𝑃_𝑖\)掌握\(𝑟\)的子祕密\(𝑟_𝑖'\)\(𝑃_𝑖\)設置\(𝑎_𝑖=2^{-1}((𝑟^{-1})𝑟_𝑖'+1)\)\(𝑎_𝑖\)即爲\(𝑃_𝑖\)獲得的隨機比特\(𝑎\)的一個子祕密
    • 因爲參與者\(𝑃_𝑖\)只知道\(𝑟\),對於\(𝑃_𝑖\)來說\(𝑟\)依舊有兩種可能,分別是\(±\sqrt{r^2}\) ,因此\(𝑃_𝑖\)無法確定\(𝑎_i\)的值是0還是1,只有所有參與者對\(𝑟\)進行重構才能確定\(𝑟\)的值,從而計算出\(𝑎_i\)
    • \(𝑟\)是所有參與者共同產生的隨機數,因此\(𝑎\)的值也是隨機的,且在重構之前每個參與者都只掌握隨機比特\(𝑎\)的一個子祕密\(a_i\),不知道\(𝑎\)的具體值。

利用祕密分享的乘法,構造更多計算

疑問:\(r_i'/r\)爲什麼會等於\(±1\)

比特比較

比特或

上次介紹了共享隨機數和比特分享,通過共享隨機數來實現比特分享,再通過比特分享來實現本次要介紹的比特串比較。

  • 在介紹比特比較之前先簡單介紹一下比特或
    • 比特異或的實現方法較爲簡單,利用之前介紹過的\(𝐹_2\)Shamir共享機制的加法就能實現
    • 比特或則無法直接通過Shamir共享機制的加法或者乘法實現。
图片

注意之前介紹過,在算數電路上實現乘法和加法即可實現任意函數,而在布爾電路上實現異或和或即可實現任意函數。安全多方計算就是爲了在保護隱私信息下共同計算目標函數,如果把比特或通過使用加法和乘法的函數表示,那麼即可通過加法和乘法實現或門的功能。

图片

上圖有誤:應該是異或和或可以實現任意函數

思考一下與的特點,當多個比特相或時,其中只要有一個比特的值爲1,或的結果就是1,因此可以統計出現1的個數,只要超過0次,最後的值就爲1。

可以設計出這樣一個函數:若函數有個\(𝑙\)輸入,分別爲\(𝑥_1,…,𝑥_𝑙\),則讓\(g=1+\sum_{i=1}^{l}x_i\),讓實現或的函數爲\(𝑓(𝑥_1,…,𝑥_𝑙)\)

\(f(g)=\left\{\begin{matrix} 0&,g=1 \\ 1&,g> 1 \end{matrix}\right.\)

\(g=1+\sum_{i=1}^{l}x_i\),是因爲\(\sum_{i=1}^{l}x_i=0\)時會泄露信息

回憶一下,在Shamir祕密分享機制中,當祕密分享函數的輸入爲0時,得到0的就是祕密,因此需要避免輸入爲0。

\(g=1+\sum_{i=1}^{l}x_i\),可以使得函數\(𝑓(𝑔)\)的定義域從\([0,𝑙]\)變爲\([1,𝑙+1]\),從而避免出現輸入𝑔爲0的情況。\(𝑓(𝑔)\)的具體實現則可通過有𝑛個未知係數的方程,𝑛個方程解𝑛個未知數即可【插值法】,即\(𝑓(1)=0,𝑓(2)=⋯=𝑓(𝑙+1)=1\)

設計函數來模擬異或,使用祕密分享的加法和乘法可以計算函數。

\(g=1+\sum_{i=1}^{l}x_i\)\(𝑓(𝑔)\)映射到Shamir祕密共享機制上,加法和乘法對應Shamir中的加和乘,即可實現在共享比特上的異或計算

下面開始介紹比特比較

具體要介紹的比較爲小於,即如果比特串\(𝑎<𝑏\),則得到的結果爲1,如果\(𝑎>𝑏\),則得到的結果爲0。

比特比較:\(\left\{\begin{matrix} 1&,a<b \\ 0&,a>=b \end{matrix}\right.\)

假設有兩個𝑙比特長的比特串\(𝑎\)\(𝑏\),分別爲\(𝑎=𝑎_0𝑎_1⋯𝑎_{𝑙-1}\)\(𝑏=𝑏_0𝑏_1⋯𝑏_{𝑙-1}\),首先將比特串\(𝑎\)\(𝑏\)按比特進行異或,得到比特串\(𝑐=𝑐_0⋯𝑐_{𝑙-1}\),其中\(𝑐_𝑖=𝑎_𝑖⨁𝑏_𝑖,0≤𝑖≤𝑙−1\)。再計算比特串\(𝑑=𝑑_0⋯𝑑_{𝑙-1}\),其中,\(0≤𝑗≤𝑙−1\),即比特串\(𝑑\)的第\(𝑗\)位比特是比特串\(𝑐\)從高位起前\(𝑗\)位比特的或「左起爲0」。

比如,比特串\(𝑎=100 101\) ,比特串\(𝑏=101 011\),比特串\(𝑐\)爲比特串\(𝑎\)\(𝑏\)按位異或的結果,即比特串\(𝑐=001 110\)

比特串\(d=d_0...d_{l-1}\),可以得到比特串\(𝑑=001 111\)

\(d_0=c_0=0 \\ d_1=c_0\vee c_1=0 \\ d_2=c_0\vee c_1\vee c_2=1 \\ d_3=c_0\vee c_1\vee c_2\vee c_3=1\\ d_4=c_0\vee c_1\vee c_2\vee c_3\vee c_4=1 \\ d_5=c_0\vee c_1\vee c_2\vee c_3\vee c_4\vee c_5=1\)

比特串\(𝑑\)的第\(𝑗\)位比特是比特串\(𝑐\)從高位起前\(𝑗\)位比特的或,可以觀察到當比特串\(𝑐\)中某個比特是整個比特串中第一位爲1的時候,比特串\(𝑑\)從那位起之後都爲\(1\)。如例子中,\(𝑐_2\)爲比特串\(𝑐\)中第一個出現\(1\)的比特,則比特串\(𝑑\)\(𝑑_2\)以及\(𝑑_2\)之後都爲1,之前都爲0。

\(e_0=d_0=0 \\ e_1=d_0-d_1=0\\ e_2=d_1-d_2=1 \\e_3=d_2-d_3=0 \\ e_4=d_3-d_4=0 \\ e_5=d_4-d_5=0\)

再接着讓\(𝑒_𝑗=𝑑_{𝑗-1}−𝑑_𝑗, 1≤𝑗≤𝑙−1, 𝑒_0=𝑑_0\),因此可以得到比特串\(𝑒=001 000\),即比特串\(𝑒\)會保留比特串\(𝑑\)中第一位出現1的那位,其餘位均爲0。

最後,計算\(\sum_{i=0}^{l}b_ie_i\)即爲最後的結果,在上面這個例子中結果爲1,所以比特串\(𝑎<𝑏\)

它所使用的原理是,如果比特串\(𝑏>𝑎\),那麼比特串𝑏中第一位1出現的一定比比特串𝑎中的第一位1要早,否則比特串𝑏就小於等於比特串𝑎【例子中\(a\)\(b\)的第一位都是1,所以比較第二個1】

將比特串\(𝑎\)\(𝑏\)按位進行異或得到\(𝑐\)後,比特串\(𝑐\)中第一位1出現的位置就是比特串\(𝑎\)\(𝑏\)中最早的第一位1出現的位置。那麼如果比特串\(𝑐\)中第一位1出現的位置和\(𝑏\)中最早的第一位1出現的位置相同【即第三位】,就說明\(𝑏>𝑎\)。而接下去做的步驟就是爲了證明比特串\(𝑐\)中第一位1出現的位置和\(𝑏\)中最早的第一位1【其實是第三位】出現的位置是否相同。

在上面的例子中,用橘色表示1,藍色表示0,則\(𝑎、𝑏、𝑐\)爲:

图片

比特串\(𝑑\)是從\(𝑐\)第一位1出現起,之後都爲1。比特串\(𝑒\)是除了\(𝑐\)第一位1出現的位置爲1,其餘位都爲0,即成功將\(𝑐\)中第一位出現1的位置提取了出來。\(𝑑\)\(𝑒\)用圖形表示爲:

图片

現在比特串\(𝑒\)中1的位置即爲\(𝑐\)中第一次出現1的位置,\(e\)\(𝑏\)進行按位與,如果\(𝑏\)第一次出現1的位置和\(𝑒\)中1的位置相同,那麼該位按位與的結果就是1,其餘位均爲0,所有位相與結果之和就是1。反之,\(𝑏\)第一次出現1的位置和\(𝑒\)中1的位置不同,則爲0。

將上述比較方式中的\(𝑎, 𝑏\)的各個比特都採用比特分享的方式進行分享,後續的「異或」以及「或」操作都採用我們之前介紹過的對子祕密的「比特異或」和「比特或」操作,即可實現對\(𝑎,𝑏\)的多方比較,且不向任何參與者泄露\(𝑎,𝑏\)的具體值。

图片

執行兩個數的比較,轉換爲函數,函數計算通過祕密分享的方式實現!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章