对称可搜索加密

本文是对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​>和要搜索的wordWWW都透露给Bob。这无异于将明文暴露给Bob(通过kik_iki​计算出TiT_iTi​,再与密文异或即可得出明文"块")

除非Alice能够知道WWW在每个文件中的位置:比如,只有三个文件,Alice知道在第一个文件中位置为3,第二个在7号位值,第三个里面没有该word,搜索的时候Alice只需要将k3,k7k_3,k_7k3​,k7​和WWW发送给Bob就行了,Bob使用将所有三个文件中的35号位置进行计算后即可.
计算可得

  • 第一个文件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​)>
  • 第三个文件两个都不满足
    最终可得三个文件中,前两个含有wordW。

但是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》相关推荐

  1. Σoφoς:简单但有效的前向安全对称可搜索加密

    本文是阅读了论文[1]之后写的笔记,为了能对论文提出的方案和核心思想有更透彻的了解.这篇论文提出了一个可搜索加密的方案Σoφoς(Sophos),是一个比较简单好理解的方案,并且能达到前向安全.当然也 ...

  2. 对称加密算法 - Java加密与安全

    对称加密算法什么是对称加密算法呢?1. 对称加密算法就是加密和解密使用同一个密钥,例如我们使用WinRAR,对文件进行打包的时候,我们可以设置一个秘密,在解压的时候需要使用同一个密码,才能够正确的解压 ...

  3. 伸展树(一) - 图文解析与C语言实现

    概要 本章介绍伸展树.它和"二叉查找树"和"AVL树"一样,都是特殊的二叉树.在了解了"二叉查找树"和"AVL树"之后, ...

  4. 《自然》重磅:清华团队首次提出“类脑计算完备性”,智源学者张悠慧等为共同一作...

    8月初,清华大学施路平团队基于研究成果,类脑计算芯片"天机芯"第二代的论文登上<自然>(Nature)杂志封面,实现了中国人工智能领域<自然>论文零突破. ...

  5. 中国在国际上首次提出全液态量子器件与计算技术概念

    来源:人民日报 概要:液态金属可以用来制造计算机核心电子元件,进而引发计算机的革命? 液态金属可以用来制造计算机核心电子元件,进而引发计算机的革命?不久前,我国一个研究小组发表了一项成果,在国际上首次 ...

  6. 【数据结构与算法】4.数据结构图文解析系列

    数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 数据结 ...

  7. 首次提出“智能经济形态”,与实体经济深度融合

    央全面深化改革委员会审议通过<关于促进人工智能和实体经济融合的指导意见>,会议强调构建数据驱动.人机协同.跨界融合.共创分享的智能经济形态.智能经济形态如何实现?本月27日,"2 ...

  8. 集装箱计算机跟踪管理方式,集装箱运输第二章集装箱及其箱务管理(图文)解析.ppt...

    集装箱运输第二章集装箱及其箱务管理(图文)解析 第2章 集装箱及其箱务管理 2.1 集装箱及其标准化 2.2 集装箱箱务管理业务 2.3 集装箱跟踪管理及箱务管理现代化 2.1 集装箱及其标准化 2. ...

  9. 数据结构图文解析之:哈夫曼树与哈夫曼编码详解及C++模板实现

    0. 数据结构图文解析系列 数据结构系列文章 数据结构图文解析之:数组.单链表.双链表介绍及C++模板实现 数据结构图文解析之:栈的简介及C++模板实现 数据结构图文解析之:队列详解与C++模板实现 ...

最新文章

  1. vue连线 插件_【Vue CLI】手把手教你撸插件
  2. Java 多线程 之 suspend挂起 线程实例
  3. 2016年全球电信市场资本支出略增0.7%至3140亿美元
  4. 对于数组,为什么会出现a [5] == 5 [a]?
  5. python 遍历_python中使用iterrows()对dataframe进行遍历的示例
  6. HTML页面显示缩略所有空格为一格的方法
  7. 盘点数学里十大不需语言的证明
  8. 快速掌握MATLAB应用,只要从这一步开始!
  9. 阐述linux IPC(五岁以下儿童):system V共享内存
  10. vue js table colspan rowspan
  11. OpenCV学习笔记(三):图像对比度、亮度调整源码
  12. linux依据时间过滤文件,详解Linux查找目录下的按时间过滤的文件
  13. 通过网络连接检测计算机病毒,网络安全习题及答案
  14. 用Vue.js递归组件构建一个可折叠的树形菜单
  15. [论文评析] ICLR,2021,An image is worth 16x16 words-transformers for image recognition at scale
  16. keil4注册机注册不了怎么办?我已经试过下面的注册机不行。求各大神指教一下?
  17. 实验一 结构化分析(软件工程)
  18. 深度学习系列讲座:谷歌翻译核心技术 Seq2Seq
  19. 解决mysql插入中文出现错误ERROR 1366 (HY000): Incorrect string value: ‘\x80\x85\xEF\xBC\x8C\xE6...‘ for column
  20. 金属塑性成形计算机模拟仿真,金属塑性成形计算机模拟的若干进展

热门文章

  1. 调用摄像头并获取图像_获得对摄像头的访问权
  2. 金融学习之二——稀里糊涂的回测
  3. 树莓派系列-6-Qt控制树莓派GPIO(3B V1.2)
  4. Cocos Creator | 飞刀大乱斗开发教程系列(二)!
  5. Python+Vue计算机毕业设计分级预警的网约车监管系统92pug(源码+程序+LW+部署)
  6. 用等步长分割法(Equal Interval Search Method)求函数最大值的Python程序
  7. AutoCAD二次开发自定义线型
  8. 数据科学中常见的9种距离度量方法,包括欧氏距离、切比雪夫距离、半正矢距离等
  9. 计算机学科经典著作上
  10. Vue-Cli4.x项目通过electron打包桌面应用程序