不經意傳輸擴充套件(OTE)-不經意偽隨機函式(OPRF)-隱私集合求交(PSI)
第一篇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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 隱私集合求交(PSI)協議研究綜述協議
- 【隱私計算筆談】MPC系列專題(三):不經意傳輸與混淆電路
- kotlin 擴充套件(擴充套件函式和擴充套件屬性)Kotlin套件函式
- 【Kotlin】擴充套件屬性、擴充套件函式Kotlin套件函式
- Chrome 擴充套件程式包含惡意程式碼,竊取加密錢包私鑰Chrome套件加密
- Kotlin擴充套件函式Kotlin套件函式
- Z 函式(擴充套件KMP)函式套件KMP
- 偽經驗;不稱職面試官的面試經面試
- 使用Kotlin擴充套件函式擴充套件Spring Data案例Kotlin套件函式Spring
- es6-函式擴充套件函式套件
- java: web應用中不經意的記憶體洩露JavaWeb記憶體洩露
- discuz擴充套件工具集合套件
- “安慰劑按鈕”:一場不經意間進行的AI普及AI
- 那些你不經意間使用的設計模式(一) - 建立型模式設計模式
- Kotlin-常用擴充套件函式Kotlin套件函式
- HIVE自定義函式的擴充套件Hive函式套件
- Kotlin基礎 — 擴充套件函式Kotlin套件函式
- 擴充套件包上傳套件
- 那些離不開的 Chrome 擴充套件外掛Chrome套件
- flask路由系統、偏函式、CBV、模板、請求響應、session、請求擴充套件Flask路由函式Session套件
- 計算機潛意識-神經元計算機
- js隨機數生成器的擴充套件JS隨機套件
- ES6之函式的擴充套件函式套件
- PHP的Sodium加密擴充套件函式了解PHP加密套件函式
- Kotlin的幾個擴充套件函式Kotlin套件函式
- JMeter擴充套件開發:自定義函式JMeter套件函式
- PHP的SPL擴充套件庫(四)函式PHP套件函式
- 擴充套件表示式套件
- 一個能夠保護個人收藏夾隱私的Chrome擴充套件Chrome套件
- 10.還不會擴充套件Dart中的類?套件Dart
- 不經意發現的dba_objects和dba_tables中的細節Object
- 隨機數擴充隨機
- SQL Server資料庫檔案不滿足擴充套件條件時不再自動擴充套件SQLServer資料庫套件
- php 擴充套件安裝(隨筆)PHP套件
- PHP的Mhash擴充套件函式的學習PHP套件函式
- 寫擴充套件性好的程式碼:函式套件函式
- Kotlin委託 & 擴充套件 & 高階函式Kotlin套件函式
- 編寫自己的php擴充套件函式 (轉)PHP套件函式