论文阅读:Obfuscated Access and Search Patterns in Searchable Encryption

研究贡献

  1. 在SSE上提出了OSSE,OSSE有以下4个特点:
    1. 同时混淆了访问模式和搜索模式
    2. 它在单轮通信中运行查询,根据数据库和查询分布的不同,其开销可以小到一个常量
    3. 计算复杂度为O(nlog n/log log n),开销较大,但可通过并发提高效率
    4. OSSE需要一个(非常小的)不变的客户端存储,相对于ORAM需要一个O(log2n)的存储
  2. 实例化了SSE中的查询和文档的差异隐私的概念
  3. 实验表明,即使OSSE被调整为提供高效率(和低差异隐私参数),方案仍然对现有的四种不同的查询识别攻击提供了强大的保护。

背景知识

  • SSE:一种加密类型,它允许数据所有者将加密的数据库外包给不受信任的服务器,同时仍然保留搜索功能。
  • 查询恢复攻击:
    1. IKK attack:了解一个关于数据库的一些统计数据和一小部分查询的内容时,一个半诚实的服务器可以在一个很高的准确度下恢复所有查询
    2. file-injection attack:使用精心制造的文件去恢复所有查询
  • ORAM与PIR:
    1. ORAM:将被搜索到的结点到该路径的根节点的所有数据都读入一次查询,缺点是开销极大
    2. PIR:允许一组客户端在同一数据库存在许多非协作副本的设置下,可以从公共(未加密)数据库中私下检索文档。缺点是,每次访问都需要触摸数据库中的每一位,即O(n)的计算开销。
  • 差分隐私的SSE:该框架混淆了搜索索引,即服务器只学习访问模式的模糊版本,从中很难获得有用的信息。但是,由于在外包索引后,混淆是固定的,因此多次查询相同的关键字会导致相同的混淆模式

SSE简介
差分隐私的SSE (Differentially Private Access Patterns SSE)
IPPE简介

SEE的功能指标和性能指标

SSE协议可以通过泄露特殊的访问模式和搜索模式来或者较好的效率和性能,同时使用ORAM或者PIR可以达到很好的保护性,但要求更多的计算或存储,目标是找到一个中间地带的解决方案,它可以混淆搜索/访问模式,同时使成本更轻

  • utility metrics(功能指标):直接影响协议的输出
    在这里插入图片描述

  • performance metrics(性能指标):使用协议的代价
    在这里插入图片描述

TPR可以通过在服务器端复制文档,将每个文档划分为K个碎片,并需要k<K个碎片来进行文档恢复的方式来增加,存储代价
FPR可以通过在客户端检查是否每个文件包含相应的关键字来减少,带宽代价

Obfuscated SSE(OSSE)

符号介绍
在这里插入图片描述
传统的SSE是对一个关键字w的搜索,返回所有包含该关键字的文件。OSSE可以让服务器达到这样的一些效果

  1. 假阳性:返回一些不包含该关键字的文件
  2. 假阴性:部分包含该关键字的文件不返回
    以达到混淆搜索模式和访问模式的目的

协议的工作流程如下图所示:

在这里插入图片描述
这里Server查询后匹配到的result一定会返回到Client,所以要想使用假阳性和假阴性的概念,就只能在GenPolyGenPred函数中构建功能。

为了加快计算速度客户端通过Hash每个文档的文档标识符来为每个文档分配一个标签l,即D的标签lable为h(id(D))。然后,客户端向每个查询标记(token)附加一个标记l,以便服务器只需要对共享标签l的文档的加密多项式上验证每个token。

Polynomial Generation (genPoly) 多项式生成

genPoly(D, id(D))生成文档D的多项式系数,然后汇聚到一起形成Search Index。我们需要明确以下条件:

  • 当我们将查询token发送给Server时,尽量避免出现多个文件匹配一个单独token,因为这暴露了两个文档包含相同的关键字,并在查询响应中引入了相关性,而这一点在隐私分析中是很难考虑到的。所以客户端在设计多项式和token时要保证只能匹配一个或者零个文件。因此,客户端必须为每个查询生成多个令牌,才能检索所有所需的文档。
生成多项式的流程

对于一个文件D = {w1, w2, . . . , w|D|},有id=id(D)lable l = h(id(D)), Smax 为任何文档所能包含关键词的最大数量。每一个文件对应一个多项式,那么多项式的根(即它应该返回匹配的值)如下(||表示连接):
在这里插入图片描述

  • 第一组根 (w~i ~|| l || ctrwi,l),包含文件中的每一个关键词wi,文件的lable,和一个计数器ctrwi,l。引入计数器的目的是使得没有多项式有相同的根。这个计数器从零开始,并随着客户端构建搜索索引时不断增加。例如当两个文件有相同的关键字w和共享lable时,就可以用ctrwi,l来区分。这些根(wi|| l || ctrwi,l)允许客户端通过使用该结构和关键字w生成tokens,并循环遍所有lable l和计数器值来找到真正的正匹配。

  • 第二组根 (w-1 || 0 || 0),包含一个虚拟关键字w-1。这组根作为一个填充,目的是令每个多项式都有相同的长度(相同的根和系数的数量),从而隐藏每个文档所拥有的关键字的数量。

  • 第三组根(id(D) || 0 || -1),允许客户端通过仅使用文档标识符id(D)来生成具有此结构的标记,触发假阳性。

于是通过以上处理后再来生成Search Index可以达到所有多项式都只有第二组根这个相同的根。

  • 当需要假阴性时,我们就可以从第一组根 (wi || l || ctrwi,l)中跳过部分项
  • 当需要假阳性时,我们就可以通过从(id(D) || 0 || -1)生成标记来强制假阳性

函数genPoly以文档D[i]及其标签i作为输入,根据其在上面详细描述的关键字生成一个多项式,并返回多项式系数vi的向量(可以直接从根计算)

Predicate Generation (genPred) 预测生成

当客户端收到一个查询,调用genPred,genPred接收一个关键词w并输出一个(predicate,label)的元组,然后再将其转化为(token,lable)对。最后送到服务器。

流程如下:
在这里插入图片描述

  • 1~2行:元组集的初始化(TupleSet将用于存储对多项式估计的值,还有他们相关的lable)
  • 3~5行:对每一个 label 和 counter 的值(所以使用了ctrmax:表示所有lable中拥有的最大计数器值,当有些lable的计数器值达不到ctrmax时,就算加入到predicate,也不会匹配),使用概率为p加入到TupleSet中(p->1),实现假阴性。
  • 6~9行:对每个文件通过参数为1-q的几何分布Geo(),确定要加入的假阳性数量,并从(id(D) || 0 || -1,h(id))中选出,实现假阳性
  • 10~13行:通过参数为1-q的几何分布Geo(),为一个lable确定要加入一定不会match的数量,隐藏真正没有match数量
  • 14~18行:将预测转换为向量,以便其与文档多项式系数的内积返回是否应该返回文档。

几何分布Geo()的用处:当对手观察到某个文档D[i]的k>1匹配时,他们确信至少有k−1是假阳性(因为只能有一个真阳性)。然而,由于几何分布是无记忆的,匹配的数量k除了观察一个关键字w是否在D[i]中,不能显示任何东西。从数学上定义:

~ Πw[i] =k表示查询结果为k个

形式化接口

接口定义类似于一般SSE

  • Keygen(1λ):输入λ,调用FHIPPE.Setup(1λ),返回key sk
  • BuildIndex(sk, D):输入sk和D,对每个文档计算vi =genPoly(D, id(D)),然后调用FHIPPE.Encrypt(sk, vi)加密,所有文档的加密多项式构成一个Index I
  • Trapdoor(sk, w):输入sk和关键字w,然后调用genPred(w)得到匹配的(predicate, label)的元组,对每一个predicate f 调用FHIPPE.GenToken(sk, f)生成τf,然后生成 (token, label) 对 Γw,发送给服务器
  • Search(I, Γw):输入Index I和lables Γw,对(τf , L) ∈ Γw,对每个id为i并且lable为τf的文档,调用FHIPPE.Query(I[i], τf )。若内积为0,则存在匹配项,返回相应的文档id=i。注意Search(I, Γw)的输出是匹配文档id的集合。然后服务器将与这些标识符对应的加密文档发送给客户端。

泄露描述

当查询一个关键词w,首先使用genPred(w)生成<tokens,labels>对 Γw,然后送到服务器,服务器使用Index和一一验证Γw,得到single-match或non-match。对每个 Γw有 n+|h| 种被敌手观察到的可能性:文件匹配了token(n种可能性,因为有n个文件可能被返回),或者存在不匹配(|h|种可能性,因为有|h|个标签可能不存在匹配))。因此OSSE的模糊访问模式可以看作是个<n+|h|>维向量。

对于一次查询 ~w= ( ~w[1], ~w[2], . . . , ~w[t]),对每个关键词w有

  • Πw[i] 表示对手观察到第i个文档的匹配次数,那么
    在这里插入图片描述

    • Bern( p)表示当该文件包含w,那么有p的概率match。
    • Geo(1-q)表示从参数为1-q的几何分布中提取假阳性的数量。
  • Πw[n+l] 表示对手看到的使用标签l∈[|h|]的不匹配的次数
    在这里插入图片描述

    • Bi(gl, p)为一个参数为 gl = ctrmax −|D(w)l|p 的二项分布。(D(w)l是包含关键字w,并且标签为l的文档的id集合。)即对每个lable,(计数器最大值:根据genPred的3~5行)减去(能够match的并有着该lable的文档数量)=(没有match的并有着该lable的文档数量和超过GenPoly中该lable对应的ctr l的数量(ctrl<=ctrmax)),最后根据genPred的3 ~5行,以p的概率加入predicate
    • Geo(1-q)表示从参数为1-q的几何分布中提取的一定不匹配的lable数量,用于隐藏真正不匹配的数量。

定义:

  • (Obfuscated Access Pattern):对历史Ht的模糊访问模式~Π w是一个t*(n+|h|)的矩阵
  • (Obfuscated Trace):对历史Ht的追踪是对t个在OSSE中关键词w的搜索在这里插入图片描述
    Fmax和Smax分别是包含特定关键字文档的最大数量和每个文档的最大关键词数。

关于Hash函数和ctrmax:lable l = h(id(D)),然后lable的数量|h|决定了counter的大小,若|h|很小,那么有关键词w的所有文件都有一个相同的lable,这样就会使得ctrw,l很大。但是ctrmax必须在外包数据库之前进行固定,否则索引构建过程将泄露每个标签的关键字频率信息。如果ctrmax很小,那么就不能生成系数使它们的根都是唯一的,称为BuildIndex failure。为了避免失败我们令

  • |h| = Fmax
  • ctrmax = 3 ln n/ ln ln Fmax

安全性保证

下面证明了当底层FHIPPE是语义安全的时,OSSE是自适应语义安全的(从密文中得不到比已公开信息更多的信息)

  • 视图:服务器在运行SSE协议时可以看到的所有内容
  • 跟踪:模拟了SSE方案的实际泄漏情况

方法:如果一个观察到视图View的对手可以被一个只看到路径Path的算法模拟,那么SSE方案是安全的;这意味着Path包含了与对手相关的所有信息
在这里插入图片描述
为了证明安全性,我们构建了一个模拟器(只能看到模糊的跟踪),可以模拟一个敌手(允许自适应地发出查询以获得视图)。
分为4项模拟——>模拟ID,模拟加密文件E(D[i]),模拟安全索引I,模拟Γk<tokens,labels>

  • 模拟ID(D):是很简单的(1,2,3,…,n),只要加密函数E是语义安全的,就无法区分
  • 模拟加密文件E(D[i]):由于底层的FHIPPE是语义安全的,因此存在一个模拟FHIPPE的模拟器SFHIPPE,它可以使用加密预言机SFHIPPE.Encrypt和token生成机SFHIPPE.GenToken。使得两个输出和真正的FHIPPE.Encrypt , FHIPPE.GenToken无法区分
  • 模拟安全索引I:在0时刻,模拟器只能看到 T(Ht0),生成安全索引I的步骤:
    1. genPoly(⊥, i)——>Poly
    2. SFHIPPE.Encrypt(Poly)——>I[i] ,I[i] 聚合为I* {注意:I[i] 可以被输入为SFHIPPE.GenToken([i0, i1
      , . . . , iSmax+1])生成的token匹配,Smax 为任何文档所能包含关键词的最大数量}
  • 模拟Γk:在k时刻,模拟器只能看到 T(Hkt),生成Γ*k的步骤:
    1. 初始化一个空集X
    2. 对i ∈ [n],加入Πw[s] [i]个 [ i || 0 || -1, h(i) ]到X中,模拟真正match的文件和假阳性触发的文件
    3. 对i ∈ [|h|],加入Πw[s][n + i]个 [ w-1 || -1 || 0, i ]到X中,模拟真正没有match的lable和为了隐藏没有match的数量而加入的一定不会match的lable
    4. 转换predicate到Γk,SFHIPPE.GenToken(X)——>Γk( (tokens, labels))

差分隐私性分析

Differential privacy(DP):差分隐私具有隐私参数ε,保证隐私保护算法的相邻输入以相似的概率产生任何给定的输出,因此给定任何观察结果都很难获得关于秘密输入的信息

假设SSE方案作为一个函数SE,它接收客户端输入(一个数据集D和一个查询向量~w)并输出泄漏(一个跟踪T)。

  • Differential Privacy for Documents(access patterns privacy):对于一个提供了参数为ε的差分隐私的SE来说,对于任何长度为t的关键字列表,和任意文件D,D’ ∈ 2^(2 ),(它们恰好在位置i和关键字w上有所不同,即,w在D’[i]或D[i]中,但不是两者都有)有如下结论:
    在这里插入图片描述
    直观地说,满足上述定义可以保证没有人能够确定文档是否包含给定Trace的关键字。这意味着,为文档提供ε-DP的SSE也提供了访问模式隐私。
  • Differential Privacy for Keywords(search pattern privacy):对任意数据库D ∈ 2^(2 ),和任意邻居关键词列表~w, ~w’ ∈ ∆ |~w|(其中~w, ~w’只有一个关键词不同)有如下结论:
    在这里插入图片描述
    直观的说,没有人可以通过观察跟踪(允许的泄漏)来确定客户端是在搜索一个关键字列表还是另一个关键字列表。也提供了搜索模式隐私

那么OSSE提供了如下的差分隐私
在这里插入图片描述

复杂性分析

符号说明:
在这里插入图片描述

Communication Overhead

通讯开销=在查询关键字w时,从客户端发送到服务器的令牌总数,以及服务器作为响应返回给客户端的文档数
Ew=E{D(w)}为包含关键字w的预期文档数量。 |h| = Fmax 并且 ctrmax =3 ln n/ ln ln Fmax

  • 从客户端发送到服务器的令牌总数(根据genPred计算得到)当n>>|h|并且q->0时有:
    在这里插入图片描述

  • 服务器作为响应返回给客户端的文档数
    在这里插入图片描述

那么OSSE的通信开销为 #tok · τsize + #doc·Dsize.
一个标准的SSE的通信开销为Ew·Dsize
所以OSSE相比SSE增加的开销比例为:
在这里插入图片描述
在大多数情况下有:
COMM-OVEROSSE < 2 · Fmax/Ew + 1.

Computational Complexity

在这里插入图片描述
对于一个token,服务器接收到时,平均有n/|h|个文档需要比对

OSSE中所有的安全证明

OSSE安全证明

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值