APSI - 2


上一篇 APSI-1 其實就是對開源庫README文件的一個翻譯加上自己的一點點理解,因為篇幅過大,導致繼續編輯有些卡頓,所以新開一篇繼續。
前面介紹了APSI的大致技術、優化方法、以及舉例說明了主要流程(unbalanced-PSI)。
下面主要介紹labeled-PSI!

Labeled Mode

Basic Idea

label模式和前面講的沒有太大區別,但需要一些額外的解釋。receiver除了想要知道其查詢項是否在sender的集合中之外,還想知道發送方與這些項關聯的數據,即交集數據對應的label。(sender中存儲的數據視為key-value)。

換成人話,就是sender中存儲的都是key-value型的數據,而receiver中只有key,receiver想通過輸入key,得到sender中匹配到的value值。即【帶關鍵詞的PIR】。論文和APSI中使用的是{item - lable}表示!

為了理解labled-APSI的工作原理,回顧前面講到的Basic Idea,在對receiver發過來的加密查詢項\(Q\)進行計算時,匹配多項式\(M(x)\)的輸出要么是0的加密(匹配上),要么是非0的加密(沒有匹配)。在labled-PSI中,sender會創建另外一個多項式\(L(x)\),即插值多項式,具有以下性質:如果\({(Y_i, V_i)}\)表示sender得數據集,則\(L(Y_i) = V_i\),收到receiver發送過來的Q,sender計算多項式對\(((M(Q), L(Q))\),並將結果返回給receiver;receiver解密該結果對,觀察第一個值是否為0,如果是,則第二個值即是所需的label!

Large Labels

一個較大的問題,就是所有的密文計算都需要模plain_modulus,但是sender的lable比這個要長的多。對於比較長的item,在Large Items中,首先先講item通過hash,生成一個大小為(80-128 bit)的hash值【控制item的長度】,然后經過一系列的batch,對其編碼。這種方法也適用於解決lable過長的問題。也就是說,lable可以被分解成類似於item的小部分,對於每個部分,我們可以形成一個lable插值多項式,當對所對應的item進行評估時,輸出lable的該部分。

這還不是一個令人滿意的解決方案,因為我們的item沒有固定的大小,而且非常長(最大128位)。lable比item長,lable可以分成多個部分,每一部分的長度為item的長度。對於每個部分,我們可以構造一個單獨的標簽插值多項式,在加密查詢中對它們進行求值,並將每個加密結果返回給receiver。receiver解密結果並連接它們,以恢復匹配項的lable。

Label Encryption

上述方法存在一個必須解決的嚴重問題。回想一下我們是如何使用OPRF來防止sender的item部分(或全部)泄漏給receiver的:給出一個item\(Y\),匹配多項式不能直接計算\(Y\),而是計算\(ItemHash(s, Y)\),這表示item Y所對應的OPRF值\(OPRF(s, Y)\)的前128 bit,這就意味着標簽插值多項式L應該滿足\(L(ItemHash(s, Y_i)) = V_i\)對於sender的每一個item \(Y_i\),然而receiver能夠猜出一些\(ItemHash(s, Y_i)\),就可以查詢出其所對應的lable,這是不能接受的,因為receiver是不能知道item \(Y_i\)

上面的意思在論文中,其實就是將OPRF的值分為兩部分,一部分用於計算求交多項式,這里label沒有加密,所以不安全。下面講的是另外一部分用於加密label。
要明白:\(ItemHash(s, Y)\)表示\(OPRF(S,Y)\)的前128bit;插值多項式\(L(ItemHash(s, Y_i)) = V_i\)

為了解決這個問題,sender使用了一個對稱加密函數\(Enc(<input>, <key>, <nonce>)\)使用來自\(OPRF(s, Y_i)\)的輸出的另外一部分加密\(label V_i\)。具體來說,加密密鑰為\(LabelKey(s, Y_i),label :V_i,item:Y_i\),是256 bit的輸出\(OPRF(s, Y_i)\)的剩余128bit。因此發送給receiver的label就變成了\(Enc(V_i, LabelKey(s, Y_i), nonce)\)

\(LabelKey(s, Y_i)\)表示\(OPRF(s, Y_i)\)的剩余128bit;

還有一些問題,因為receiver一定是想知道些什么nonce【半誠實的receiver】。第一種選擇是選擇使用常量或空的nonce(沒有隨機數)。這種情況下,必須注意,對手可能辨別出兩個不同的加密label,其中兩個label對應的是同一個item,使用的是相同的OPRF的key:s,這樣就有可能得到關於label的相關信息。這種情況會發生,因為APSI支持更新item的label
另一種選擇是使用隨機生成的長nonce(每次加密都不同)。APSI的實現是隨機采樣一個nonce,和加密的\(V_i\)拼接在一起。具體來說,sender為每一個\(item Y_i\)隨機采樣一個nonce,然后計算出插值多項式\(L(ItemHash(s, Y_i)) = nonce\),然后與加密的\(V_i\)拼接:$$L(ItemHash(s, Y_i)) = nonce | Enc(V_i, LabelKey(s, Y_i), nonce)$$

nonce 理解為隨機數吧

receiver從sender那里得到一些加密的label,沒有任何作用,除非他知道對應的item \(Y_i\)。此外即使receiver通過猜測\(ItemHash(s, Y_i)\)獲得了\(nonce | Enc(V_i, LabelKey(s, Y_i), nonce)\),在離線攻擊中,枚舉出所有的item:\(Y_i\),他仍然無法獲得label,因為\(LabelKey(s, Y_i)\)是從\(OPRF(s, Y_i)\)中獲得的,而不是\(Y_i\)

APSI允許sender指定nonce的字節大小,默認的nonce單位16 字節,但是值越小,性能越好!

Partial Item Collisions

還有一個必須要解決的問題:回顧Pracice,sender構造一個大的hash表,並將其分解成多個鋸齒狀的bin bundles。在label-PSI中,每一個bin bundles不僅包含item的part,也包含對應的label的part,以及標簽插值多項式。標簽插值多項式不是為整個label創建的,而是對label的part分別創建,即使將整個item分解為part前會加密。

現在看一下發生了什么:item416-part1 和 item12-part1是相同的,如果其所對應的標簽label416-part1 和 label12-part1是不同的,則創建一個插值多項式L是不可能的,因為不能針對一個item而輸出兩個label416-part1 和 label12-part1。【疑惑,插值多項式是插值的item的位置?】

在將item插入bin bundle之前,先檢查一下label是否已經出現在相同的位置,就能解決這個問題。如果已經存在,那么該item就不能插入到該bin bundle,而是新建一個bin bundle,再插入。該問題只在label-PSI下存在,會導致比unlabeled-PSI有更差的打包率(items_inserted / theoretical_max)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM