图文解析Song首次提出的对称可搜索加密方案---《Practical Techniques for Searches on Encrypted Data》

对称可搜索加密

本文是对Song等人首次提出的可搜索加密方案Practical Techniques for Searches on Encrypted Data中的四个方案进行图文式的演示,具体预备知识以及文章方案译文请参照该文章

接下来直接上方案


方案一

加密方案如图所示,加密过程为:

1、Alice首先将每一个文件都分解成 l
在这里插入图片描述
2、Alice使用为随机值< S 1 , S 2 , . . . , S l S_1, S_2,...,S_l S1,S2,...,Sl>以及自己选择的一系列密钥< k 1 , k 2 , . . . , k l k_1,k_2,...,k_l k1,k2,...,kl>对每一"块"进行加密
在这里插入图片描述

注意:

  • < S 1 , S 2 , . . . , S l S_1, S_2,...,S_l S1,S2,...,Sl>和伪随机置换函数 F F F是公开的
  • 不同文件之间的 W 1 W_1 W1这些块是不同的,1 只是该word在文件中的位置,所以加密的具体细节为:
    • 每一个文件的相同位置word不一定相同,但是加密时使用的 T i T_i Ti 是相同的

3、Bob解密时需要所有的 K i K_i Ki,对文件中的块进行序列扫描,每到一个块就进行计算 C i ⊕ W C_i\oplus W CiW ,看得到的 T i T_i Ti是否符合该位置通过 S i , k i S_i,k_i Si,ki计算得到的 T i T_i Ti
在这里插入图片描述

注意:每个文件中相同位置的元素是不一定相同的,下标只代表该"块"在文件中的位置

缺点:通过该方式能实现可搜索加密,但是却要把所有密钥< k 1 , k 2 , . . . , k l k_1,k_2,...,k_l k1,k2,...,kl>和要搜索的word W W W都透露给Bob。这无异于将明文暴露给Bob(通过 k i k_i ki计算出 T i T_i Ti,再与密文异或即可得出明文"块")

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

  • 第一个文件 C 3 ⊕ W 3 = < S 3 , F k 3 ( S 3 ) > C_3 \oplus W_3 = <S_3,F_{k_3}(S_3)> C3W3=<S3,Fk3(S3)>
  • 第二个文件满足 C 5 ⊕ W 5 = < S 5 , F k 5 ( S 5 ) > C_5 \oplus W_5 = <S_5,F_{k_5}(S_5)> C5W5=<S5,Fk5(S5)>
  • 第三个文件两个都不满足
    最终可得三个文件中,前两个含有wordW。

但是Alice是不可能知道每个文件 W W W所在的位置。


方案二

方案一中在搜索过程中Alice将所有 k i k_i ki都泄露给了Bob,这是我们不想看到的,方案二只是将所有 k i k_i ki的生成方式变换了一下,不再是Alice随机选取并保存,而是使用对应的 W i W_i Wi生成的:

k i k_i ki = f k ′ ( W i ) f_{k'}(W_i) fk(Wi)

这样的话只需要对 k ′ k' k进行保密,加密方式同方案一
搜索时,将 W W W以及其对应的 k i k_i ki( k i k_i ki是通过 W i W_i Wi计算出来的)发送给Bob,这样就成功解决了将所有密钥发送给Bob,Bob无法获得其他位置的信息。

如图所示
假设有两个文件,每个文件中都有三个关键词,这里和方案一的图有所不同,方案一种的图 W i W_i Wi中的下标 i 表示该word再文件中的位置,下图中的标号如下

  • C/S的下标表示文件中的位置
  • W/k的下标表示具体一个关键词,即第一个文件的第二个word和第二个文件的第一个word是相同的。在这种情况下加密后的密文如图所示。
    在这里插入图片描述
    当需要搜索含有 W 3 W_3 W3的文件时,Alice将 W 3 W_3 W3 k 3 k_3 k3= f k ′ ( W 3 ) f_{k'}(W_3) fk(W3)发送给Bob,
    Bob对所有文件的所有密文进行解密:
    C i ⊕ W i = < S i , F k 3 ( S i ) > C_i \oplus W_i = <S_i, F_{k_3}(S_i)> CiWi=<Si,Fk3(Si)>
    如果文件中某个word符合该条件,则该文件包含又word W 3 W_3 W3

注意

  • Bob是不知道给的关键词和密钥是由 W 3 W_3 W3生成的,Bob只知道你给了一个word和密钥,所以要遍历来计算
  • 只有进行计算的关键词为 W 3 W_3 W3才能得到该等式,因为 k 3 k_3 k3是由 W 3 W_3 W3生成的,加密是该密文是由 k 3 k_3 k3进行加密的

该方案保证了只需要给Bob传递对应密钥即可,并且Bob永远得不到其他位置word的任何信息,但是仍然将搜索的word 的明文暴露给了Bob

方案三

方案二中Alice搜索时依然将明文的word暴露给了Bob,接下来继续改进,使得不会讲明文暴露给Bob,即将铭文进行隐藏起来----隐式搜索
加密算法中将

C i = W i ⊕ < S i , F k 3 ( S i ) > C_i = W_i \oplus<S_i, F_{k_3}(S_i)> Ci=Wi<Si,Fk3(Si)>

中的 W i W_i Wi进行加密得到

X i = E k ′ ′ ( W i ) X_i = E_{k''}(W_i) Xi=Ek(Wi),其中 E k ′ ′ E_{k''} Ek为确定性加密算法如AES,DES等

加密算法改为

C i = X i ⊕ < S i , F k 3 ( S i ) > C_i = X_i \oplus<S_i, F_{k_3}(S_i)> Ci=Xi<Si,Fk3(Si)>

加密解密算法与方案二相同,只不过将其中的 W i W_i Wi改为 X i X_i Xi即可


方案四

方案三做到了隐藏查询和控制查询,
但是有一个问题,即及解密时
Alice将 X i X_i Xi k i k_i ki发送给Bob时,Bob搜索到一个文件后将包含 C i C_i Ci的文件返回给Alice,Alice怎么进行解密呢?

  • 方案三中加密为 C i = X i ⊕ < S i , F k 3 ( S i ) > C_i = X_i \oplus<S_i, F_{k_3}(S_i)> Ci=Xi<Si,Fk3(Si)>
  • 得到的文件是整个文件,即文件密文包含多个密文"块",< C 1 , C 2 , C 3 C_1,C_2,C_3 C1,C2,C3>
  • 假设刚刚我们通过< X 3 , k 3 X_3, k_3 X3,k3>进行搜索,那么我们仅仅知道这些文件密文"块"中包含我们要查找的所有密文块,但是我们并不知道在哪一个位置
  • 并且要得到明文文件必须将所有密文快进行解密

假设对于密文 C i C_i Ci,我们并不知道它是由哪个word ( W j ) (W_j) (Wj)加密的到的,所以得不到 k j k_j kj,从而得不到< S i , F k j ( S i ) S_i,F_{k_j}(S_i) Si,Fkj(Si)>,所以无法通过异或得到 X i X_i Xi,最终无法得到明文。
方案二相同,也得不到密文快是哪一个word进行加密的到的
而方案一的 k i k_i ki和word没有关系,和文件密文块位置有关系,所以是可以进行解密的

这就意味着合法用户自身也无法得到密文文件,这违背了密码学的原则
方案四便是解决这个问题

k i k_i ki不再使用 k i k_i ki = f k ′ ( W i ) f_{k'}(W_i) fk(Wi)来生成

  • X i X_i Xi划分为左右两部分,即 X i = ( L i , R i ) X_i = (L_i, R_i) Xi=(Li,Ri),其中 L i L_i Li的长度和 S i S_i Si相同, R i R_i Ri的长度与 F k j ( S i ) F_{k_j}(S_i) Fkj(Si)相同
  • k i k_i ki使用 X i X_i Xi的左半部分 L i L_i Li;来生成

k i = f k ′ ( L i ) k_i = f_{k'}(L_i) ki=fk(Li)

此时,加密算法仍然为

C i = X i ⊕ T i = < L i , R i > ⊕ < S i , F k j ( S i ) > C_i = X_i \oplus T_i = <L_i, R_i> \oplus <S_i, F_{k_j}(S_i)> Ci=XiTi=<Li,Ri><Si,Fkj(Si)>

当解密时,只需要截取 C i C_i Ci S i S_i Si相同的长度 C L i C_{L_i} CLi,可以得到

L i = C L i ⊕ S i L_i = C_{L_i} \oplus S_i Li=CLiSi

从而得到 k i k_i ki

k i = f k ′ ( L i ) k_i = f_{k'}(L_i) ki=fk(Li)

不用知道word是哪一个,只需要知道 C i C_i Ci的左半部分就可以通过 S i S_i Si得到 X i X_i Xi的左半部分,从而求出该位置的密钥,进而解密出明文块

这就是提出的对称可搜索加密的方案,当然存在一定功能和安全上的问题,后续就展开了对SSE各方面的研究

接下来会出第一篇非对称可搜索加密的方案Dan Boneh首次提出非对称可搜索加密方案—《Public Key Encryption with Keyword Search》

  • 10
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值