对称可搜索加密
本文是对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
Ci⊕W ,看得到的
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使用将所有三个文件中的3
和5
号位置进行计算后即可.
计算可得
- 第一个文件 C 3 ⊕ W 3 = < S 3 , F k 3 ( S 3 ) > C_3 \oplus W_3 = <S_3,F_{k_3}(S_3)> C3⊕W3=<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)> C5⊕W5=<S5,Fk5(S5)>
- 第三个文件两个都不满足
最终可得三个文件中,前两个含有word
W。
但是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)> Ci⊕Wi=<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=Xi⊕Ti=<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=CLi⊕Si
从而得到 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》