支持合取查询的可排序SSE

支持合取查询的可排序对称加密

摘要

可搜索对称加密允许直接在加密数据上进行搜索而无需解密,这在云计算中尤为有用,因为用户可以将数据外包给云服务器而不泄露隐私,同时仍保留搜索能力。为了满足用户的特定需求,考虑支持合取查询和排序的搜索。基于Cash等人提出的可搜索对称加密协议OXT,我们通过结合保序加密提出了一种排名可搜索对称加密方案,使得返回给客户端的匹配文档按关键词出现次数进行排序。该方案保持了OXT的效率,并支持排序搜索。安全性分析表明,所提出的方案能够抵御选择明文攻击。

关键词

可搜索对称加密 · 合取查询 · 保序加密 · 排名搜索

1 引言

随着现代企业中数据增长以及云数据库解决方案的兴起,数据专家们不断面临来自数据可用性、完整性、查询处理效率等方面的更高要求,尤其是在企业考虑将数据库和数据仓库从本地服务器转移到不可信的外部在线服务器(即外包数据存储)时,安全问题尤为紧迫。因此,加密技术前所未有地面临挑战,以保护敏感机密数据不被恶意或诚实但好奇的对手所破坏。

作为一种高效且主导的安全技术,数据加密通过将明文编码为只有拥有密钥的授权人员才能读取的密文,一方面使各方能够在安全通道上通信;但另一方面,为了安全性强度,数据必须先解密才能进行后续处理,这在一定程度上牺牲了查询性能。

为了提升在密文上进行搜索或计算的能力,以满足基本的业务需求,人们提出了新的方法和技术来兼顾数据效率与安全性,从而使得可搜索对称加密(SSE)方案——最初由宋等人提出——[1],被持续修订和扩展(例如,[2–5]),从技术角度在隐私性和性能之间取得平衡。同时,针对实际业务场景,已提出支持布尔查询(包括合取和析取)、排序和范围查询等灵活关键词搜索方向(例如,[6–10]),以增强实际应用能力。

1.1 我们的贡献

本文中,我们采用Cash等人在 2013[5],中提出的名为Oblivious Cross-Tags(OXT)协议的可搜索对称加密方案,并将保序加密方案集成到OXT协议中。由此,在对称密钥环境下提出了一种支持多关键词合取查询的保序可搜索加密方案。该方案按关键词出现次数对匹配文档进行排序返回,即所有关键词共同出现的次数最多的文档优先返回。

作为Cash等人OXT协议[5],的严格扩展,该方案保留了OXT的性能效率,即服务器最优的计算和存储,以及单轮通信;在此基础上,通过支持排序搜索进一步改进了OXT,以提供更满意的结果集。

1.2 相关工作

本节将介绍关于可搜索对称加密、合取和布尔查询以及保序加密的相关研究。

可搜索对称加密

宋等人在 2000[1]中构建了一种SSE方案,但其安全性保证有所减弱;此后,Goh在 2003[2]中以及Chang和Mitzenmacheret在 2005[3]中提出了安全索引以应对上述安全性限制,但其计算复杂度与文档数量呈线性关系。2011年,Curtmola等人[4]提出了两种服务器计算量与包含关键词的文档数量成线性的解决方案,因此是最优的,这也是最安全、最高效的首个亚线性 SSE方案。此外,他们还提出了多用户环境下的SSE方案。然而,上述所有 SSE方案均聚焦于单关键词搜索,这会导致大量匹配文档;而合取查询的一种简单方法是为每个关键词运行一次单关键词SSE方案,因此效率不高。

合取与布尔查询

支持合取和布尔查询的可搜索加密方案具有实际意义,至少该方案应能够支持合取搜索,以返回包含所有查询关键词的匹配文档(例如,“女性”和“硕士学位”)。对称密钥环境下的搜索最初由戈尔、斯塔登和沃特斯在 2004[6],中提出,该方法仅适用于结构化数据,并且会泄露被搜索的属性,其复杂度与数据库中文档总数呈线性关系。巴拉德等人在 2005[7]以及边垠等人在 2006[8]进一步推进了高效的合取关键词搜索,两者同样仅适用于结构化数据,且复杂度与数据库规模呈线性关系。此外,这些方案均不支持析取型布尔查询。

由卡什等人构建的OXT协议[5]扩展至通用布尔查询,不仅支持合取,还支持析取、否定等操作。它还通过应用于任意结构化数据(包括属性值数据和自由文本)解决了以往可搜索加密方案的局限性。此外,该方案相较于之前的可搜索加密方案具有显著优势,能够在允许访问模式泄露(但绝不会泄露被搜索的属性)的前提下以合理的代价扩展到大型数据库,其复杂度与查询中最低频关键词所对应的文档数量呈线性关系。该协议还可扩展以支持范围查询(例如,“age < 30”)以及多用户环境。

保序加密(OPE)

保序加密(OPE)最初由阿格拉瓦尔等人在 2004[11],中提出,并由博尔迪列娃等人在 2009[12]中首次进行了形式化定义与分析。此后提出了多个其他OPE方案(例如,[13–15]),但这些方案未提供或仅提供了极少的安全性保证,且会泄露大部分明文信息,直到波帕等人[16]提出了一种理想安全的OPE方案,该方案满足最低安全要求,即除了明文值的相对顺序外,不泄露任何其他信息。OPE增强了可搜索对称加密,以支持包含“大于”(>)、“小于”(<)以及“等于”(=)等操作符的范围查询,同时实现了对加密数据的排序搜索。王等人[10,17]提出了从[12],改进而来的可排序可搜索对称加密方案,但仅支持单关键词搜索。曹等人[18]定义了一种基于“坐标匹配”的多关键词排序搜索加密方案,该方案通过尽可能多地匹配关键词来对文档进行排序,但由于不同关键词的出现频率和重要性各不相同,这种做法并不理想。近年来,已有其他可行的多关键词排序搜索加密方案(例如,[19–21])采用向量空间模型被提出。

1.3 组织结构

本文的其余部分组织如下。第2节介绍了预备知识,包括符号说明、OXT协议和保序加密。接着,在第3节中定义并提出了我们的保序可搜索加密方案,随后在第4节中分析了所提出算法的安全性。最后,第5节对本文进行了总结。

2 预备知识

2.1 符号说明

在接下来的章节中,会持续引用一些符号说明,这些符号说明是表示概念和术语的基本要素。以下是本文涉及的一些基本符号说明。

  • [c]:从1到 c的集合,与{1, 2,…, c}相同
  • |t|: t的大小或长度
  • t[i]:t的第 i个元素
  • d:数据库DB中的文档数量
  • indi:第 i个文档的标识符
  • Wi:第 i个文档中的关键词集合
  • W = ∪d i=1Wi:整个数据库的关键词集合
  • DB =(indi,Wi) d i=1:数据库,表示为文档标识符indi及其相应关键词集合Wi)对的列表
  • DB(w):包含关键词 w的文档的标识符集合
  • sterm:估计频率最低的术语(或关键词),为简便起见用 w1表示,该术语将返回一个最小的 |DB(w1)|
  • xterm:其他被查询的术语(或关键词),其中x代表交叉
  • TSet:元组集合,表示数据库中每个关键词对应的一个等长数据元组列表
  • XSet:一种集合数据结构,包含从每个关键词-文档对计算出的元素

2.2 OXT协议

Oblivious Cross-Tags(OXT)协议是在Cash等人提出的高可扩展性SSE方案中提出的,[5],其包含一个EDB构建算法和一个搜索协议。该协议的输出为加密标识符,客户端利用这些加密标识符来检索加密文档。该OXT协议支持多个关键词的布尔查询,通过防止服务器获知被查询关键词中频率最低的项(即被判定为最低频的关键词)的标识符,从而实现更好的安全性能,并将客户端与服务器之间的通信减少至单轮。为了以易于理解的方式呈现我们的保序可搜索加密,OXT的语法描述如下。

在以下算法EDB初始化中描述的1,函数EDBSetup通过将DB作为输入并输出密钥 K以及EDB。K被交给客户端,而EDB被交给服务器。在此阶段,针对数据库中的每个关键词,生成一个加密文档指针列表,然后将其添加到由T索引的数组中,该数组以W的所有关键词进行索引。在EDBSetup期间,TSet的初始化以T作为输出,将EDB与XSet一起组装。

算法 1. Cash - EDB 设置算法

输入: DB
输出: EDB, K
function EDB初始化(DB)
    为PRF F选择密钥KS。为范围是 Z∗ p的PRF Fp选择密钥KX, KI, KZ。
    数据库DB =(indi,Wi) d i=1
    初始化T ←{},以w ∈W为索引。
    设置XSet ← ∅
    对于w ∈W执行
        初始化t ←{}。
        设置Ke ← F(KS, w)。
        对于ind ∈ DB(w)执行
            设置计数器c ← 0
            e ←加密(Ke,ind)。
            计算xind ← Fp(KI, ind), z ← Fp(KZ, w||c)和y ← xindz−1。
            将(e, y)附加到t。
            设置xtag ← gFp (KX,w)·xind 和XSet ← XSet ∪{xtag}
            令c ← c+ 1。
        结束循环 
        T[w] ←t 
    结束循环
    集合(TSetKT) ← TSetSetup(T)。
    returnEDB =(TSet, XSet), K=(KS, KX, KI, KZ, KT)
end function

为了便于理解,客户端与服务器之间运行的搜索协议分为两部分:令牌生成算法和搜索算法。在算法2中描述的令牌生成算法在客户端使用K和w1计算并输出sterm的标签以及xterms的一组令牌,然后在算法3中描述的搜索算法在服务器端检查xterms在sterms的XSet中的存在性。换句话说,客户端负责选择 sterm,这基本上是出现频率最低且存在于最少数量满足条件文档中的关键词,服务器则向客户端返回所有满足条件文档的加密标识符,客户端对其进行解密以检索文档,并随后停止发送令牌。

算法 2. Cash - 令牌生成算法

输入: w¯=(w1 ∧· · · ∧ wn), K
输出: stag, xtoken
function令牌生成( w¯, K)
    计算stag ← TSetGetTag(KT , w1)。
    For c= 1,2,...直到服务器停止
        For i= 2,..., n do xtoken[c, i] ← g F p ( K Z ,w 1 ||c) ·Fp ( K X ,w i )
    End for
    xtoken[c] ←(xtoken[c, 2],..., xtoken[c, n])
End loop
return stag, xtoken
End function

算法3. 搜索 - 搜索算法

输入:stag, xtoken,EDB
输出: e
function搜索(stag, xtoken, EDB)
    设置t ← TSetRetrieve(TSet,stag)
    For c= 1,..., \|t\| 执行
        从第 c个元组的t中检索(e, y)
        If ∀i= 2,...,n:xtoken[c, i]y ∈XSet 那么
            将 e发送给客户端,直到t中的最后一个元组,然后发送停止指令
        End If
    End loop 
End function

请参考[5]以获取有关所用参数和T集实现的更多详细信息 Σ={TSetSetup, TSetGetTag,TSetRetrieve}。

2.3 保序加密

保序加密方案Π={KeyGen, Enc, Dec}是一种保持明文顺序关系的确定性对称密钥加密方案。以下是对每个算法的详细描述。

  • KeyGen(λ) → s。该算法输入安全性参数 λ并生成密钥 s。
  • Enc(s, x) → y。该算法基于密钥s,为明文x计算密文y。
  • Dec(s, y) → x。该算法基于密钥s计算密文y的明文x。

如果对于任意有效的 s和 x,均有 Π.Dec(s,Π.Enc(s, x)) = x成立,则称方案 Π是正确的。如果对于任意有效的 s,均有 x< x′=⇒ Π.Enc(s, x) <Π.Enc(s.x′)成立,则称其为保序的。

到目前为止,保序加密最强大的安全性定义是有序选择明文攻击下的不可区分性(IND-OCPA),该安全性由[22]的加密方案实现。

3 支持合取查询的保序可搜索加密

在本节中,将详细介绍一种可搜索加密(SSE)的保序扩展方案,该方案基于合取查询对加密数据库进行搜索,并按照所有关键词的出现次数对满足条件的文档进行排序返回。该方案包含以下四种算法,其中三种经过修改以引入关键词的出现次数。

EDB构建算法

如算法4所述,该算法以数据库DB作为输入,由数据拥有者输出加密数据库EDB以及密钥 K。对于每个关注的关键词 w,生成所有映射文档中各文档的加密标识符 e、关键词出现次数 o在每个映射文档中的保序加密结果 e′,以及作为关键词 w函数结果的词-文档指针 y,还有每个计数器 c(即该数量)映射文档)以及相应的文档标识符ind均存储在T[w]中。TSetSetup将通过所有关键词索引的数组T作为输入来初始化TSet,并输出 KT。同时,每个关键词w的函数结果及其关联的标识符ind存储在XSet中。加密数据库EDB = (TSet, XSet)被交给服务器,所有密钥 K则交给数据拥有者。

算法 4. EDB构建算法

输入: 数据库
输出:EDB, K
function EDB初始化(数据库)
    •选择密钥K KS用于PRF F和 Ke′用于OPE方案 Π。选择密钥K KX, KI, KZ用于PRF Fp(范围为 Z∗ p).
    •将T初始化为一个空数组,其索引为W中的关键词。
    •初始化XSet ←{}。
    对 w ∈W执行如下操作
        初始化t ←{};并令Ke ← F(KS, w)。
        对ind ∈ DB(w)执行如下操作
            初始化计数器c ← 0。
            设置xind ← Fp(KI, ind), z ← Fp(KZ, w||c), y ← xind · z−1。
            计算e ← Enc(Ke,ind)。
            计算e′ ←Π.Enc(Ke′, o)。
            将y、 e、 e′附加到t。
            设置xtag ← g Fp(KX,w)·xind并将其追加(xtag e′)至XSet。
            c ← c+ 1
        结束循环 
        T[w] ←t 
    结束循环
    •(TSetKT) ← TSetSetup(T)。
    • returnEDB =(Tset, XSet), K=(KS, Ke′, KX, KI, KZ, KT)
end function

令牌生成算法

该算法在客户端运行,通过使用来自查询的关键词 w¯和来自数据拥有者的密钥 K生成 stag和 xtoken。其中, stag是针对关键词 w1计算得到的,假设该关键词在查询的所有关键词中能够导致相对较少数量的映射文档;而 xtoken是 w1、计数器 c以及每一个其他关键词 wi的函数结果。stag和 xtoken被发送至服务器。具体细节如以下算法5所述。

算法5. 令牌生成算法

输入: K, w¯=(w1 ∧· · · ∧ wn)
输出:stag, xtoken
function令牌生成(K, w¯)
    计算stag ← TSetGetTag(KT , w1)。
    For c= 1,2,...直到服务器停止执行
        For i= 2,..., n do xtoken[c, i] ← g F p ( K Z ,w 1 || c ) · F p ( K X ,w i )
    End loop
    设置xtoken[c] ←(xtoken[c, 2],...,xtoken[c, n])
    End loop
    •返回stag,xtoken
end function

搜索算法

该算法在算法6中描述,由服务器执行,首先使用来自客户端的 stag从T[w1]中检索,并从数据拥有者处获取TSet,进一步检索包含w1的每个文档的加密标识符 e及其对应的出现次数 e′1。然后,对于每个满足条件的文档,使用 xtoken验证其他关键词是否存在于XSet中,并相应地获取它们的加密出现次数 e′i。接着,将e′中的最小值记为 e′min,作为所有关键词共同出现的总出现次数。最后,将所有满足条件的文档的加密标识符 e及其出现次数 e′min按 e′min排序后发送给客户端。

Algorithm 6. 搜索算法

输入:stag, xtoken,EDB
输出: ERS
function搜索(TSet,XSet, stag,xtoken)
    •初始化ERS ←{}
    •设置t= T[w1] ← TSetRetrieve(TSet,stag)
    For c= 1,..., \|t\| 执行
        从第 c个元组中检索(y, e, e′ 1)
        If ∀i= 2,...,n:xtoken[c, i]y ∈XSet 则
            检索e′ 2,..., e′ n.
            e′ min ← min(e′ 1, e′ 2,..., e′ n) 并追加(e, e′ min)到ERS
        End If
    End loop
    • ∀e在ERS中,按e′ min对 e排序。
    •返回ERS
end function

检索算法

该算法在7中描述,于客户端执行,在从服务器接收到ERS后,使用密钥 KS和 Ke′进行解密,以获得文档标识符及相应的出现次数。按顺序检索并返回加密的文档(即,关键词出现次数最多的文档优先返回)。

算法 7. 检索算法

输入: K, ERS 
输出:ind, o
function检索(ERS)
    • Ke ← F(KS , w1)
    For (e, e ′ min ∈ERS do
        计算ind ← Dec(Ke , e), o ←Π.Dec(Ke ′, e′ min)
    End loop
    • return(ind o) 按 o排序。
end function

4 安全分析

在本节中,我们描述方案的泄露轮廓 L并分析其安全性。我们采用Cash等人提出的可搜索加密语义安全定义。

定义 。设 Υ={EDB初始化、令牌生成、搜索、检索}构成一个SSE方案,并设 L为一种算法。对于高效算法 A和 S,我们定义实验 RealΥA(λ)和IdealΥA,S(λ)如下所示。

  • RealΥA(λ) :选择数据库DB和一个查询列表 q。然后运行(EDB K) ← EDB初始化(DB)。对于每个 i ∈ |q|,由客户端执行令牌生成(TokenGeneration(K, q[i])),并由服务器执行搜索(Search(EDB stag, xtoken))。最后,游戏将EDB和t交给 A, A返回一个比特,游戏将其作为自身的输出。

  • IdealΥA,S(λ) : 选择数据库DB和一个查询列表 q。该实验运行S(L(DB q))并将输出提供给 A,后者返回一个比特作为游戏自身的输出。

我们说,如果对于所有高效的对抗者 A,存在一个算法S,使得Pr[RealΥA(λ) = 1] −Pr[IdealΥA,S(λ)] ≤ neg(λ),则该方案在面对非自适应攻击时是 L-语义安全的。

定理 。假设 G中的DDH假设成立, F和 Fp是安全的伪随机函数,(Enc, Dec)是一个IND-CPA安全的对称加密方案,Σ是一个 L-安全且计算上正确的T集实现,且 Π是一个IND-OCPA安全的保序加密方案,则 Υ在非自适应攻击下是 L-语义安全的,其中 L如上所定义。

证明 。该证明与[5]中的证明相同,只是在所有游戏之后添加了一个新游戏 GN 与 GCash。

Game GN 。在[5]中提到的初始化过程中,密文 e′通过加密关键词出现次数 o生成。我们定义存在一个有效的敌手 BN,使得
Pr[GN= 1] − Pr[GCash= 1] ≤ AdvIND−OCPA Π BN ,(λ)
因此,我们说所提出的 Υ在面对非自适应攻击时是 L-语义安全的。

5 结论

基于[5]的研究,通过设置关键词出现参数并结合保序加密方案,提出了一种支持合取查询的保序可搜索对称加密方法。该方法不仅将包含关键词的所有匹配文档返回给客户端,还按照关键词出现次数对文档进行排序,出现次数最多的文档优先返回,这可能是用户最期望的结果。安全性分析表明,所提出的方案在DDH假设、安全的伪随机函数、安全的对称加密方案、安全的T集实现以及安全的保序加密方案基础上是IND-CPA安全的。

在未来,我们可以从多个方向对当前工作进行改进。其中最有前景的一个方向是扩展该方案以支持布尔查询,这不仅支持合取关键词搜索但还包括析取、否定等操作。然而,当前匹配文档的相关性评分被定义为包含的所有查询关键词中出现频率最低的关键词的出现次数,这需要进一步研究以支持更通用的布尔搜索。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值