防止云端数据与查询行为泄露—可搜索加密
为了解决上述提到的问题,用户所有的数据都可以密文的方式上传,这种存储方式降低了隐私泄露。但同时它也引入新的问题:比如,当云服务器有若干的密文数据时,他们怎么能找回本人的数据,而无需向终端输入任何有关该数据的明文内容。
可搜索加密技术就可以很好的应对这个问题。通过该技术,用户可先分别加密数据和数据标签,然后将加密后的数据与标签一同存储在云服务器上。当用户搜索包含字“KW”的文件时,他能够发送关于关键字的标签(也称为陷门的文件)到云服务器。云服务器将接纳到的关键词陷门与每一个加密文件的标签进行匹配。假如匹配成功,则该文件中包含的关键字。此时,服务器再将匹配的文件发送给用户,然后用户在本地进行解密即可。从安全性上说,云服务器除了有可能猜到任何两个搜索文件是否包含相同关键字的外,对其他信息不清楚。
总的来说,可搜索加密具有以下的安全性优势:
可证明安全:即不可信服务器仅仅通过密文不能获得有关明文的任何信息;
控制搜索:即不可信服务器不能在没有合法用户的认证下进行搜索;
隐藏查询:即用户向服务器发起有关一个关键字的询问然而却不必向服务器表明关键字是什么;
查询独立:即不可信服务器除了查询结果之外不能获得有关明文的任何信息。
3.1算法核心部分描述
文献[1]提出的可搜索加密方案的关键算法称为PAEKS,其伪代码实现如下:
PAEKS算法是基于决定性双线性 (Decisional BilinearDiffie-Hellman, DBDH)假设和修正线性决策(modified Decision Linear,mDLIN)假设,同时使用了双线性对运算增强了其安全性。
现假设用户A有一个开源的公共资源数据,A把存放于云服务器中,但A为了防止云服务器擅自恶意的盗取数据,或者收集其他用户的查询数据来分析用户的行为习惯,因此A需要对数据进行加密处理。
现假设用户B(可以是一个用户,也可以是一个群组)需要从A的公共数据库中查询数据,为了防止第三方盗取任何有用的数据信息,所以他们之间可以使用可搜索加密技术。
首先密码系统给A、B颁发公私钥,私钥为A、B随机选择安全的大数,然后使用密码系统计算公钥,把公钥存放到公钥列表中,设A的公私钥对为(PKs,SKs),B的公私钥对为(PKr,SKr)。现A存放一个关键字为W的数据到云服务的,需要对关键字做如下计算:
然后存储C=(C1,C2)到关键列表,同时把数据加密存储。
当B想去A的数据库中查询时,为了防止被收集行为数据,所以B计算一个陷门
然后传输此陷门给云服务器。
云服务器拿到后,去依次验证云服务器存放的关键字密文,返回验证结果给B,验证流程如下:
等式满足时,则验证通过,证明此关键字密文就是B要查询的关键字。
3.2代码实现及演示
本案例模拟了2个用户,一个用户产生关键字信息,另一个用户使用关键字去匹配查询。匹配成功后,返回其明文信息。具体包括以下主要流程:
1.密钥系统初始化
2.两个用户分别产生公私钥对。公钥后续加入公钥列表,私钥由用户自行秘密的保存
3.用户1选择信息nsfocus进行关键字的封装同时加密原信息,产生过程中使用了数据发布者的私钥、数据查询用户的公钥、关键信息数据进行计算。(此过程在本地客户端发生,生成后的签名、密文数据通过网络发生到云端)
4.用户2使用关键字nsfocus进行查询信息时,首先使用数据发布者的公钥与自己的私钥生成陷门。(此过程在本地客服端发生,将生成的陷门发生给云端服务器去作数据匹配验证)
5.云平台使用密码文匹配检索,验证成功后返回密文数据给数据查询者,此过程中不知用户的任何信息,不知道用户查询的具体信息。
6.效果如下
3.3总结
但上述方案的不足也很明显,可以看到,每个文件提供给每个查询者时都需要单独生成一个关键字信息,这样就导致如果同一个文件要共享给一个群组时,就要生成若干关键字文件,这样不仅到处存储加大、难易管控,同时也大大的降低了验证的效率。那怎么解决这个问题呢?请听下回分解……
参考文献
[1] Huang Q,Li H.Anefficient public-key searchable encryption scheme secure against inside keywordguessing attacks[J]. Information Sciences, 2017, s 403–404:1-14.