學習&轉載文章:安全多方計算:(2)隱私信息檢索方案彙總分析
前言
多頭貸問題是網絡小額貸款平臺放款時所要考慮的一個重要問題。假設銀行A有一潛在貸款客戶小張,銀行A爲了足夠多的瞭解小張的信用情況,希望向其他多家銀行查詢小張貸款情況或信用記錄。但因爲害怕其他銀行搶走該客戶,所以銀行A不希望泄露自己在查詢小張這一事實。是否可以通過技術手段解決銀行A的訴求?答案是肯定的,即圖1漫畫中的“隱私信息檢索技術”——一種不泄露查詢條件和查詢結果的加密技術。
圖1 隱私信息檢索技術應用示例漫畫
隱私信息檢索(Private InformationRetrieval – PIR,也叫匿蹤查詢)是安全多方計算中很實用的一項技術,用來保護用戶的查詢隱私。其目的是保證用戶向服務器(數據源方)提交查詢請求時,在用戶查詢信息不被泄漏的條件下完成查詢[1]。即整個查詢過程中服務器不知道用戶具體查詢信息及查詢出的數據項。
一句話總結就是:不泄漏查詢條件和查詢結果
爲什麼可搜索加密技術無法替代隱私信息檢索技術
通過前面對PIR技術的描述,可知PIR的目的是保護用戶查詢隱私。提到“保護用戶查詢隱私”,會有人想到可搜索加密技術,但可搜索加密技術並不能替代PIR技術。
先來簡單瞭解可搜索加密技術。
顧名思義,可搜索加密就是在加密的情況下實現搜索功能,常用於雲計算當中。可搜索加密應用示例如圖2所示,能夠實現將用戶的數據進行特殊的加密後上傳到雲服務器上, 並且可以實現根據關鍵字進行檢索的功能。(更詳細內容可閱讀本公衆號文章:防止雲端數據與查詢行爲泄露—可搜索加密)
圖2 可搜索加密應用示例
可搜索加密實現密文檢索時,過程示例如圖3所示。可簡單描述爲:檢索用戶提交密文關鍵字(keyword3),雲服務器將密文關鍵字與密文數據庫比對,比對成功後則將對應的密文數據(數據3)返回給檢索用戶,最終檢索用戶對拿到的密文數據進行解密。
圖3 可搜索加密密文檢索示例
整個過程中雲服務器不知道檢索關鍵字(keyword3)和檢索結果(數據3)對應的原始明文是什麼。但是,數據擁有者(不一定是雲服務器)監聽到檢索結果的話,可以直接解密並得到對應的明文。即可搜索加密技術僅能阻止雲服務器獲得用戶查詢隱私,不能阻止數據擁有者獲得用戶查詢隱私(這很正常,雲計算環境下,雲服務器中一段密文數據的擁有者和檢索者,可能是同一用戶)。
- 總結一下:可搜索加密僅能保護查詢條件,不能保護查詢結果
3類場景隱私信息檢索方案
爲了加強保護用戶查詢隱私,使得查詢條件和查詢結果僅查詢用戶可知,安全多方計算中的PIR技術應運而生。目前常見的PIR方案實現有3類,分別是基於不經意傳輸(Oblivious Transfer,OT)的PIR實現、基於同態加密的PIR實現和keyword PIR實現。
其中基於不經意傳輸的PIR和基於同態加密的PIR需要檢索用戶提前知道被檢索數據在服務端數據庫中索引號。
3類方案的實現過程介紹如下。
基於不經意傳輸的PIR實現
基於不經意傳輸的PIR實現過程如圖4所示(不經意傳輸協議此處不在贅述,更多內容可閱讀本公衆號文章:安全多方計算(1):不經意傳輸協議),主要利用的是n選1的OT協議。
圖4 基於不經意傳輸的PIR實現過程
基於OT的PIR實現過程有5個重要步驟:
- 服務端有\(n\)條數據,則產生\(n\)個RSA公私鑰對,並將\(n\)個私鑰保留,\(n\)個公鑰發送給用戶端。
- 用戶隨機產生一個大整數key(key爲第5步中的解密密鑰),已知用戶要檢索第\(t\)條數據,則用戶用收到的第\(t\)個RSA公鑰加密大整數key,將加密結果\(s\)發送給服務端。
- 服務端用保留的\(n\)個RSA私鑰,依次嘗試解密\(s\),獲得\(n\)個解密結果,依次爲\((key1,key2,…,keyt,…,keyn)\)。
- 服務端利用對稱加密算法(此處爲AES算法),利用\((key1,...,keyn)\),加密對應的消息\((m1,...,mn)\),將產生的密文消息\((M1,...,Mn)\)發送給用戶。
- 用戶利用第2步中的key,對第\(t\)條密文\(M_t\)進行對稱解密「即檢索用戶需要提前知道檢索索引」,則得到想要檢索的第\(t\)條原始明文消息\(m_t\)。
代碼實現
基於同態加密的PIR實現
基於同態加密的PIR實現過程如圖5所示,此處採用paillier加法半同態加密算法[2],paillier同態加密算法計算過程參見文獻2,此處不贅述,但強調3個paillier算法特點:
(1)可以實現兩個密文加法計算【c+c】;
(2)可以實現一個密文與一個明文相乘【c*m】;
(3)由於加密時用到隨機數,所以相同的明文、相同的密鑰,可以產生很多個不同的密文,這些不同的密文解密後都能得到相同的原始明文。
圖5 基於同態加密的PIR實現過程
基於paillier同態加密的PIR實現過程有4個重要步驟:
- 用戶端產生同態加密公鑰\(pk\)和私鑰\(sk\)。
- 已知服務端有\(n\)條數據,用戶要檢索第\(t\)條數據,則產生一個\(n\)維密文向量\(vector=(v1,…,vn)\),其中第\(t\)項是公鑰\(pk\)加密數字1後的密文「即檢索用戶需要提前知道檢索索引」,其他項是公鑰\(pk\)加密數字0後的密文。將\(vector\)和公鑰\(pk\)發送給服務端,paillier算法第3個特點保證了\(vector\)中的\(n\)條密文都不重複,保證服務端無法猜出哪一條是數字1的密文。
- 服務端將\(vector\)和\(n\)條明文數據集做向量內積運算,得到密文結果\(en\_result\),將\(en\_result\)發送給用戶端。同態加密的密文計算結果解密後與明文計算結果相等,相當於\(en\_result=E(m1*0 + … + mt-1*0 + mt*1 + mt+1*0+ … + mn*0, pk) = E(mt, pk)\)。
- 用戶端利用私鑰\(sk\)對\(en\_result\)進行解密,得到想要檢索的第\(t\)條原始明文消息\(mt\)。
代碼實現
keyword PIR實現
實際上,在大多數的查詢場景中,查詢方往往不知道自己要查詢的數據的索引號【即要檢索的是第幾個(索引)】,而大多根據關鍵詞進行查詢,此類方案又稱keyword PIR,可以利用paillier同態加密和拉格朗日插值多項式實現(拉格朗日插值多項式細節可閱讀本公衆號文章:祕密共享—隱私計算和區塊鏈共識中的榫卯),具體實現過程如圖6所示。
圖6 keyword PIR實現過程
keyword PIR實現過程有5個重要步驟:
- 服務端有明文數據集【關鍵詞,數據】\(((x1,m1),…,(xn,mn))\),對此明文數據集進行拉格朗日多項式插值,插值結果即爲最高次冪爲\(n-1\)的多項式\(g(x)\);對於圖6中的多項式\(f(x)\),\(f(x) = (x-x1)*(x-x2)*…*(x-xn)\),展開後即爲圖6中的\(f(x)\)。數據集中任意一個點(\(xi,mi)\),滿足\(f(xi)=0,g(xi)=mi\)。
- 用戶生成paillier同態加密公鑰\(pk\)和私鑰\(sk\)。
- 對於待查關鍵字\(xt\),用戶利用\(pk\)分別加密\(xt\)的1次方到\(xt\)的\(n\)次方,組成密文向量\(vector\),發送給服務端。
- 服務端利用密文向量\(vector\),和\(f(x)、g(x)\)的係數,分別計算同態密文\(E(f(xt))、E(g(xt))\),將計算結果發送給用戶。
- 用戶利用私鑰\(sk\)對兩條密文進行解密,如果\(f(xt)=0\),則\(g(xt)\)即爲檢索結果;否則檢索結果爲空。
代碼實現
方案驗證及總結分析
前文對3類PIR方案實現方法做了描述,此處對3類方法做一個全面的比對分析,方便讀者對3類方案有一個更直觀的理解。
本文所提PIR方案理論分析
表1所示的表格,分別從依賴技術、通信開銷、計算開銷等方面對3類PIR方案特點做了總結。
表1 3類PIR方案特點總結
依賴技術 | 通信量與數據集(n條)關係 | 需要提前知道被檢索數據索引號 | 計算開銷與數據集(n條)關係 | |
---|---|---|---|---|
基於OT的PIR | 公鑰密碼,對稱密碼 | n個RSA公鑰n條AES密文 | 是 | n次公鑰解密n次對稱加密 |
基於同態加密PIR | 同態加密 | n+1條同態密文 | 是 | 3n次同態加密 |
Keyword-PIR | 多項式插值;同態加密 | n+2條同態密文 | 否 | 5n次同態加密2次多項式構造 |
- 在計算開銷上,由於同態加密計算開銷大於RSA計算開銷,所以基於OT的PIR方案計算開銷有優勢;
- 通信開銷上,如果服務端每條明文數據都較長,如數千字節,則基於同態加密PIR通信開銷較小。
代碼實例驗證
本環節,我們用python代碼分別實現了基於OT的PIR和基於同態加密的PIR,讓讀者對PIR性能有更清晰的瞭解。我們模擬服務端有一個漏洞庫,共有2245條數據(數據爲綠盟真實漏洞庫數據,原始數據數十萬條,此處僅選取一部分用於實驗),用戶輸入“軟件名稱+具體版本號”可查詢對應的漏洞信息,查詢過程中不會泄漏檢索條件和檢索結果。此部分僅展示用戶獲知檢索項在服務端中的索引號後(索引號如何獲取非本文重點,此處略過),分別模擬利用基於OT的PIR和基於同態加密的PIR實現漏洞信息檢索。
圖7 基於OT的PIR代碼實驗結果
圖7爲基於OT的PIR代碼實現,網絡爲內部局域網,服務端爲低配Ubuntu虛擬機,模擬結果總耗時3.3秒,通信開銷RSA公鑰傳輸消耗約0.68MB,全量AES密文傳輸消耗約5.6MB。
圖8 基於paillier同態加密的代碼實驗結果
圖8爲基於paillier同態加密的PIR代碼實現,相同配置下,計算開銷耗時117秒,通信開銷密文查詢向量消耗約1.3MB網絡開銷,檢索結果傳輸消耗約0.14MB。可以明顯比對出前兩類PIR方案在計算開銷和網絡開銷上的差異。
總結
本文介紹了安全多方計算中很實用的一類方案——隱私信息檢索方案,此類方案可在保護用戶隱私的前提下,實現多方數據安全查詢。另外,分別介紹了3種不同的實現方法原理,並對其進行理論對比分析,且對其中的兩類方法做了代碼實現。通過理論分析和實驗對比,能夠讓讀者對隱私信息檢索有一個更直觀的認識。
參考文獻
[1]https://blog.csdn.net/hellompc/article/details/103784360
[2]Paillier P . Public-key cryptosystemsbased on composite degree residuosity classes[J]. Advances in CryptologyLeurocrypt, 2004.
- 程序實現:
- 拉格朗日插值法
- OT代碼
- 基於RSA的
- 基於DH的
- PIR
- 基於OT的
- 基於Paillier的
- 帶關鍵詞的PIR