不經意傳輸
不經意傳輸(Oblivious transfer,OT,也有翻譯是茫然傳輸)是在構建安全多方計算時經常需要使用的一個模組。
在雙方參與的不經意傳輸中,一方“Bob”輸入一組資料,另一方“Alice”輸入一個選擇,從Bob輸入的資料中選取一個。Alice只獲得其所選擇的資料,無法得知 Bob輸入的其他資料。Bob無法知道Alice選擇獲得了哪個資料。如有一個2選1的不經意傳輸協議,Bob輸入{\( ?_0 ,?_1 \)}Alice輸入?∈{0,1} 計算結束後Alice獲得\( ?_? \),但是無法獲得\( ?_{1-?} \),Bob無法得知Alice輸入的?的值。若Alice輸入的?=0,則Alice獲得\( ?_0 \),無法獲得\( ?_1 \);若Alice輸入的?=1,則Alice獲得\( ?_1 \),無法獲得\( ?_0 \)。Bob無法得知Alice具體獲得的是\( ?_0 \)還是\( ?_1 \)。
不經意傳輸協議還有N選1,N選M等。將2選1不經意傳輸協議寫作\( \begin{pmatrix}2\\1\\\end{pmatrix}OT \),N選1不經意傳輸協議寫作\( \begin{pmatrix}N\\1\\\end{pmatrix}OT \)。
將重複呼叫k次不經意傳輸協議寫作\( \begin{pmatrix}2\\1\\\end{pmatrix}OT^k \),如Bob輸入 \( {(a_10,a_11),(a_20,a_21),…,(A_k0,a_k1)} \),Alice輸入{\( ?_1,?_2,…,?_? \)},??∈ {0,1},1≤?≤?,在協議計算結束後,Alice獲得\( {a_{1r_1},a_{2r_2},…,a_{kr_k}} \)。
Naor-Pinkas不經意傳輸協議是經典的OT協議,其基於離散對數困難問題,透過三次公鑰密碼學操作實現了\( \begin{pmatrix}2\\1\\\end{pmatrix}OT \)。
Naor-Pinkas不經意傳輸協議中的公共引數有:?階有限域的??、有限域??、??的生成元?和??的?階子群?? 。其中?和?的關係是?|?−1,即?−1能夠被?除盡。
傳送者輸入兩個長度為?位元的資料(\( ?_0,?_1 \)),接收者輸入一個選擇位元?。
1. 傳送者生成一個隨機數?,並將?進行公開,接著傳送者生成一個隨機數?,計算\( g^a \)和\( c^a \)。
2. 接收者生成一個隨機數?,1≤?≤?。再生成兩個公鑰\( ??_? \)和\( ??_{1-?} \),\( ??_?=g^k \),\( ??_{1-?}=\frac{c}{ g^k } \),接收者將??0傳送給傳送者。
3. 傳送者計算 \( (pk0)^a ,(pk1)^a = \frac{C^a}{ pk_0^a } \)。傳送者對需要傳送的資料(\( ?_0,?_1 \))進行加密:
4. 接收者計算\( {Hash}(p k_{r}^{a})={Hash}((g^{a})^{k}) \),然後計算\( ?_? \)。
例:Alice 輸入(\( ?_0=9,?_1=5 \)),Bob輸入選擇位元?=1。
1. Alice生成一個隨機數?=20,?=11,計算\( q^a=g^{11},c^a=20^{11} \),將C公開。
2. Bob收到C後,生成一個隨機數k=10,在生成兩個公鑰\( ??_1=g^{10} \),\( ??_0=\frac{c}{g^k}=\frac{20}{g^{10}} \),Bob將\( ??_0=\frac{20}{g^{10}} \)傳送給Alice。
- Alice收到\( ??_0 \)後,計算 \( \left(p k_{0}\right)^{a}=\left(\frac{20}{g^{10}}\right)^{11},\left(p k_{1}\right)^{a}=\frac{20^{11}}{\left(p k_{0}\right)^{a}}=g^{110} \),對需要傳送的(\( ?_0=9,?_1=5 \))進行加密,並計算其雜湊值。
4. Bob收到\( ?_0 \)和\( ?_1 \)之後,計算\( \operatorname{Hash}\left(\left(p k_{1}\right)^{a}\right)=\operatorname{Hash}\left(\left(g^{a}\right)^{k}\right)=\operatorname{Hash}\left(g^{110}\right) \)
由於Bob計算出了\( \operatorname{Hash}\left(p k_{1}^{a}\right) \),因此Bob可以計算出\( ?_1 \):
在第3步,Alice收到\( ??_0=\frac{c}{g^k} \),基於離散對數困難假設,Alice無法求解出?,也就無法得知Bob選擇的r是1還是0。
在第4步,由於Bob只知道\( g^a \),基於離散對數困難假設,求解?是困難的,因此Bob不知道?的具體值,也就無得知\( {(pk_o)}^a \),無法利用\( {(pk_o)}^a \)求解出\( ?_0 \),只能求解出自己所選擇的\( ?_?=?_1 \)的值。若Bob選擇了0,一樣同理,Bob無法求解出\( ?_1 \),只能得知\( ?_0 \)。
混淆電路
混淆電路(Garbled Circuit,又稱雜交電路、加密電路)的思想起源於姚期智院士,之後Beave等人提出了混淆電路的定義。混淆電路的構造從門開始先加密一個門再延伸到加密整個電路。
對於布林電路而言,電路實現與或非即可實現完備,可以模擬任意的函式。混淆電路是實現安全多方計算的另一種方式,透過對電路進行加密來掩蓋電路的輸入和電路的結構,以此來實現對各個參與者的隱私資訊的保密,再透過電路計算來實現安全多方計算的目標函式的計算。
首先以與門為例,一個常見的與門及其真值表如下圖所示,將該與門的輸入線記為?1 , ?2,輸出線記為?3。
隨機生成 6 個金鑰\( {k_1^0,k_1^1,k_2^0,k_2^1,k_3^0,k_3^1} \),分別表示?1,?2,?3這三條線為0和1時的兩種情況。如\( k_1^0,k_1^1 \)分別代表?1為0和?1為1,\( k_3^0,k_3^1 \)分別代表?3為0和?3為1。接著該門利用對稱加密演算法En()生成4個密文\( c_{0,0}, c_{0,1}, c_{1,0}, c_{1,1} \),\( E n_{a, b}(c) \)表示用?, ?作為加密秘鑰,使用加密演算法En()來加密?,在對真值表進行加密後,形成一個新的輸入輸出表,該新表和該門的真值表呈現一一對應的關係:
將\( c_{0,0}, c_{0,1}, c_{1,0}, c_{1,1} \)打亂順序,在電路門儲存這四個亂序的值,記為?1,?2,?3,?4將這四個值稱為電路門的混淆值.假設門上兩條線?1,?2的輸入的值對為(0,1),那麼輸入線對應的電路計算值為\( k_1^0,k_2^1 \)。輸出導線?3對應的加密值有四個,分別為\( c_{0,0}, c_{0,1}, c_{1,0}, c_{1,1} \),由於對電路求值的一方不知道哪個才是真值。
所以使用\( k_1^0,k_2^1 \)對分別對\( c_{0,0}, c_{0,1}, c_{1,0}, c_{1,1} \)進行解密,只有\( c_{1,0} \)能夠被成功解密得到\( k_3^0 \),即為該門的輸出值,對其它的值進行解密時會得到無效值。如何分辨有效值和無效值,可以在電路真值後面新增固定位元數的標誌位,用來表明解密正確。如果是使用錯誤的秘鑰進行解密,則無法得到正確的標誌位,可以據此判斷出是否是有效值。混淆電路的基礎結構如下圖所示,門?可以是與門、或門等。
若該門為整個電路的中間門,其輸出是其他門的輸入,那麼將其輸出\( k_3^0 \)繼續作為輸入重複以上操作就可。若該門為最後的輸出門,其輸出即為結果,那麼再將\( k_3^0 \)轉換為0,若輸出為\( k_3^1 \)則轉換為1即可。
對於多個電路組成的門,當一個輸入線分成多條分別接入到多個門,其分出的每條線上的訊號標記都相同。對於一個門如有多個輸出線,每條輸出線的訊號標記也都相同。如對於三個門組成的電路,分別令?1,?2,...,?7代表電路上的訊號線,對於每一條訊號線?1,?2,...,?7,分別生成獨立的金鑰\( \left(k_{1}^{0}, k_{1}^{1}\right),\left(k_{2}^{0}, k_{2}^{1}\right), \ldots,\left(k_{7}^{0}, k_{7}^{1}\right) \),給定所有金鑰後,透過上文所述的思路對真值表進行替換和打亂順序,即使用個門的兩個輸入值對輸出值進行加密,使用各個加密值替換真值表的相應位置,最後打亂真值表的順序。 混淆電路是安全多方計算中一個非常實用的工具,電路可以透過與或非門 實現任意一個函式,而多方計算的目標就是保護各方輸入資訊的情況下進行目 標函式的計算。透過目標函式的電路轉換為混淆電路,可以實現保護隱私資訊 的情況下進行目標函式的計算。
在雙方計算的例子中,假設Alice為傳送方,Bob為接收方。Alice設計一個混淆電路傳送給Bob,由Bob負責進行計算。因為Bob不知道金鑰和0、1的對應關係,因此 Bob無法得知電路的實際真值表。Alice直接將其秘密轉換為金鑰後發給Bob,Bob也不清楚其真值。Bob透過上文所述的不經意傳輸協議(OT)獲得與其在目標函式的輸入所對應的Alice的金鑰,然後按照電路的結構逐個門進行計算,直到獲得最後的函式計算結果。這樣Bob 無法由於不知道Alice金鑰和0、1的對應關係,因此無法得知Alice的實際輸入。而電路計算過程都在Bob處完成,因此Alice也無法得知Bob的輸入。這樣既能實現雙方合作進行目標函式的計算,也可以保護各方的輸入隱私。