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)
Order-Preserving Encoding(OPE 保序加密)_第1张图片
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右子树中最左边的孩子(这是我推测的,原文没有看太懂)
Order-Preserving Encoding(OPE 保序加密)_第2张图片

你可能感兴趣的:(隐私保护算法)