题目:
Dual-Server Boolean Data Retrieval for Highly Scalable Secure File Sharing Services
摘要:
可搜索加密SE
公钥加密关键词搜索PEKS
对称可搜索加密SSE
PEKS不能抵抗关键词猜测攻击KGA
解决方案:双服务器PEKS(DS-PEKS)和服务器辅助的PEKS(SA-PEKS)
但上述两者仅支持单关键词检索模式——实际应用中受限——需要表达能力更强的布尔查询
相关知识
1.倒排索引(关键词到文档的映射)
倒排索引=单词词典+倒排列表(文件)
词典(数据结构:哈希+链表/树)的每一个索引项都记录了单词信息和指向倒排列表的指针
倒排列表(倒排索引Posting项组成)记录某个单词出现的所有文档集合以及单词出现在文档中的位置信息POS
倒排文件:存储倒排列表的(物理)文件
一个倒排索引的示例:
2.伪随机函数
定义:F: (K, X) -> Y(一个密钥和一个输入,并生成一个伪随机的输出)
确定性:一个特定输入只会给出一个特定输出
随机性:输出在输出空间随机选取
系统运行流程
1.系统初始化:KGC运行全局初始化算法,输入安全参数,生成系统公共参数。
KGC运行密钥生成算法,为前端服务器、后端服务器和客户端分配公钥和私钥
2.加密文件生成:数据拥有者运行文档加密算法,用自己的私钥对文件进行加密,输出加密文档元组
3.数据读取者的查询issue:数据读取者运行陷门生成算法,发布一个布尔查询,生成一个检索陷门(搜索令牌)。数据写入者运行转换密钥生成算法为云生成数据共享的转换密钥。
4.云上文档检索:前端服务器运行前端服务器测试算法,在收到的数据读取者的检索陷门上生成一个新的检索陷门。然后,后端服务器先检索前端服务器的陷门和有效性,运行文档搜索算法来定位对应的文件并返回文件给数据读取者。
系统模型
本篇提出DSB-SE(布尔查询 boolean query)
先介绍DSC-SE(联合查询 conjunctive query)算法:
Step1.初始化(KGC)
Step2.服务器密钥生成(KGC)
Step3.客户端密钥生成(KGC)
Step4.文档加密(Data Writer)
①对于一个新来的文档,对其进行解析,提取所有单词(关键词),将文档的关键词与倒排索引中已经存储的单词进行对比,若有,则用GET()函数获取该关键词的文档频率c并+1,然后用UPDATE()函数将倒排索引中该单词的索引进行更新;若没有,则将该关键词作为新的单词加入倒排索引。
②索引更新后,对 该文档的关键词 和 与该文档相关的关键词索引(该文档被写入了所有与之相关的关键词对应的倒排列表中) 进行加密。
对文档中的每个关键词,用伪随机函数生成一个l,一个z,计算e0,e1作为该关键词对应文档的加密索引,计算一个双线性对作为加密的关键词。最终生成EDB和XSET存在数据库中。
Questions
①为什么要计算xind?
因为xtag作为关键词密文,或许需要嵌入文档编号ind,但为了安全做了一个盲化。另一个地方是在加密文档索引e1中用到,主要是为了后面判断查询的关键词是否在数据库关键词密文中,正确性验证用到。
②EDB作为文档加密索引为什么要基于每个关键词做计算?
检索时,是基于EDB循环查找的,且是基于频率最低的关键词查找的,所以是为了查询中的关键词能匹配到数据库中的关键词,再根据关键词得到文档索引。
--------------------------------------------------------数据准备完成-------------------------------------------------
--------------------------------------------------------检索阶段开始-------------------------------------------------
Step5.陷门生成(Data Reader)
对于一个包含多个关键词的联合查询集合Q,对每个关键词计算T1,T2作为该关键词的陷门trap,生成所有关键词的陷门集合。不断的生成查询陷门集合token(l,trap)发送给云(前端服务器?),直到云发送停止命令。(每一轮发送的陷门用到的l,z都是由w1(sterm)和i作为伪随机函数的输入生成的)
Questions
1 为什么要根据云的响应来循环发送陷门?(每轮生成的陷门只因i而不同)
或许是为了找到查询中与频率最低的关键词对应的文档个数匹配的i(但这样数据访问者的计算开销会随s-term的count而增大)
Step6.转换密钥生成(Data Writer)
data writer生成一个转换密钥tk给云(后端服务器? √),允许将data reader的查询模式视为data writer的查询模式(用于授权?数据共享?)
Questions
1 计算tk的作用的什么?
tk是数据拥有者为后端服务器计算的,主要是提供前三项用于检索,最后一项用于判断关键词是否在XSet中
Step7.前端测试(Front Server)
当陷门token(l,trap)中的l在EDB中时,对每个l计算一个STAG,生成一个新的token(l,trap,stag)给后端服务器。
Questions
1 前端-后端服务器模型是怎样抵抗内部关键词猜测攻击的?
或许是在不合谋的前提下,将原本泄露给一个实体现在泄露给了两个实体,导致两个实体所得的的信息不能合并,从而无法做完整的猜测。
Step8.后端测试(Back Server)
根据得到的token和tk计算出一个数据与关键词密文Xset进行对比来检查陷门的有效性。
Step9.检索(Back Server)
Step10.解密(Data Reader)