不經意傳輸擴充套件(OTE)-不經意偽隨機函式(OPRF)-隱私集合求交(PSI)

Wrfewfgyj9623發表於2023-02-16

第一篇KKRT16是從執行效率上針對IKNP03-OTE的一個改變,透過將糾錯碼改為偽隨機編碼實現1-無窮OTE,避免了OT數量與元素的大小相關!


第二篇PRTY19從通訊負載上針對KKRT16-OTE的一個改變,透過將巨大的矩陣傳輸改為n階多項式傳輸實現k-NOTE, 將通訊複雜度從Nk下降到nk.


第三篇CM20從通訊負載和執行效率均衡針對KKRT16-OTE的一個改變。透過將糾錯碼C即偽隨機函式的輸出從字串變成矩陣,將通訊複雜度從Nk下降到nk




對於最重要的三個基於OTE的PSI協議,我將從PSI協議最關注的兩個方面對其文章的主要貢獻進行了梳理。KKRT16主要從執行時間上對OTE元件進行了最佳化。PRTY19則在KKRT16-OTE的基礎上增加多項式插值對通訊進行最佳化但損失了計算。CM20則對KKRT16-OTE進行了最佳化,在未損失執行效率的情況下減少了通訊負載。




KKRT6是一篇CCS2016頂會上的文章,該會專注於資訊保安領域實用性的論文。本文介紹的這篇文章綜合使用了不經意傳輸擴充套件、Cuckoo雜湊、不經意偽隨機數生成器(Oblivious Pseudo-Random Generator),同時還引入了編碼理論相關的知識,將多種密碼學技術和安全多方計算的PSI都涵括在內,是非常經典的文章!之前師兄也講過。但我覺得仍然有必要複習一下這篇論文!這篇論文仍然是目前PSI協議中大集合場景下,區域網下(也就是頻寬在20GB/S左右)的場景下執行效率最高!




我將以這樣一個方式對KKRT16這篇文章進行介紹。首先介紹具體貢獻,然後將貢獻當成一個具體的問題帶入到下面如何改進實現的。


接下來就是按PSI由OPRF構建,OPRF由OTE構建,從底層開始講起每一個構建它改進了什麼,帶來了什麼效果!




KKRT16最主要的貢獻是將KK13的1-nOTE提升為1-無窮OTE。附帶的貢獻是 將OTE解釋為OPRF協議成為一個獨立的密碼學子協議,然後構建PSI協議使得OT執行次數不再與元素大小相關。另外引入了Cukoohash 降低了通訊複雜度,且執行時間是目前區域網頻寬下最快的。




我們將從如下方式介紹KKRT16的具體構建過程。base-OT的功能與實現--同等安全條件下,採用少量開銷實現大量OT例項--將1-2選擇OT擴充套件為1-nOTE--擴充套件為1-無窮OTE-解釋為OPRF-構造PSI協議。




base-OT基於公鑰加密實現為OTE提供PPT內的安全性。1-2baseOT具有如上功能:。




baseOT有很多種實現方式。例如基於RSA,基於DH,基於ECC等。本文采用的是基於三次離散對數困難問題的公鑰加密實現的Naor-Pinkas-OT協議。傳送方選擇一個隨機數C傳送給R.接收方計算PK_0和PK_1,其中PK_r=g^k。R將PK_0傳送給S.S計算計算x_0和x_1的加密E_0和E_1併傳送給R。可以簡單的證明,如果r=0,則PK_0=g^k,傳送方PK_0^a=g^ka,PK_1=C^a/g^ka。而接收方只能獲得g^ak,無法獲得C^a/g^ka,因此只能得到x0.




不經意傳輸擴充套件主要為解決實際應用場景每一次都使用baseOT而帶來的低效性!因此研究人員提出採用固定數量的baseOT實現任意數量的不經意傳輸例項被稱為不經意傳輸擴充套件。這裡舉個簡單的例子,S擁有n對資料集,R擁有n個選擇位元,若僅採用baseOT需要執行n次這是非常緩慢的!而採用OTE,baseOT的數量K遠小於n大大提升了效率!




接下來介紹Ishai、Kilian、Nissim和Petrank於2003年提出的如何基於矩陣變化思想實現少量baseOT和對稱金鑰構造大量OT例項的不經意傳輸擴充套件協議。


1.接收方首先隨機生成一個m*k矩陣T和m*1字串r,透過計算矩陣T的第i列和字串r異或得到第二個矩陣U.


2.傳送方和接收方執行k次baseOT:傳送方輸入選擇位元s_i,接收方輸入秘密t_i,u_i.傳送方輸出q_i,如果選擇位元s_i=0,則q_i=t_i否則等於u_i。執行完k次baseOT後,傳送方獲得一個m*k矩陣Q。可能這裡會疑惑傳送方和接收方是不是搞反了。其實這裡的傳送方和接收方的定義是按PSI協議來定義的,一般誰獲得最後的輸出就定義為接收方。




3. 接下來基於矩陣變化的思想將已經完成k-baseOT結果轉化為m個OT例項,其中m遠大於k。


4. 也就是我們從行的角度來觀察這三個矩陣,當字串r的第i行等於0時,T的第i行就等於U的第i行,因此矩陣Q的第i行就等於T的第i行


5.當字串r的第i行等於1時,矩陣U的第i行等於T的第i行異或{1}^k,則矩陣Q的第i行第j列的值取決於字串s第i列的取值,若s_i=0,則為矩陣T第i行第j列的值。若s_i=1,則為矩陣T第i行第j列的值異或1,因此矩陣Q的第i行等於矩陣T第i行異或字串s.




我們將其進行進一步的解釋為我們等一下會用到的OPRF


1.我們將行可解釋為”變”這個形式。第i個OT例項:傳送方輸入兩個秘密矩陣Q的第i行和矩陣Q的第i行異或字串s。接收方輸入第i個選擇位元,輸出指定秘密。


2.我們可以發現當r^i=0時,接收方只能知道q^i,但無法知道q^i異或s。當r^i=1時,接收方只能知道q^i異或s,但無法知道q^i。




1.這意味著我們可以將q^i異或s和q^i作為OT例項的資料加密金鑰。注意到我們這裡採用了隨機預言機H對其加密,這裡想了很久,為什麼要對其進行加密,我覺得原因是必須要破壞矩陣中q^i異或s和q^i之間的相互關係。最後接收方根據t^i選擇是x_0還是x_1。




我們再次回顧接收方生成矩陣T和U的過程。矩陣T等於矩陣U異或矩陣R. 我們可以發現矩陣R 的第i行為 k個 r^i ,這意味著 矩陣R的每一行都是r^i的一種編碼. 糾錯編碼是一種簡單的編碼,於是是否可以採用一個更復雜的編碼呢?




1.這裡我們選擇一個複雜的糾錯碼C,它的輸入域具有一個很大的範圍,不只有{1,0},輸出為一個kbit.22


2.然後我們將C帶入IKNP03重新研究一下。


透過K個1-2baseOT後仍然可以得到這樣一個關係:矩陣Q的第i行等於矩陣T的第i行異或C編碼(r的第i行)與字串s.


因此我們得到了2^l個金鑰。




對於2^l輸入域的每一個r’,傳送方都可以計算出所有的C(r)而接收方只能計算出其中一個C(r)。因此得到了2^l選1.


為證明接收方只能得到一個秘密,假設接收方選擇字串為r^j但是想學習r’的秘密。由黃色公式可知,除了s所有的其他接收方都是知道的。我們假設糾錯碼C的最小距離為計算安全引數。為此敵手需要猜測k位才能違犯安全性。因此我們認為是安全的。




KKRT16等人透過對KK13-OTE的觀察發現透過OTE構建隱私相等性測試時:


1.我們並不需要對糾錯碼C進行解碼,我們只需要比較兩個糾錯碼對映的值是否相等即可


2.對於任何兩個r和r’我們需要保證C(r)⊕C(r’)的漢明距離不小於計算安全引數,雖然漢明距離是機率性的,但這個機率忽略不計!因此我們可以將漢明距離不小於我們的計算安全引數。


因此KKRT16提出我們並不需要糾錯碼C,只需要一個漢明距離不小於計算安全引數的偽隨機函式即可。這是非常小的一個改變但也是本文最重要的一個改變!這使得基於KKRT16-OTE的psi協議比基於KK13-OTE的PSI協議提升了3倍!




顯然將糾錯碼C替換為隨機函式,只要偽隨機函式的抗碰撞性大於計算安全引數,協議仍然是安全的!且和KK13-OTE保持一樣的效果,因為協議的整個核心過程並沒有改變!


而且我們還得到了另外一個效果:即接收方可以選擇任何字串作為它的選擇字串了!消除了選擇字串的先驗約束!


也就是傳送方可以計算任意字串相對應的金鑰值,而接收方只能計算出一個,這也就是KKRT16為什麼說得到了1-無窮OTS


為保證安全性,需要PRF(r^’)⨁PRF(r^j)的漢明距離要不小於計算安全引數k,為此將PRF的輸出長度設定為3.5k。具體設定長度會在講到偽隨機函式的安全性時介紹到為什麼設定3.5k!




接下來介紹如何將KKRT16-OTE解釋為一個OPRF協議,並封裝成一個獨立的密碼學子協議!


首先介紹一下OPRF協議的功能:傳送方和接收者執行兩方OPRF協議,傳送方無輸入,接收方輸入元素x_i,傳送方輸出金鑰k,接收方輸出OPRF值F(k,x_i)。


將KKRT16-OTE解釋為OPRF,偽隨機函式為H(q異或C(r)與s)。可以發現接收方只能獲得指定輸入的OPRF值,而傳送方可以獲得任意輸入的OPRF值。


我們的OPRF與現有的OPRF存在一下微妙的不同:


1.接收方的輸出資訊略多餘“PRF”值,事實上接收方獲得的不是H(t)而是 t=q⨁C(r)⊙s。洩露了一定的資訊但並不影響安全性,因此KKRT16作者稱之為relaxed-OPRF(鬆弛OPRF)


2.我們可以注意到OT矩陣每一行都定義了一個OPRF例項,因此KKRT16作者稱之為batched-OPRF(批處理)


3.我們關注到每個OPRF例項的q是不同的,s都是一樣的,且q和s相關!因此KKRT16作者稱之為related-Key(批處理)


第三點的性質非常重要,在2019年PRTY19和2020年CM20都基於該屬性對OPRF協議進行了進一步的改進,得到多點OPRF!實現了正常頻寬下最快的PSI協議!有興趣的可以沿著這條路看!




將OTE解釋為一個OPRF協議後可以很容易的透過OPRF構造出PSI協議!


簡單介紹一下PSI協議的功能:S和R分別擁有隱私集合X和Y,它們共同計算集合交集,並獲得交集結果!除交集外無任何元素額外資訊的洩露!




為什麼說OPRF可以簡單構造PSI呢?這裡先舉一個大致思路,有助於理解等下的最佳化點!


S與R執行OPRF,R輸入隱私集合,輸出OPRF值。S輸出金鑰k,可計算任意的OPRF值,S本地計算OPRF值並將其傳送給接收方,R透過字串比較得到交集!


可以說基於OPRF構造PSI協議非常簡單,但傳送方需要加密O(n^2)個和傳送O(n^2)的通訊量,接收方需要比較O(n^2)次。(因為每個OPRF例項的金鑰都是不同的!)


為此:


KKRT-PSI協議遵循了PSZZ15基於KK13-OTE構造PSI的過程,採用Cuckoo hashing演演算法減少通訊負載和比較次數。我們首先從使用到的雜湊函式說起!


1.Cuckoo hashing分為兩個儲存表,一個為Cuchoo雜湊表,一個稱為堆儲存容器。(這篇文章採用的這樣的容器,之後的文章有采用無堆儲存容器的Cuckoo hashing,大家可以看看!)


2.Cuckoo插入元素x的演演算法如下:計算元素x的三個雜湊值,尋找對應索引的位置,若至少有一個位置為空則隨機插入空位置。若一個位置也沒空,則隨機選擇一個位置替換該元素。對該元素執行上述步驟。


若執行k次後,仍然需要替換,則將該元素儲存到堆儲存器中!




這裡我們以PSSZ15的構造方式構造PSI協議,僅將OPRF協議替換為KKRT16-OTE


1. 接收方R隨機選擇三個hash函式,將集合元素透過布穀鳥hash演演算法對映到布穀鳥表或堆容器中。最後空餘的地方採用虛擬元素填充!


2.傳送方和接收方執行(b+s)次OPRF例項。b和分別代表布穀鳥表或堆容器的長度。並將OPRF值和元素x的對應儲存位置聯絡起來。


3.傳送方擁有金鑰K,本地計算H和S並將每一行打亂再傳送給接收方。由於我們選擇的是3個hash函式,因此H的長b寬3,s是一個常數,因此需要傳輸3b+sn


4.接收方雜湊表每一行的比較次數為3次,堆容器中的每個元素需要比較n次但只有s個元素且s為常量,因此只需要比較(3+s)n次,將比較次數和通訊負載從O(n^2)下降到O(nlogn)。























剛剛我們分析了H和S的大小,分別為3b和sn。KKRT16對其又做了一個小的改變,可將比較次數提升10%。將H分為了三類,因此每一行只需要比較1次了。減少了2n次比較次數!




接下來我們重新分析一下基於KK13OTE構造的隱私相等性和BaRK-OPRF的隱私相等性測試的區別!


對於兩個元素的相等性測試如上:


1.若是1-2OT則r位元長度的元素需要r個OT例項


2.若是1-2^lot則r位元長度的元素需要r/l個OT例項。KK13中的l一般設定為8bit,所以是1-256OT


2.若是1- ∞ OT則任意位元長度的元素僅需要一個OT例項。這樣得到一個性質:OT執行次數不再與元素大小相關!




最近投稿的那篇文章裡寫到了OTE的baseOT數量不與集合大小有關僅與計算安全引數有關,因此OTE適用於大集合場景!剛好借這篇文章的定理證明一下!


這是我們生成的m*k矩陣,為得到m個OT例項,我們需要進行k個公鑰加密,也就是k個baseOT,k即是矩陣的寬度也是偽隨機編碼的長度,也就是k的引數應該設定為多少?


k的大小主要有兩個限制條件1.BaRK-OPRF中需要一個偽隨機程式碼來實現不小於計算安全引數的漢明距離。


2.PSI協議中傳送方需要計算(3+s)n個OPRF值,我們需要其是偽隨機的,因此需要底層PRF具有m-RK-PRF安全性(m=(3+s)n)


前面我們提到了鬆弛(relaxed)OPRF, 這裡我們做一個更廣泛的定義,有兩個函式F,F’。只要給定F’(k,r)就能高效的計算出F(k,r),F被稱為relaxed-PRF.

————————————————

版權宣告:本文為CSDN博主「閉眼神」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處連結及本宣告。

原文連結:https://blog.csdn.net/qq_38798147/article/details/126699038


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70026777/viewspace-2935517/,如需轉載,請註明出處,否則將追究法律責任。

相關文章