本文为一篇阅读笔记,原文链接:
Randex,Mitigating Range Injection Attacks on Searchable Encryption
一、SE机制
- 经典的图:
- 需要注意的点:
(1)数据的传输过程中,Owner拥有秘钥 K I , K D K_I,K_D KI,KD;Users拥有秘钥 K D K_D KD;Server是两个秘钥都没有的~
(2) K I K_I KI用来加密索引、生成Token; K D K_D KD用来加密数据,解密数据
(3)Search函数的返回值是标识符集合: I D Q ← S e a r c h ( I , T Q ) ID_Q←Search(I,T_Q) IDQ←Search(I,TQ)
(4)SE的安全性从两个角度讨论:- 数据隐私:给一个加密索引和加密元组,攻击者不知道索引值或元组值的明文
- 查询隐私:给一个查询,攻击者不能获取明文的查询
二、Attack
2. 符号标识
- D = D 1 , . . . , D n D={D_1,... ,D_n} D=D1,...,Dn :明文元组集合
-
D
i
=
[
F
i
,
d
i
]
D_i=[F_i,d_i]
Di=[Fi,di]:
D
i
D_i
Di表示明文元组,包含
F
i
F_i
Fi和
d
i
d_i
di,其中
F
i
Fi
Fi表示该元组所存储信息,
d
i
d_i
di表示索引值,eg:
F
i
F_i
Fi代表一个病人的医疗信息,
d
i
d_i
di就表示指向该信息的索引
此处需要注意的点: D i D_i Di需要被加密两次,在索引层被加密一次,数据层被加密一次 - C i C_i Ci:密文元组, D i Di Di的加密版本
- d i ∈ [ 1 , T ] d_i\in[1,T] di∈[1,T]: 索引值,范围为 [ 1 , T ] [1,T] [1,T] 该数据集上有T个元组、对应T个索引
- i d i id_i idi:是元组 D i Di Di的身份识别码,一般为该元组的内存地址或指针
- 查询准确率可表示为: P r [ i d i ∈ I D Q ∣ d i ∈ Q ] = 1 Pr[id_i\in ID_Q |d_i\in Q]=1 Pr[idi∈IDQ∣di∈Q]=1
3. 攻击概述
已知元组Ci的身份标识符 i d i id_i idi,通过一系列注入查询,得到该元组对应的索引值 d i d_i di(这个索引值是存在服务器上的,通过 K I K_I KI加密的)
已知:
- T:索引空间大小
- i d i id_i idi:加密元组C的身份标识符
目的:
- 指向该元组对应的索引值 d i d_i di
方式:
- 一个二分查找过程:其中,服务器观察上一个查询的访问模式,根据观察结果向合谋用户发出相应范围的查询请求,合谋用户将此请求发往数据所有者,数据所有者将生成的Token发回给用户
4. 攻击假设
- 攻击者是诚实且好奇的服务器,可以静悄悄地不注入不破坏,就观察访问模式
- 攻击者可以与第二个用户合谋,提交一系列adaptively-chosen 范围查询
5. 攻击描述
Given:加密元组
C
i
C_i
Ci的身份码:id
Figure out:加密元组
C
i
C_i
Ci的索引值:d
Process:
≤
l
o
g
2
T
\le log_2T
≤log2T次的二分查找,每一次范围查找的range都取决于上一次查找的访问模式
- 二者的合谋实现了通过访问模式执行范围诸如攻击,揭露某个元组的明文索引值(这个索引加密存在服务器中,只有数据所有者知道)
- 这样的攻击是可以扩展的,进一步地,用户可以知道整个数据及所有元组的索引值
- 本文的范围注入攻击是选择查询攻击的变种,二者的区别如下:
- 选择查询攻击:适用于关键字查询的可搜索加密 R i g h t a r r o o w Rightarroow Rightarroow线性搜索:Q=[1,1],Q=[2,2]……Q=[T,T]
- 范围注入攻击:适用于一维范围查询的可搜索加密 R i g h t a r r o o w Rightarroow Rightarroow二分查找:Q=[1,T/2],Q=[1,T/4]……
6. 猜测概率
(1) 未混淆
对任意一个元组 D = ( F , d ) D=(F,d) D=(F,d),索引值的二进制向量 b = ( b 1 , … , b T ) b=(b_1,…,b_T) b=(b1,…,bT)
P a t t a c k = { P r ( d ∗ = d ∣ b d = 1 ) = 1 − μ , i f T > 1 P r ( d ∗ = d ∣ b d = 1 ) = 1 , i f T = 1 P_{attack}=\begin{cases} Pr(d^*=d|b_d=1)=1-\mu, if \; T>1\\ Pr(d^*=d|b_d=1)=1,\qquad if \; T=1\\ \end{cases} Pattack={Pr(d∗=d∣bd=1)=1−μ,ifT>1Pr(d∗=d∣bd=1)=1,ifT=1
{ μ : 可 以 忽 略 的 概 率 , 由 S E 机 制 引 入 d ∗ : 猜 测 索 引 值 d : 实 际 索 引 值 \begin{cases} \mu:可以忽略的概率,由SE机制引入\\ d^*:猜测索引值\\ d:实际索引值\\ \end{cases} ⎩⎪⎨⎪⎧μ:可以忽略的概率,由SE机制引入d∗:猜测索引值d:实际索引值
(2) 引入Randex混淆
对任意一个元组
D
=
(
F
,
d
)
D=(F,d)
D=(F,d),被混淆后的索引向量:
b
′
=
(
b
1
′
,
…
,
b
T
′
)
b'=(b_1',…,b_T')
b′=(b1′,…,bT′)
则,对b’的猜测概率为1,而对b的猜测概率实际上是和b’的混淆程度有关系的,混淆程度越大,猜测概率越小,具体如下:
P a t t a c k = P r ( d ∗ = d ∣ b d = 1 ) = P r ( d ∗ = d ∣ b d = 0 ) ⋅ P r ( b d = 0 ∣ b d = 1 ) + P r ( d ∗ = d ∣ b d = 1 ) ⋅ P r ( b d = 1 ∣ b d = 1 ) = μ ⋅ ( 1 − p ) ( 1 − q ) + 1 β + 1 ⋅ [ 1 − ( 1 − p ) ( 1 − q ) ] \begin{aligned} P_{attack}&=Pr(d*=d|b_d=1)\\ &=Pr(d*=d|b_d=0) \cdot Pr(b_d=0|b_d=1)\\ &\quad +Pr(d*=d|b_d=1) \cdot Pr(b_d=1|b_d=1)\\ &=\mu \cdot(1-p)(1-q)+\frac{1}{\beta+1}\cdot[1-(1-p)(1-q)]\\ \end{aligned} Pattack=Pr(d∗=d∣bd=1)=Pr(d∗=d∣bd=0)⋅Pr(bd=0∣bd=1)+Pr(d∗=d∣bd=1)⋅Pr(bd=1∣bd=1)=μ⋅(1−p)(1−q)+β+11⋅[1−(1−p)(1−q)]
{ β : 在 b ′ 中 , 除 第 d 位 外 , 值 为 1 的 位 数 , 故 b ‘ 中 有 β + 1 位 1 1 β + 1 : 本 身 向 量 b 中 只 有 1 位 为 1 , 这 才 是 正 常 的 索 引 向 量 混 淆 后 b ’ 可 能 含 有 多 个 位 为 1 , 所 以 可 能 是 其 中 任 意 一 个 \begin{cases} \beta:在b'中,除第d位外,值为1的位数,故b‘中有\beta+1位1\\ \frac{1}{\beta+1}:本身向量b中只有1位为1,这才是正常的索引向量\\ \qquad混淆后b’可能含有多个位为1,所以可能是其中任意一个\\ \end{cases} ⎩⎪⎨⎪⎧β:在b′中,除第d位外,值为1的位数,故b‘中有β+1位1β+11:本身向量b中只有1位为1,这才是正常的索引向量混淆后b’可能含有多个位为1,所以可能是其中任意一个
P r a n d e x = μ + ( p + q − p q ) ⋅ 1 β + 1 P_{randex}=\mu+(p+q-pq)\cdot \frac{1}{\beta+1} Prandex=μ+(p+q−pq)⋅β+11
7. 猜测概率期望
E
[
P
r
a
n
d
e
x
]
=
E
[
μ
+
(
p
+
q
−
p
q
)
⋅
1
β
+
1
]
=
μ
+
(
p
+
q
−
p
q
)
⋅
E
[
1
β
+
1
]
\begin{aligned} E[P_{randex}] &=E[\mu+(p+q-pq)\cdot\frac{1}{\beta+1}]\\ &=\mu+(p+q-pq)\cdot E[\frac{1}{\beta+1}]\\ \end{aligned}
E[Prandex]=E[μ+(p+q−pq)⋅β+11]=μ+(p+q−pq)⋅E[β+11]
其中
β
\beta
β 的所有可能取值有
β
∈
[
β
0
,
β
1
,
…
,
β
T
−
1
]
=
[
0
,
1
,
…
,
T
−
1
]
\beta \in[{\beta_0,\beta_1,…,\beta_{T-1}}]=[0,1,…,T-1]
β∈[β0,β1,…,βT−1]=[0,1,…,T−1]
令
r
j
为
β
取
β
j
的
概
率
令r_j为\beta取\beta_j的概率
令rj为β取βj的概率,则:
E
[
1
β
+
1
]
=
E
[
α
]
=
∑
j
=
0
T
−
1
α
j
⋅
r
j
=
∑
j
=
0
T
−
1
α
j
(
j
=
0
T
−
1
)
P
r
[
b
′
=
0
∣
b
=
0
]
T
−
1
−
j
P
r
[
b
′
=
1
∣
b
=
0
]
j
(
有
β
j
个
1
,
即
有
j
个
1
)
\begin{aligned} E[\frac{1}{\beta+1}] &=E[\alpha]\\ &=\sum_{j=0}^{T-1}\alpha_j \cdot r_j \\ &=\sum_{j=0}^{T-1}\alpha_j ({j=0}^{T-1})Pr[b'=0|b=0]^{T-1-j}Pr[b'=1|b=0]^j (有\beta_j个1,即有j个1)\\ \end{aligned}
E[β+11]=E[α]=j=0∑T−1αj⋅rj=j=0∑T−1αj(j=0T−1)Pr[b′=0∣b=0]T−1−jPr[b′=1∣b=0]j(有βj个1,即有j个1)
E [ P r a n d e x ] = μ + ( p + q − p q ) ∑ j = 0 T − 1 α j j T − 1 P r [ b ′ = 0 ∣ b = 0 ] T − 1 − j P r [ b ′ = 1 ∣ b = 0 ] j = μ + ( p + q + p q ) ∑ j = 0 T − 1 ( 1 − p + p q ) ( T − 1 − j ) ( q − p q ) j \begin{aligned} E[P_{randex}] &=\mu+(p+q-pq)\sum_{j=0}^{T-1}\alpha_j {j}^{T-1} Pr[b'=0|b=0]^T-1-j Pr[b'=1|b=0]^j\\ &=\mu+(p+q+pq)\sum_{j=0}^{T-1}(1-p+pq)^(T-1-j)(q-pq)^j\\ \end{aligned} E[Prandex]=μ+(p+q−pq)j=0∑T−1αjjT−1Pr[b′=0∣b=0]T−1−jPr[b′=1∣b=0]j=μ+(p+q+pq)j=0∑T−1(1−p+pq)(T−1−j)(q−pq)j
8.几个问题
(1)密钥的拥有权:
- 服务器:不拥有任何密钥
- 数据所有者:拥有密钥 K I 和 K D K_I和K_D KI和KD
- 用户: { P r i m a r y u s e r s : K D S e c o n d a r y u s e r s : 不 拥 有 任 何 密 钥 \begin{cases} Primary \ users:K_D \\ Secondary \ users: 不拥有任何密钥\end{cases} {Primary users:KDSecondary users:不拥有任何密钥
(2)Range Query和Index Query之间的转换问题:
- 二者是不需要转换的,我们攻击的目的是获得指向目标元组的索引值,不是索引标号
(3)在加密时,对每一个元组 C i C_i Ci的处理如下:
C
i
=
(
F
i
,
d
i
⏟
KI
)
⏟
KD
C_i=\underbrace{(F_i,\underbrace{d_i}_{\text{KI}})}_{\text{KD}}
Ci=KD
(Fi,KI
di)
C
i
=
(
F
i
,
d
i
)
⟹
d
i
⟶
K
I
d
i
∗
C
i
=
(
F
i
,
d
i
∗
)
⟹
C
i
⟶
K
D
D
i
D
i
=
(
F
i
,
d
i
∗
)
∗
C_i=(F_i,d_i) \stackrel{\rm {d_i\stackrel{K_I}{\longrightarrow}d_i^*}}{\Longrightarrow}C_i=(F_i,d_i^*) \stackrel{C_i\stackrel{K_D}{\longrightarrow}D_i}{\Longrightarrow}D_i=(F_i,d_i^*)^*
Ci=(Fi,di)⟹di⟶KIdi∗Ci=(Fi,di∗)⟹Ci⟶KDDiDi=(Fi,di∗)∗
(4)待解决:
问题背景:
- 文中提到Randex可以保护访问模式的同时完全避免FalsePositive,原因是在数据存储时,只混淆了索引,未混淆每一个数据记录 D i D_i Di中存储的索引,因此用户可以在本地获得这些数据的正确索引,从而判断这些数据是否是自己需要的数据,不是则丢弃。
问题描述:
- 作为Primary Users,只有密钥 K D K_D KD没有密钥 K I K_I KI,如何解密索引?不解密索引的情况下,如何避免falsepositive?
- 按照加密顺序,那么解密时用户先使用 K D K_D KD解密获得明文数据和密文索引,再通过 K I K_I KI解密索引获得明文索引,然后再判断该索引是否属于查询范围,最后选择丢弃or保留,那么不属于该用户查询范围的数据被访问,这就涉及了隐私泄露的问题。
二、Randex的评估
关于Randex的一些评估,可以考虑能不能对自己的混淆方式也做出详细的评估
1.FalsePositive
how appear?
c
a
s
e
1
:
{
对
于
b
j
:
当
q
l
≤
j
≤
q
u
时
,
每
一
位
都
为
0
对
于
b
’
j
:
当
q
l
≤
j
≤
q
u
时
,
至
少
有
一
位
为
1
case1: \begin{cases} 对于b_j:当 q_l \le j \le q_u时 ,每一位都为0\\ 对于b’_j:当 q_l \le j \le q_u时,至少有一位为1\\ \end{cases}
case1:{对于bj:当ql≤j≤qu时,每一位都为0对于b’j:当ql≤j≤qu时,至少有一位为1
P
=
1
−
(
P
r
[
b
j
′
=
0
∣
b
j
=
0
]
)
k
=
1
−
(
1
−
q
+
p
q
)
k
P=1-(Pr[b'_j=0|b_j=0])^k=1-(1-q+pq)^k
P=1−(Pr[bj′=0∣bj=0])k=1−(1−q+pq)k
c
a
s
e
2
:
b
j
=
0
→
b
j
′
=
0
,
但
S
E
机
制
引
入
了
f
a
l
s
e
p
o
s
i
t
i
v
e
case2:b_j=0 \rightarrow b'_j=0,但SE机制引入了false positive
case2:bj=0→bj′=0,但SE机制引入了falsepositive
P
=
(
P
r
[
b
j
′
=
0
∣
b
j
=
0
]
)
k
⋅
μ
=
μ
P=(Pr[b'_j=0|b_j=0])^k \cdot \mu=\mu
P=(Pr[bj′=0∣bj=0])k⋅μ=μ
因此:
P
f
p
=
1
−
(
1
−
q
+
p
q
)
k
+
μ
P_{fp}=1-(1-q+pq)^k+\mu
Pfp=1−(1−q+pq)k+μ
2.FalseNegative
how appear?
在SE机制保证数据绝对正确的前提下,由随机响应引入:
{
b
j
:
b
d
是
1
b
j
′
:
q
l
≤
j
≤
q
u
时
,
每
位
都
为
0
\begin{cases} b_j:b_d是1\\ b'_j:q_l \leq j \leq q_u 时,每位都为0 \end{cases}
{bj:bd是1bj′:ql≤j≤qu时,每位都为0
P
=
(
1
−
μ
)
P
r
[
b
d
′
=
0
∣
b
d
=
1
]
(
P
r
[
b
d
′
=
0
∣
b
d
=
0
]
)
k
−
1
=
(
1
−
μ
)
(
1
−
p
−
q
+
p
q
)
(
1
−
q
+
p
q
)
k
−
1
=
(
1
−
p
−
q
+
p
q
)
(
1
−
q
+
p
q
)
k
+
1
−
μ
\begin{aligned} P &=(1-\mu)Pr[b'_d=0|b_d=1](Pr[b'_d=0|b_d=0])^{k-1}\\ &=(1-\mu)(1-p-q+pq)(1-q+pq)^{k-1}\\ &=(1-p-q+pq)(1-q+pq)^{k+1}-\mu \end{aligned}
P=(1−μ)Pr[bd′=0∣bd=1](Pr[bd′=0∣bd=0])k−1=(1−μ)(1−p−q+pq)(1−q+pq)k−1=(1−p−q+pq)(1−q+pq)k+1−μ
3.IndexSize
Generate:Randex增加了索引的存储开销,换句话说,指向data的指针增加了
对于包含n个元组的dataset
w
i
t
h
o
u
t
R
a
n
d
e
x
:
指
针
总
数
⇒
n
without Randex:指针总数\Rightarrow n
withoutRandex:指针总数⇒n
e
x
p
l
o
i
t
R
a
n
d
e
x
:
指
针
总
数
⇒
n
(
(
T
−
1
)
P
r
[
b
]
j
=
1
∣
b
j
=
0
]
+
P
r
[
b
i
′
=
1
∣
b
i
=
1
]
)
⇒
n
(
(
T
−
1
)
(
q
−
p
q
)
+
1
−
(
1
−
p
)
(
1
−
q
)
)
⇒
n
⋅
T
⋅
(
1
−
p
)
⋅
q
+
p
\begin{aligned} exploit Randex:指针总数 & \Rightarrow n((T-1)Pr[b]_j=1|b_j=0]+Pr[b'_i=1|b_i=1])\\ &\Rightarrow n((T-1)(q-pq)+1-(1-p)(1-q))\\ &\Rightarrow n \cdot T \cdot (1-p) \cdot q +p \end{aligned}
exploitRandex:指针总数⇒n((T−1)Pr[b]j=1∣bj=0]+Pr[bi′=1∣bi=1])⇒n((T−1)(q−pq)+1−(1−p)(1−q))⇒n⋅T⋅(1−p)⋅q+p
\underbrace{1, \cdot \cdot\cdot,1}_{\text{8位}}
Q
向
量
:
(
(
1
,
⋅
⋅
⋅
,
1
⏟
8位
,
0
,
⋅
⋅
⋅
,
0
⏟
8位
)
Q向量:({(\underbrace{1, \cdot \cdot\cdot,1}_{\text{8位}},\underbrace{0, \cdot \cdot\cdot,0}_{\text{8位}})}
Q向量:((8位
1,⋅⋅⋅,1,8位
0,⋅⋅⋅,0)
Q
向
量
:
(
(
1
,
1
,
1
,
1
⏟
4位
,
0
,
⋅
⋅
⋅
,
0
⏟
12位
)
Q向量:({(\underbrace{1, 1,1,1}_{\text{4位}},\underbrace{0, \cdot \cdot\cdot,0}_{\text{12位}})}
Q向量:((4位
1,1,1,1,12位
0,⋅⋅⋅,0)
⋅
\cdot
⋅
⋅
\cdot
⋅
⋅
\cdot
⋅
Q
向
量
:
(
(
0
,
0
,
1
⏟
di
,
0
,
⋅
⋅
⋅
,
0
)
Q向量:({(0,0,\underbrace{1}_{\text{di}},{0, \cdot \cdot\cdot,0})}
Q向量:((0,0,di
1,0,⋅⋅⋅,0)