1. 程式人生 > >Order-Preserving Encoding(OPE 保序加密)

Order-Preserving Encoding(OPE 保序加密)

An Ideal-Security Protocol for Order-Preserving Encoding 來自 2013 IEEE Symposium on Security and Privacy

Order-Preserving Encoding(OPE):OPE是一種加密方案,它的密文的排序順序與相應的明文順序相匹配。在本文中,作者主要寫了兩種方案:一種是在半可信模型下(即伺服器是honest-but-curious);一種是在惡意模型(即伺服器是malicious) 在這裡插入圖片描述 1. 半可信伺服器 (1)mutable order-preserving encoding(mOPE) OPE Tree的結構:

OPE Tree: 左孩子小於父節點,右孩子大於父節點 例如:將69,32,20,10,25的密文儲存到伺服器上 ① 將69的密文放入OPE Tree的根節點,[]100-------4 ② 向伺服器請求根結點69的密文,解密後比較,32<69,放在69左結點,更新encoding:[0]10--------2 ③ 向伺服器請求根結點69的密文,解密後比較,20<69,再向伺服器請求左結點32的密文,解密後比較20<32, 將20的密文放到32的左結點上,更新encoding:[00]1-----1 rebalance:這時發現已經有3個結點沒有右結點,對OPE Tree進行rebalance,即將中間結點32放在根節點,20放在左結點,69放在右結點,更新OPE Table ④ 向伺服器請求根結點32的密文,解密後比較:10<32,再請求32的左結點20,解密後發現 10<20,再請求20的左結點,發現20沒有孩子,將10插入20的左結點,並更新encoding ⑤向伺服器請求根結點32的密文,解密後比較:25<32,再請求32的左結點20,解密後發現 25>20,再請求20的右結點,發現20沒有右孩子,將25插入20的右結點,並更新encoding mOPE 加密方案:

a. 金鑰生成:客戶端執行
b. 初始化伺服器:即初始化OPE Tree和 OPE Table(僅包含±∞),返回一個初始狀態的st(代表伺服器的狀態)
c. 加密(插入):
客戶端:將明文v進行加密(加密演算法可以是任意的演算法, eg:AES),密文為c,並將c 傳送到伺服器端
伺服器端:
①查詢是否c在OPE Tree中,如果在則返回沒有改變的st,否則在OPE Tree中插入在c,並計算c的OPE encoding,更新OPE Table
② 如果OPE Tree需要去平衡,平衡OPE Tree,並更新所有的受影響的節點的OPE encoding。
③ 伺服器返回一個新的狀態st,
d. 解密:在客戶端執行,將c解密為v
e. 查詢排序:如果c在OPE Table 中,將OPE Table相應的編碼返回,否則返回error

(2)storage-aware OPE (stOPE)

same-time OPE security:執行order詢問時,伺服器只需要知道目標值的順序關係,當前值和舊的值之間的關係不應該洩露。例如:20,32,69 ,如果先刪除32,再插入55,那麼32和55之間的大小關係不應該洩露。 storage-aware OPE (stOPE):考慮了一個儲存系統的模型(不僅是資料庫型別的儲存)

a. 初始化:(Initialization): 客戶端生成一個金鑰,而伺服器也初始化它的狀態。
b. 插入(Insert):(RND代表對稱加密)
     客戶端: 計算c ← RND.Enc(sk, v),並將c傳送到伺服器
     伺服器:遍歷OPE Tree,如果存在c,說明已經c之前被加過了,計算相應的OPE編碼e。如果對於v的密    文c_t 存在,伺服器增加它的ref-count(表示這個值被插入的次數),如果v已經不在這個OPE Tree中,將c插入到OPE Tree並且ref-count=1。
c. 刪除(Remove):
    客戶端: 計算c ← RND.Enc(sk, v) ,並將c傳送到伺服器.
    伺服器:遍歷OPE Tree,
	如果c不存在,返回error;
	如果c存在且ref-count >1, 則ref-count = ref-count -1;
	如果c存在且ref-count =1,將c從OPE Tree和OPE Table中移除;
	如果節點刪除觸發樹平衡,伺服器也會類似地更新OPE Table和任何包含那些OPE Encoding的儲存器。  
d. 查詢(Query): 查詢到最貼近v的v_1,v_2,使得v_1≤v< v_2
客戶端: 計算c ← RND.Enc(sk, v) ,並將c傳送到伺服器.
伺服器:遍歷OPE Tree,按照性質3來定位最鄰近的間隔。
查詢排序:如果c在OPE Table 中,將OPE Table相應的編碼返回,否則返回error

性質3:對於包含±∞的B-tree中的任何節點v來說,v_left≤v 的最大值v_left是: 1) v的左子樹中最右邊的孩子或者 2) 從v到根節點路徑上的第一個值,右邊界是v右子樹中最左邊的孩子(這是我推測的,原文沒有看太懂) 在這裡插入圖片描述