图文解析Song首次提出的对称可搜索加密方案---《Practical Techniques for Searches on Encrypted Data》
对称可搜索加密
本文是对Song
等人首次提出的可搜索加密方案Practical Techniques for Searches on Encrypted Data中的四个方案进行图文式的演示,具体预备知识以及文章方案译文请参照该文章。
接下来直接上方案
方案一
加密方案如图所示,加密过程为:
1、Alice首先将每一个文件都分解成 l
块
2、Alice使用为随机值<S1,S2,...,SlS_1, S_2,...,S_lS1,S2,...,Sl>以及自己选择的一系列密钥<k1,k2,...,klk_1,k_2,...,k_lk1,k2,...,kl>对每一"块"进行加密
注意:
- <S1,S2,...,SlS_1, S_2,...,S_lS1,S2,...,Sl>和伪随机置换函数FFF是公开的
- 不同文件之间的W1W_1W1这些块是不同的,
1
只是该word
在文件中的位置,所以加密的具体细节为:
- 每一个文件的相同位置
word
不一定相同,但是加密时使用的 TiT_iTi 是相同的
3、Bob解密时需要所有的KiK_iKi,对文件中的块进行序列扫描,每到一个块就进行计算 Ci⊕WC_i\oplus WCi⊕W ,看得到的TiT_iTi是否符合该位置通过Si,kiS_i,k_iSi,ki计算得到的TiT_iTi
注意:每个文件中相同位置的元素是不一定相同的,下标只代表该"块"在文件中的位置
缺点:通过该方式能实现可搜索加密,但是却要把所有密钥<k1,k2,...,klk_1,k_2,...,k_lk1,k2,...,kl>和要搜索的word
WWW都透露给Bob。这无异于将明文暴露给Bob(通过kik_iki计算出TiT_iTi,再与密文异或即可得出明文"块")
除非Alice能够知道WWW在每个文件中的位置:比如,只有三个文件,Alice知道在第一个文件中位置为
3
,第二个在7
号位值,第三个里面没有该word
,搜索的时候Alice只需要将k3,k7k_3,k_7k3,k7和WWW发送给Bob就行了,Bob使用将所有三个文件中的3
和5
号位置进行计算后即可.
计算可得
- 第一个文件C3⊕W3=<S3,Fk3(S3)>C_3 \oplus W_3 = <S_3,F_{k_3}(S_3)>C3⊕W3=<S3,Fk3(S3)>
- 第二个文件满足C5⊕W5=<S5,Fk5(S5)>C_5 \oplus W_5 = <S_5,F_{k_5}(S_5)>C5⊕W5=<S5,Fk5(S5)>
- 第三个文件两个都不满足
最终可得三个文件中,前两个含有word
W。
但是Alice是不可能知道每个文件WWW所在的位置。
方案二
方案一中在搜索过程中Alice将所有kik_iki都泄露给了Bob,这是我们不想看到的,方案二只是将所有kik_iki的生成方式变换了一下,不再是Alice随机选取并保存,而是使用对应的WiW_iWi生成的:
kik_iki = fk′(Wi)f_{k'}(W_i)fk′(Wi)
这样的话只需要对k′k'k′进行保密,加密方式同方案一
搜索时,将WWW以及其对应的kik_iki(kik_iki是通过WiW_iWi计算出来的)发送给Bob,这样就成功解决了将所有密钥发送给Bob,Bob无法获得其他位置的信息。
如图所示
假设有两个文件,每个文件中都有三个关键词,这里和方案一的图有所不同,方案一种的图WiW_iWi中的下标 i 表示该word再文件中的位置,下图中的标号如下
- C/S的下标表示文件中的位置
- W/k的下标表示具体一个关键词,即第一个文件的第二个word和第二个文件的第一个word是相同的。在这种情况下加密后的密文如图所示。
当需要搜索含有W3W_3W3的文件时,Alice将W3W_3W3和 k3k_3k3=fk′(W3)f_{k'}(W_3)fk′(W3)发送给Bob,
Bob对所有文件的所有密文进行解密:
Ci⊕Wi=<Si,Fk3(Si)>C_i \oplus W_i = <S_i, F_{k_3}(S_i)>Ci⊕Wi=<Si,Fk3(Si)>
如果文件中某个word符合该条件,则该文件包含又word W3W_3W3
注意
- Bob是不知道给的关键词和密钥是由W3W_3W3生成的,Bob只知道你给了一个word和密钥,所以要遍历来计算
- 只有进行计算的关键词为W3W_3W3才能得到该等式,因为k3k_3k3是由W3W_3W3生成的,加密是该密文是由k3k_3k3进行加密的
该方案保证了只需要给Bob传递对应密钥即可,并且Bob永远得不到其他位置word的任何信息,但是仍然将搜索的word 的明文暴露给了Bob
方案三
方案二中Alice搜索时依然将明文的word暴露给了Bob,接下来继续改进,使得不会讲明文暴露给Bob,即将铭文进行隐藏起来----隐式搜索
加密算法中将
Ci=Wi⊕<Si,Fk3(Si)>C_i = W_i \oplus<S_i, F_{k_3}(S_i)>Ci=Wi⊕<Si,Fk3(Si)>
中的WiW_iWi进行加密得到
Xi=Ek′′(Wi)X_i = E_{k''}(W_i)Xi=Ek′′(Wi),其中Ek′′E_{k''}Ek′′为确定性加密算法如AES,DES等
加密算法改为
Ci=Xi⊕<Si,Fk3(Si)>C_i = X_i \oplus<S_i, F_{k_3}(S_i)>Ci=Xi⊕<Si,Fk3(Si)>
加密解密算法与方案二相同,只不过将其中的WiW_iWi改为XiX_iXi即可
方案四
方案三做到了隐藏查询和控制查询,
但是有一个问题,即及解密时
Alice将XiX_iXi和kik_iki发送给Bob时,Bob搜索到一个文件后将包含CiC_iCi的文件返回给Alice,Alice怎么进行解密呢?
- 方案三中加密为 Ci=Xi⊕<Si,Fk3(Si)>C_i = X_i \oplus<S_i, F_{k_3}(S_i)>Ci=Xi⊕<Si,Fk3(Si)>
- 得到的文件是整个文件,即文件密文包含多个密文"块",<C1,C2,C3C_1,C_2,C_3C1,C2,C3>
- 假设刚刚我们通过<X3,k3X_3, k_3X3,k3>进行搜索,那么我们仅仅知道这些文件密文"块"中包含我们要查找的所有密文块,但是我们并不知道在哪一个位置
- 并且要得到明文文件必须将所有密文快进行解密
假设对于密文CiC_iCi,我们并不知道它是由哪个word(Wj)(W_j)(Wj)加密的到的,所以得不到kjk_jkj,从而得不到<Si,Fkj(Si)S_i,F_{k_j}(S_i)Si,Fkj(Si)>,所以无法通过异或得到XiX_iXi,最终无法得到明文。
方案二相同,也得不到密文快是哪一个word进行加密的到的
而方案一的kik_iki和word没有关系,和文件密文块位置有关系,所以是可以进行解密的
这就意味着合法用户自身也无法得到密文文件,这违背了密码学的原则
方案四便是解决这个问题
kik_iki不再使用kik_iki = fk′(Wi)f_{k'}(W_i)fk′(Wi)来生成
- 将XiX_iXi划分为左右两部分,即Xi=(Li,Ri)X_i = (L_i, R_i)Xi=(Li,Ri),其中LiL_iLi的长度和SiS_iSi相同,RiR_iRi的长度与Fkj(Si)F_{k_j}(S_i)Fkj(Si)相同
- kik_iki使用XiX_iXi的左半部分LiL_iLi;来生成
ki=fk′(Li)k_i = f_{k'}(L_i)ki=fk′(Li)
此时,加密算法仍然为
Ci=Xi⊕Ti=<Li,Ri>⊕<Si,Fkj(Si)>C_i = X_i \oplus T_i = <L_i, R_i> \oplus <S_i, F_{k_j}(S_i)>Ci=Xi⊕Ti=<Li,Ri>⊕<Si,Fkj(Si)>
当解密时,只需要截取CiC_iCi与SiS_iSi相同的长度CLiC_{L_i}CLi,可以得到
Li=CLi⊕SiL_i = C_{L_i} \oplus S_iLi=CLi⊕Si
从而得到kik_iki
ki=fk′(Li)k_i = f_{k'}(L_i)ki=fk′(Li)
不用知道word是哪一个,只需要知道CiC_iCi的左半部分就可以通过SiS_iSi得到XiX_iXi的左半部分,从而求出该位置的密钥,进而解密出明文块
这就是提出的对称可搜索加密的方案,当然存在一定功能和安全上的问题,后续就展开了对SSE各方面的研究
接下来会出第一篇非对称可搜索加密的方案Dan Boneh首次提出非对称可搜索加密方案—《Public Key Encryption with Keyword Search》
图文解析Song首次提出的对称可搜索加密方案---《Practical Techniques for Searches on Encrypted Data》相关推荐
- Σoφoς:简单但有效的前向安全对称可搜索加密
本文是阅读了论文[1]之后写的笔记,为了能对论文提出的方案和核心思想有更透彻的了解.这篇论文提出了一个可搜索加密的方案Σoφoς(Sophos),是一个比较简单好理解的方案,并且能达到前向安全.当然也 ...
- 对称加密算法 - Java加密与安全
对称加密算法什么是对称加密算法呢?1. 对称加密算法就是加密和解密使用同一个密钥,例如我们使用WinRAR,对文件进行打包的时候,我们可以设置一个秘密,在解压的时候需要使用同一个密码,才能够正确的解压 ...
- 伸展树(一) - 图文解析与C语言实现
概要 本章介绍伸展树.它和"二叉查找树"和"AVL树"一样,都是特殊的二叉树.在了解了"二叉查找树"和"AVL树"之后, ...
- 《自然》重磅:清华团队首次提出“类脑计算完备性”,智源学者张悠慧等为共同一作...
8月初,清华大学施路平团队基于研究成果,类脑计算芯片"天机芯"第二代的论文登上<自然>(Nature)杂志封面,实现了中国人工智能领域<自然>论文零突破. ...
- 中国在国际上首次提出全液态量子器件与计算技术概念
来源:人民日报 概要:液态金属可以用来制造计算机核心电子元件,进而引发计算机的革命? 液态金属可以用来制造计算机核心电子元件,进而引发计算机的革命?不久前,我国一个研究小组发表了一项成果,在国际上首次 ...
- 【数据结构与算法】4.数据结构图文解析系列
数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 数据结 ...
- 首次提出“智能经济形态”,与实体经济深度融合
央全面深化改革委员会审议通过<关于促进人工智能和实体经济融合的指导意见>,会议强调构建数据驱动.人机协同.跨界融合.共创分享的智能经济形态.智能经济形态如何实现?本月27日,"2 ...
- 集装箱计算机跟踪管理方式,集装箱运输第二章集装箱及其箱务管理(图文)解析.ppt...
集装箱运输第二章集装箱及其箱务管理(图文)解析 第2章 集装箱及其箱务管理 2.1 集装箱及其标准化 2.2 集装箱箱务管理业务 2.3 集装箱跟踪管理及箱务管理现代化 2.1 集装箱及其标准化 2. ...
- 数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现
0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...
最新文章
- vue连线 插件_【Vue CLI】手把手教你撸插件
- Java 多线程 之 suspend挂起 线程实例
- 2016年全球电信市场资本支出略增0.7%至3140亿美元
- 对于数组,为什么会出现a [5] == 5 [a]?
- python 遍历_python中使用iterrows()对dataframe进行遍历的示例
- HTML页面显示缩略所有空格为一格的方法
- 盘点数学里十大不需语言的证明
- 快速掌握MATLAB应用,只要从这一步开始!
- 阐述linux IPC(五岁以下儿童):system V共享内存
- vue js table colspan rowspan
- OpenCV学习笔记(三):图像对比度、亮度调整源码
- linux依据时间过滤文件,详解Linux查找目录下的按时间过滤的文件
- 通过网络连接检测计算机病毒,网络安全习题及答案
- 用Vue.js递归组件构建一个可折叠的树形菜单
- [论文评析] ICLR,2021,An image is worth 16x16 words-transformers for image recognition at scale
- keil4注册机注册不了怎么办?我已经试过下面的注册机不行。求各大神指教一下?
- 实验一 结构化分析(软件工程)
- 深度学习系列讲座:谷歌翻译核心技术 Seq2Seq
- 解决mysql插入中文出现错误ERROR 1366 (HY000): Incorrect string value: ‘\x80\x85\xEF\xBC\x8C\xE6...‘ for column
- 金属塑性成形计算机模拟仿真,金属塑性成形计算机模拟的若干进展
热门文章
- 调用摄像头并获取图像_获得对摄像头的访问权
- 金融学习之二——稀里糊涂的回测
- 树莓派系列-6-Qt控制树莓派GPIO(3B V1.2)
- Cocos Creator | 飞刀大乱斗开发教程系列(二)!
- Python+Vue计算机毕业设计分级预警的网约车监管系统92pug(源码+程序+LW+部署)
- 用等步长分割法(Equal Interval Search Method)求函数最大值的Python程序
- AutoCAD二次开发自定义线型
- 数据科学中常见的9种距离度量方法,包括欧氏距离、切比雪夫距离、半正矢距离等
- 计算机学科经典著作上
- Vue-Cli4.x项目通过electron打包桌面应用程序