论文整理之Randex——查询恢复攻击

探讨SE机制下的数据和查询隐私保护,分析范围注入攻击原理,并介绍Randex方案如何有效抵御此类攻击,确保数据安全。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本文为一篇阅读笔记,原文链接:
Randex,Mitigating Range Injection Attacks on Searchable Encryption

一、SE机制

  • 经典的图:
    在这里插入图片描述
  • 需要注意的点:
    (1)数据的传输过程中,Owner拥有秘钥 K I , K D K_I,K_D KIKD;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) IDQSearch(ITQ)
    (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[idiIDQdiQ]=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=(Fd),索引值的二进制向量 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=dbd=1)=1μ,ifT>1Pr(d=dbd=1)=1,ifT=1

{ μ : 可 以 忽 略 的 概 率 , 由 S E 机 制 引 入 d ∗ : 猜 测 索 引 值 d : 实 际 索 引 值 \begin{cases} \mu:可以忽略的概率,由SE机制引入\\ d^*:猜测索引值\\ d:实际索引值\\ \end{cases} μ:SEd:d:

(2) 引入Randex混淆

对任意一个元组 D = ( F , d ) D=(F,d) D=(Fd),被混淆后的索引向量: 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=dbd=1)=Pr(d=dbd=0)Pr(bd=0bd=1)+Pr(d=dbd=1)Pr(bd=1bd=1)=μ(1p)(1q)+β+11[1(1p)(1q)]

{ β : 在 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} βbd1bβ+11β+11b11b1

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+qpq)β+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+qpq)β+11]=μ+(p+qpq)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,βT1]=[0,1,,T1]
令 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=0T1αjrj=j=0T1αj(j=0T1)Pr[b=0b=0]T1jPr[b=1b=0]j(βj1j1)

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+qpq)j=0T1αjjT1Pr[b=0b=0]T1jPr[b=1b=0]j=μ+(p+q+pq)j=0T1(1p+pq)(T1j)(qpq)j

8.几个问题

(1)密钥的拥有权:
  • 服务器:不拥有任何密钥
  • 数据所有者:拥有密钥 K I 和 K D K_I和K_D KIKD
  • 用户: { 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)diKIdiCi=(Fi,di)CiKDDiDi=(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{bjqljqu0bjqljqu1
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=0bj=0])k=1(1q+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 case2bj=0bj=0SEfalsepositive
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=0bj=0])kμ=μ
因此:
P f p = 1 − ( 1 − q + p q ) k + μ P_{fp}=1-(1-q+pq)^k+\mu Pfp=1(1q+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} {bjbd1bjqljqu0
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=0bd=1](Pr[bd=0bd=0])k1=(1μ)(1pq+pq)(1q+pq)k1=(1pq+pq)(1q+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 withoutRandexn
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} exploitRandexn((T1)Pr[b]j=1bj=0]+Pr[bi=1bi=1])n((T1)(qpq)+1(1p)(1q))nT(1p)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)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值