基于受限功能性加密的动态对称可搜索加密
摘要
可搜索对称加密允许一方在加密数据的同时保持对其进行部分搜索的能力。我们提出了一种在效率、隐私性和可接受操作集合之间取得平衡的方案:该方案的搜索时间与词典大小呈对数关系(即独立于文件数量),满足针对自适应攻击的强安全性概念——搜索模式隐私,支持在布尔代数上的复杂搜索查询(包括多个搜索词的合取),提供完整的搜索词和标识符的添加与删除功能,并且在标准模型下可证明安全。
我们系统的核心是一种称为在消息明文上受限的函数加密(CFE)的新型密码学工具。在CFE系统中,密文的可解密性被限制为仅对以特定方式计算得到的某些密文有效。我们提出了一个定义框架,其中包括一种宽松的基于不可区分性的安全概念。我们的构造在双线性群中的子群判定问题基础上,针对内积函数类被证明是安全的。
Keywords: 可搜索加密 · 功能性加密 · Pairings · 对偶向量空间
1 引言
可搜索加密方案(SSE)允许一方对消息进行加密,对密文建立索引,并可在任意时刻通过发出编码了搜索条件的搜索令牌来高效地查找明文。此外,如果一个可搜索对称加密方案支持对加密数据库的更新,则称其为动态的。当某方希望将部分数据外包但仍希望保持一定隐私保障时,可搜索加密方案是一种理想的工具。
最理想的隐私保护概念应隐藏搜索和更新过程中的内存访问。特别是,服务器不应能够判断客户端检索的文档是否是其从前一次查询中已获得的。这一特性被称为访问模式隐私。要全面满足访问模式隐私,需要采用由戈德赖希提出的不经意RAM。奥斯卓夫斯基 [6]。不幸的是,通常情况下,通用解决方案效率低下,更多地具有理论意义(尽管在实现实际可用的ORAM方面已取得了显著进展[11])。一种较弱的概念被称为搜索模式隐私,它隐藏了关于编码关键词的任何信息。特别是,服务器不应能够判断客户端是否已搜索过相同的词。动态SSE方案还额外要求更新隐私。系统在执行更新协议时,不应泄露有关文档和关键词的任何信息。
除了隐私性之外,SSE系统相关的设计标准还包括支持全面的搜索查询以及以通信复杂度和搜索复杂度衡量的可扩展性方面。考虑一个加密版本的SQL数据库,搜索查询通常用一种常规语言表达,允许对多个关键词进行综合表述。在文件系统(如谷歌云盘和亚马逊S3)中,数百万用户上传、下载和删除文件。在此场景下,理想情况是搜索和更新操作具有较低的通信复杂度,并且操作只需一次通信往返,因为大多数客户端通过高延迟网络连接。
Previous Work
研究社区提出了不同的可搜索加密方案,每种方案都在安全性、功能性与效率之间权衡取舍。尽管先前的可搜索加密方案实现了亚线性搜索时间,其仅随查询匹配的文档数量扩展[2—4,7,8],但大多数方案缺乏实践中通常需要的重要属性,例如更新加密数据库的能力、搜索查询的表达能力以及并行搜索的能力。在表1中,我们对相关方案进行了比较。
例外是卡什等人 [2,3] 的开创性工作。在 [3] 中,他们提出了一种具有真正实用搜索能力并支持合取搜索查询的可搜索加密方案。他们利用多方计算的技术,构建了一个搜索复杂度为 $O(r)$ 的方案,其中 $r$ 是匹配某个搜索词的文档数量。他们通过巧妙的预处理技术降低了通信复杂度。随后,卡什等人 [2] 提出了支持对加密数据库进行更新(即动态性)的高效可搜索加密方案。这些协议类似于 [3] 中的先前技术。
Our Results
在本研究中,我们构建了一种用于加密数据搜索的可搜索对称加密系统,该系统能够
- 搜索高效 。在加密数据库中搜索包含单个关键词的所有文件,其效率与文件数量无关,仅受限于词典大小 $W$,即 $O(\log |W|)$,其中词典大小是预先固定的。
- 通信高效 。执行一次搜索或更新操作仅需单轮通信。搜索查询简洁,仅包含 $2\log |W|$ 个双线性友好群 $G$ 的元素。
- 隐私保护 。搜索包含某个词的所有文件时,不会泄露关于被搜索词的任何信息。搜索令牌具有概率性,且与之前的搜索查询不可区分。
- 动态 。添加和删除所需的时间和通信开销与搜索文件相同。
- 功能性 。搜索所有包含以大小为 $|Wid|$ 的布尔公式表示的多个关键词的文件,其搜索时间为 $O(|Wid| \cdot \log(|W|))$。
我们的方案通过将数据结构表示为加密二叉树(而之前的工作采用链表方法 [2–4,7,8])来实现结果。为了遍历加密的树,我们构造了一个针对内积功能的函数隐私的密钥功能加密方案。该系统支持任意多项式数量的密钥查询和消息查询,并具有功能密钥仅能解密特定密文的性质。我们的构造使用了对称双线性映射。我们为构造所证明的安全性概念是一种自然的基于不可区分性的概念,并在子群判定假设下建立了其安全性。为了确保方案的正确性,我们假设内积将包含在一个多项式大小的范围内。这一假设对于我们的应用已足够,因为该树是二叉树。
2 预备知识
2.1 双线性群
我们回顾一些关于双线性群和向量空间的事实。
定义 1(双线性群) 。双线性群由一个概率性算法 $G$ 生成,该算法以安全性参数 $\lambda$ 作为输入,输出三个阿贝尔群 $G$、$G_1$、$G_T$,其中 $G_1 \subset G$。该算法还计算一个可高效计算的映射 $e: G \times G \to G_T$,该映射满足:
- 双线性的 :对于所有 $g, h \in G$, $x, y \in \mathbb{F}_p$,我们有 $e(g^x, h^y) = e(g, h)^{xy}$
- 非退化的 :对于所有 $g, h \in G$,我们有 $e(g, h) \neq 1$
我们假设每个群中的群运算和随机采样都是高效可计算的,并将 $G$ 的输出表示为 $(G, G_1, G_T, e)$。
在加法记号下,素数阶双线性群对加法和标量乘法封闭,从而形成一个关于 $G$ 的向量空间。为此,我们引入一些额外的符号说明。设 $x = (x_1, …, x_n) \in \mathbb{F}_p^n$ 为一个指数向量。我们将 $g^x = (g^{x_1}, …, g^{x_n})$ 写作 $G$ 中一个 $n$ 维的群向量。对于任意“标量” $\alpha \in \mathbb{F}_p$,我们使用记号 $(g^x)^\alpha$ 表示标量积 $(g^{\alpha x_1}, …, g^{\alpha x_n})$。当上下文明确时,向量一词可交替用于群元素和指数。
将双线性群视为向量空间,使我们能够表达这些空间之间的线性映射。其中一种线性映射是“点积”(有时在欧几里得空间中称为内积),定义为两个向量对应分量乘积之和。从几何上看,它是两个向量的欧几里得模与它们之间夹角余弦的乘积。我们定义了在双线性群中两个 $n$ 维向量之间的点积类比。
定义 2(点积群) 。点积群是由群生成器 $G^*$ 生成的双线性群。该生成器还会输出一个高效可计算的算法 $d: G^n \times G^n \to G_T$,该算法用于计算两个向量 $g^x$、$h^y$ 之间的“点积”,记为 $g^x * h^y$,即
$$
d(g^x, h^y) = \prod_{i=1}^n e(g, h)^{x_i y_i} = e(g, h)^{x*y}
$$
如果 $x$、$y$ 和 $z$ 是 $\mathbb{F}_p^n$ 中的“向量”,且 $\alpha$、$\beta$ 是 $\mathbb{F}_p$ 中的“标量”,则点积满足以下性质:
- 交换性 : $g^x * h^y = h^y * g^x$
- 分配性(对乘法) : $g^x * (h^y h^z) = (g^x * h^y)(g^x * h^z)$
- 标量乘法 : $g^{\alpha x} * h^{\beta y} = (g^x)^\alpha * (h^y)^\beta = (g^x * h^y)^{\alpha \beta}$
- 双线性的 : $g^x * (h^{\alpha y} h^z) = (g^x * h^y)^\alpha (g^x * h^z)$
2.2 对偶空间
我们将采用[10]中的对偶配对向量空间的概念。我们选择两组随机向量:${b_1, …, b_m}$ 和 ${b^ _1, …, b^ _m}$,并满足以下意义上的“对偶正交”约束条件:
$$
\langle b_i, b^
_i \rangle = 1 \mod p \quad \text{for all } i \
\langle b_i, b^
_j \rangle = 0 \mod p \quad \text{for all } i \neq j
$$
其中 $\langle \cdot, \cdot \rangle$ 表示点积。
我们注意到,从满足这些对偶正交约束的集合中随机选择集合 $(B, B^ )$,可以通过从 $\mathbb{F}_p^n$ 中均匀随机地选择一组 $n$ 个向量 $B$ 来实现(这些向量以高概率线性无关),然后根据其对偶正交约束确定 $B^ $ 中的每一个向量(这些向量以高概率接近均匀分布)。我们将这种随机选择对偶正交集合的方式表示为:$(B, B^*) \leftarrow \text{Dual}(\mathbb{F}_p^n)$。
2.3 子集成员问题
判断子集中成员身份的问题以各种形式出现在密码学中。一个典型的例子是素数阶群 $G$ 中的判定性Diffie-Hellman(DDH)问题,该群由 $g$ 生成:给定 $(g, g^x, g^y, T_b) \in G$,判定性Diffie-Hellman问题要求判断是否 $T_0 = g^{xy}$ 或 $T_1 = g^z$,其中 $x, y, z \leftarrow_R \mathbb{F}_p$ 是随机选取的。如果我们定义群 $G$ 由 $(g, g)$ 生成,子群 $G_1$ 由 $(g, g^x)$ 生成,则DDH问题要求判断 $(g^y, T_b)$ 是 $G$ 中的一个随机元素还是 $G_1$ 中的一个随机元素。
我们回顾弗里曼在对称配对友好群背景下对子群判定问题的定义[5]。该假设指出,无法区分来自群 $G$ 的一个随机样本和来自子群 $G_1 \subset G$ 的一个随机样本。该假设已被用于证明Boneh-Goh-Nissim加密系统的安全性以及许多其他应用[1,5]。
定义 3(子群判定假设) 。令 $G^*$ 为一个对称双线性点积群生成器。我们定义以下分布
$$
\text{param} := (G, G_1, G_T, e, d) \leftarrow G(1^\lambda) \
G = G \quad G_1 = G_1 \
T_0 \leftarrow_R G_1 \quad T_1 \leftarrow_R G
$$
我们定义算法 $A$ 在解决子群判定问题中的优势为
$$
\text{Adv}_A^{SDP}(\lambda) = \left| \Pr[A(\text{param}, T_0) = 1] - \Pr[A(\text{param}, T_1) = 1] \right|
$$
我们说 $G$ 满足子群判定假设,如果对于任意多项式时间的攻击者 $A$,$\text{Adv}_A^{SDP}(\lambda)$ 是 $\lambda$ 的可忽略函数。注意,如果子群判定问题在 $G$ 中是不可行的,那么在 $G_T$ 中也是不可行的。
2.4 密码学基础模块
我们的可搜索加密将使用伪随机对象。这些对象可以通过伪随机函数高效生成。
定义 4(伪随机函数) 。设 $\text{PRF}: {0, 1}^ \times {0, 1}^ \to {0, 1}^*$ 是一个高效的、保持长度的、带密钥的函数。我们定义区分器 $A$ 的优势为
$$
\text{Adv}_A^{\text{PRF}}(\lambda) = \left| \Pr[A^{\text{PRF}_s(\cdot)}(1^\lambda) = 1] - \Pr[A^{f(\cdot)}(1^\lambda) = 1] \right|
$$
其中种子 $s$ 从 ${0, 1}^*$ 中随机选取,而 $f$ 从将 $\lambda$ 字符串映射到 $\lambda$ 字符串的函数集合中均匀随机选取。我们称PRF是一个伪随机函数,如果对于所有概率多项式时间区分器 $A$,$\text{Adv}_A^{\text{PRF}}(\lambda)$ 是关于 $\lambda$ 的可忽略函数。
3 消息明文上的约束函数加密
3.1 语法
我们将考虑将函数加密的一般定义特化为在有限域 $\mathbb{F}_p$ 上计算 $n$-长度消息明文向量的点积这一特定功能,但有一个例外。尽管函数加密范式支持为任意密文生成用于解密特定函数的密钥,但我们的概念进一步将可解密性限制于特定密文。
为了明确与函数加密的区别,我们将该方案称为约束函数加密。实现此功能的私钥函数加密方案将包含以下算法:
定义 5(约束函数加密) 。一个约束函数加密系统CFE由四个算法 (Setup, KeyGen, Enc, Dec) 构成,满足如下条件
- Setup 算法将输入安全参数 $\lambda$ 和向量长度参数 $n$(一个在 $\lambda$ 中为多项式的正整数),并生成一个主密钥 MSK。
- 加密算法 Enc 将输入主密钥 MSK 和一个向量 $x \in \mathbb{F} p^n$,生成一个密文 $CT {x,q}$ 以及第 $q$ 个密文的内部状态 $st_q$。(我们将使用计数器 $q$ 来指向一个密文。)
- 密钥生成算法 KeyGen 将输入主密钥 MSK、一个向量 $y \in \mathbb{F} p^n$ 和内部状态 $st_q$,生成一个密钥 $SK {y,q}$。
- 解密算法 Dec 将输入一个密钥 $SK_{y,q}$ 和一个密文 $CT_{x,q}$,输出一个值 $z \in \mathbb{F}_p$。
对于正确性,我们要求对于所有 $x,y \in \mathbb{F} p^n$,所有 MSK 在 Setup$(1^\lambda, n)$ 的支持范围内,所有通过调用 Enc(MSK, $x$) 得到的 $(CT {x, q}, st_q)$ 对,以及所有通过调用 KeyGen(MSK, $y$, $st_q$) 得到的解密密钥 $SK_{y,q}$,均有
$$
\text{Dec}(SK_{y,q}, CT_{x,q}) = \langle x, y \rangle
$$
3.2 安全性
我们将考虑一种由挑战者与攻击者之间的博弈所定义的基于不可区分性的安全概念。在游戏开始时,挑战者调用设置算法 $(1^\lambda, n)$ 以生成主密钥 MSK。挑战者还会选择一个随机比特 $b$。在整个游戏过程中,攻击者可以(自适应地)与两个预言机进行交互。
- 为了进行密文查询,攻击者向挑战者提交两个向量 $x_0, x_1 \in \mathbb{F} p^n$,挑战者随后运行 $\text{Enc}(MSK, x_b)$ 并将其生成的密文 $CT {x_b,q}$ 返回给攻击者。挑战者为第 $q$ 次查询存储状态信息 $st_q$。
- 为了进行密钥查询,攻击者提交两个向量 $y_0, y_1 \in \mathbb{F} p^n$ 以及指向第 $q$ 次密文查询的指针给挑战者,挑战者随后运行 $\text{KeyGen}(MSK, y_b, st_q)$ 并将其生成的 $SK {y_b}$ 返回给攻击者。
攻击者可以在整个游戏过程中进行任意多项式次数的密钥和密文查询。注意,每次密文查询的结果是生成一个密文以及一些内部状态。我们用 $st_q$ 表示与第 $q$ 个密文相关的状态信息。挑战者使用 $st_q$ 来回答与第 $q$ 个密文相关的密钥查询。换句话说,解密密钥仅在应用于第 $q$ 个密文时才能解密内积。这体现了密文的受限可解密性概念。在游戏结束时,攻击者必须提交一个对比特 $b$ 的猜测 $b’$。我们要求对于所有密文查询 $x_0,x_1$ 和密钥查询 $y_0,y_1$,必须满足
$$
\langle x_0, y_0 \rangle = \langle x_1, y_1 \rangle
$$
攻击者的优势定义为 $\left| \Pr[b = b’] - \frac{1}{2} \right|$。
定义 6 我们称一个在 $\mathbb{F}_p^n$ 上针对点积的私钥函数加密方案具有在受限解密密钥存在下的不可区分密文(或简称为是安全的),如果任何概率多项式时间攻击者在上述游戏中的优势作为安全参数 $\lambda$ 的函数是可忽略的。
3.3 构造
我们现在在对称双线性群中提出我们的构造。我们将选择随机对偶正交基 $(b_1, b_2) \in B$ 和 $(b^ _1, b^ _2) \in B^ $,它们将分别用于指数中以编码消息和一次性密钥向量。为了给混合安全证明留出空间,向量将被编码两次,从而生成密文 $(A_i, B_i)_{i=1}^n$。更具体地说,第一组基 $(b_1, b^ _1)$ 用于编码消息向量 $x$ 和 $x$,而第二组基 $(b_2, b^*_2)$ 用于编码密钥向量 $s$ 和 $u$。
我们将方案中消息和密钥的结构在对偶的两侧完全对称视为我们构造的一个核心特征。标准正交基。这产生了一种方案,该方案对消息明文和密钥在加法和乘法下均具有同态性。为了生成用于内积函数的解密密钥,我们在密钥向量 $y$ 下对向量 $v$ 和 $t$ 进行加密,得到“密文” $(C_i, D_i)_{i=1}^n$,并添加一个抵消项 $E = e(g_2, h_2)^{\langle s,t \rangle}$ 以及用于离散对数计算的基 $F = e(g_1, h_1)$。解密首先在 $A$ 和 $D$ 元素上“同态地”计算内积。($B$ 和 $C$ 元素用于证明中。)结果是编码了消息和密钥向量内积的密文。接下来的解密只需抵消密钥分量 $E$ 并以 $F$ 为底计算离散对数。
我们仅需要对来自固定多项式范围内的 $\langle x,y \rangle$ 进行解密,因为这将允许解密算法在一个离散对数通常难以计算的群中将其作为离散对数来求解。因此,我们期望 $\langle x, y \rangle$ 的取值范围较小,例如集合 ${0,…, T}$ 中的一个整数。使用波拉德 $\lambda$ 方法,离散对数的计算预计需要时间 $\tilde{O}(\sqrt{T})$ 或者通过存储包含 $O(T)$ 条目的查找表所需的空间 $T$。
- 设置算法 $(1^\lambda, n)$ :输入安全参数 $1^\lambda$ 和维度 $n$,计算一个对称双线性点积群 $(G, G_1, G_T, e, d) \leftarrow G^ (1^\lambda)$,其中 $|G| = p$。选择生成元 $g_1, h_1 \in G$ 和 $g_2, h_2 \in G_1$。随机采样一组标准正交基 $B, B^ \leftarrow \text{Dual}(\mathbb{F}_p^2)$。该算法输出主密钥 MSK 为 $B, B^*, g_1, g_2, h_1, h_2, p, n$。
-
加密算法 $(MSK, x)$
:在秘密密钥 MSK 下加密消息 $x \in \mathbb{F}_p^n$,选择随机向量 $s_q, u_q \in \mathbb{F}_p^n$,输出密文
$$
A_i = (g^{b_1}_1)^{x_i}(g^{b_2}_2)^{s_i}, \quad B_i = (h^{b^ _1}_1)^{x_i}(h^{b^ _2}_2)^{u_i}
$$
并存储随机向量 $st_q \leftarrow (s_q, u_q)$。 -
密钥生成 $(MSK, y, st_q)$
:为了在主密钥 MSK 下为向量 $y \in \mathbb{F}
p^n$ 的第 $q$ 个密文生成解密密钥,该算法选择随机向量 $t, v \in \mathbb{F}_p^n$,并将秘密密钥 $SK
{y,q}$ 设置为
$$
C_i = (g^{b_1}_1)^{y_i}(g^{b_2}_2)^{v_i}, \quad D_i = (h^{b^ _1}_1)^{y_i}(h^{b^ _2}_2)^{t_i}, \quad E = e(g_2, h_2)^{s_q t}, \quad F = e(g_1, h_1)
$$ -
解密算法 $(SK_{y,q}, CT)$
:使用私钥 $SK_{y,q} = (C, D, E, F)$ 对密文 $CT_{x,q} = (A, B)$ 进行解密,计算
$$
\prod_{i=1}^n d(A_i, D_i) / E
$$
并返回以 $F = e(g_1, h_1)$ 为底的离散对数。
我们想对这个方案进行一些评论:
- 上述构造是有状态的。它要求加密器为每个密文存储密钥向量 $st_q = (s_q, u_q)$。对于高效的密钥生成实现,可以降低存储复杂度,并使用标准密钥派生技术重新计算状态。也就是说,不是从 $\mathbb{F}_p$ 中均匀随机地采样向量 $s_q, u_q$,而是针对 $i \in {s, u}$ 运行伪随机函数 $\text{PRF}(k_i, q)$,其中 $k_i$ 是主密钥 MSK 的一部分,而 $q$ 是指向密文的指针。
- 某些新兴应用要求计算一类谓词 $P_x: \mathbb{F}_p^n \to {0, 1}$ 中的谓词 $P = {P_x \mid x \in \mathbb{F}_p^n}$,其中 $P_x(y) = 1$ 当 $\langle x, y \rangle = 0$ 时成立,$P_x(y) = 0$ 否则不成立。已证明,通过这种方法可以评估次数为 $n$ 的多项式以及 2-CNF/DNF 公式 [9]。我们的方案支持高效的谓词测试,无需计算离散对数,只需将解密算法的输出与 $F^0 = e(g_1, h_1)^0$ 进行比较即可。
我们在完整版本中证明了以下主要定理。
定理 1 . 假设 SDA 假设在 $G$ 中成立,则上述方案是安全的。
4 动态可搜索对称加密
可搜索加密允许客户端以一种特殊方式加密数据,使其之后能够生成搜索令牌并将其作为查询发送给存储服务器。服务器在接收到搜索令牌后,可以在加密数据上执行搜索,并返回相应的加密文件。对称可搜索加密系统通常遵循一个蓝图(至少在系统容忍访问模式泄露信息的情况下):首先使用支持伪随机密文的加密算法对数据进行加密,并用词语对密文进行标记;接着,利用词-标识符对构建一个“密码学”数据结构,其中每个标识符指向一个密文或一组密文;然后,构建可搜索加密系统就转化为为该数据结构设计搜索机制。在本文其余部分中,我们将实现这一思想,并针对在数据结构中搜索标识符的情形定义可搜索加密。
4.1 语法
我们遵循卡什等人(Cash et al.)的符号说明。数据库 $DB = ((id_i, {w_j} {j \leq n}) {i \leq m})$ 表示为一个标识符/词元组的列表,其中每个(文件)标识符 $id_i \in I$ 来自索引集 $I$,并与来自词典 $W$ 的 $j$ 个关键词 $w \in {w_j}_{j \leq n}$ 相关联。搜索查询 $\psi(w) = (\psi, w)$ 由关键词元组 $w \subseteq W$ 和一个关于 $w$ 的布尔公式 $\psi$ 指定。我们用 $|\psi|$ 表示该公式的元数。我们用 $DB(w_j)$(或 $DB(\psi(w))$)表示与关键词 $w_j$ 关联(或匹配 $\psi(w)$)的标识符集合。更新查询 $\phi(u)$ 由更新操作 $u$ 参数化。形如 $(add, w, id)$、$(del, w, id)$ 的更新用于添加或删除与关键词 $w$ 关联的标识符 $id$;形如 $(add, w, id)$、$(del, w, id)$ 的更新操作用于向标识符 $id$ 添加或删除一组关键词 $w$。我们用 $EDB(\phi(u))$ 表示满足更新操作 $u$ 的标识符集合。
定义 7 (可搜索加密) 。一种动态可搜索对称加密方案 DSSE 由客户端和服务器之间执行的三个交互式算法(设置算法, 搜索, 更新)组成,使得
- 设置算法 $(1^\lambda, DB)$ 。输入一个安全性参数 $\lambda$ 和一个数据库 $DB$,该协议输出一个密钥 MSK 和一个加密数据库 $EDB$。客户端存储密钥 MSK,而服务器持有加密数据库 $EDB$。
- 搜索 $(MSK, \psi(w), EDB)$ 。该协议在客户端和服务器之间执行,其中客户端输入为密钥 MSK 和针对关键词 $w$ 的搜索查询 $\psi(w)$,服务器输入为加密数据库 $EDB$。服务器输出一组标识符 $ID \subseteq I$,客户端无输出。
- 更新 $(MSK, \phi(u), EDB)$ 。该协议在客户端和服务器之间执行,其中客户端输入为密钥 MSK 和针对操作 $u$ 的更新查询 $\phi(u)$,服务器输入为加密数据库 $EDB$。交互结束后,客户端以更新后的状态 $MSK’$ 终止,服务器则拥有修改后的加密数据库 $EDB’$。
如果搜索和更新是两轮协议,则称一个动态对称可搜索加密系统是非交互式的。
定义 8 (正确性) . 一个动态对称可搜索加密 DSSE 系统是正确的,如果对于所有数据库 $DB$、所有搜索查询 $\psi(w)$、所有更新查询 $\phi(u)$ 以及所有 $(MSK, EDB) \leftarrow \text{Setup}(1^\lambda, DB)$,均有
-
搜索正确性
:存在一个可忽略函数 $\varepsilon_s$,使得
$$
\Pr[\text{Search}(MSK, \psi(w), EDB) \neq DB(\psi(w))] = \varepsilon_s(\lambda)
$$ -
更新正确性
:存在一个可忽略函数 $\varepsilon_u$,使得
$$
\Pr[\text{Update}(MSK, \phi(u), EDB) \neq EDB(\phi(u))] = \varepsilon_u(\lambda)
$$
4.2 安全性
我们的目标是提供一种强健的查询隐私保护机制。在我们的模型中,即使相同的查询之前已被发出,服务器也无法区分搜索和更新查询。我们允许攻击者通过与系统的交互来学习搜索和更新查询的结果,即相关的标识符信息。(注意,当服务器被要求检索作为搜索和更新结果的密文时,将得知访问模式。)为此,我们设计了一个挑战者与攻击者 $A$ 之间的实验:攻击者选择两个数据库 $DB_0, DB_1$,并发送两个查询 $q_0, q_1$(无论是搜索查询还是更新查询)给挑战者;挑战者对随机选择的一位 $b$,在两个加密数据库之一上模拟该查询 $q_b$ 的效果 $DB_b$。如果攻击者能够猜出其所交互的数据库,则赢得该实验。为了避免出现平凡的游戏情况,我们必须限制攻击者查询的类型。显然,若攻击者定义的一对查询在其响应上存在差异,则攻击者以压倒性概率赢得该实验。因此,对于有意义的安全性概念,我们要求对于所有搜索查询 $\psi(w) = (\psi, w)$,成立 $DB_0(\psi(w)_0) = DB_1(\psi(w)_1)$;并且对于所有更新查询 $\phi(u) = (\phi, u)$,成立 $EDB_0(\phi(u)_0) = EDB_1(\phi(u)_1)$。我们将上述讨论总结为以下实验:
设置算法 :攻击者 $A$ 选择两个数据库 $DB_0, DB_1$。挑战者抛掷一枚硬币 $b \in {0, 1}$,并运行 $\text{Setup}(1^\lambda, DB_b)$。它将主密钥 MSK 保留给自己,并将加密数据库 $EDB_b$ 发送给 $A$。
挑战 :攻击者 $A$ 可以自适应地向搜索和更新预言机发送查询:
-
搜索 $(\cdot, \cdot)$
:该预言机实现搜索协议。它接受两个大小相等的搜索查询 $(\psi(w)_b = (\psi_b, w_b)$,且需满足以下限制条件:
$$
DB_0(\psi(w)_0) = DB_1(\psi(w)_1)
$$
该预言机的目的是模拟客户端在输入 $(MSK, \psi(w)_b, \text{加密数据库}_b)$ 上运行搜索算法。 -
更新 $(\cdot, \cdot)$
:该预言机接收两个长度相等的更新查询 $\phi(u)_0, \phi(u)_1$ 作为输入,且需满足以下限制条件
$$
EDB_0(\phi(u)_0) = EDB_1(\phi(u)_1)
$$
它模拟客户端在输入 $(MSK, \phi(u)_b, EDB_b)$ 上运行 Update 算法的过程。
猜测 :在某个时刻,攻击者 $A$ 输出一个猜测 $b’$。该攻击者在此实验中的优势定义为 $\Pr[b’ = b] - \frac{1}{2}$。
定义 9(完全安全性) 。如果所有多项式时间的攻击者 $A$ 在上述实验中所具有的优势至多为可忽略的,则称该动态对称可搜索加密系统是完全安全的。
上述概念提供了强搜索查询隐私保障,即攻击者不仅无法获知搜索词 $w$,也无法获知公式 $\psi$。我们还考虑一种较弱的版本,其中方案仅隐藏搜索词。该实验与上述实验相同,只是要求对于所有对抗性的搜索查询 $\psi(w) = (\psi, w)$ 满足 $(\psi, w_0) = (\psi, w_1)$,且对于所有对抗性的更新查询 $\phi(u) = (\phi, w)$ 满足 $(\phi, w_0) = (\phi, w_1)$。
定义 10(弱安全性) 。一个动态可搜索对称加密方案是弱安全的,如果所有多项式时间的对抗者 $A$ 在修改后的实验中至多具有可忽略的优势,且满足以下限制:对于所有搜索和更新查询,均有 $(\psi, w_0) = (\psi, w_1)$ 且 $(\phi, w_0) = (\phi, w_1)$。
4.3 关于蓝图的一点说明
本节的开头描述了可搜索对称加密系统的一个蓝图。由于索引搜索方案具有不可区分的搜索查询,使得我们能够构建一种针对外部攻击者的可搜索对称加密系统,该系统在给定客户端和服务器端的跟踪记录的情况下,能够抵御对(流行)搜索词频率的分析:在服务器发送已识别索引对应的密文之前,会对密文进行重新随机化。
4.4 高层思想
为了便于解释,我们说明在单个单词上搜索背后的主要思想。虽然以往的构造通常采用链表数据结构 [2–4],但我们的方案实现了一种完美二叉树数据结构。该二叉树的深度 $d = \log |W|$ 与单词总数(以及一个预先固定的参数)成对数关系。
我们将第 $l$ 层的第 $k$ 个节点记为 $N_{k,l}$,根节点为 $N_{0,0}$。每个节点都有两个子节点。每条连接父节点 $N_{k,l}$ 和子节点 $N_{k’,l+1}$ 的边都关联一个比特 $b_l \in {0, 1}$。每个叶子节点被随机关联到一个桶 $b_j$,该桶包含所有匹配词语 $w_j \in W$ 的索引 $id_i \in ID$。
搜索一个词语 $w = (w_0, …, w_{d-1})$ 意味着从根节点 $N_{0,0}$ 到叶子节点 $N_{k,d-1}$ 遍历一条路径,并读取桶中所有标识符。
接下来需要说明如何实现一个私有决策机制以高效地选择节点。这里正是约束函数加密发挥作用的地方(针对维度 $n = 1$)。我们构建一棵密码学二叉树,其中加密 $(CT_{k,l}, q_{k,l}) \leftarrow \text{Enc}(MSK, 1)$ 表示节点 $N_{k,l}$。
为了搜索词语 $w = (w_0, …, w_{d-1})$,我们首先使用伪随机函数计算该词语 $w_j$ 的随机编码 $b_j = (b_0, …, b_{d-1})$,然后生成受限于从根到目标叶节点的路径上的节点集合的解密密钥 $SK_{k,l} \leftarrow \text{KeyGen}(MSK, b_l, q_{k,l})$。对节点 $N_{k,l}$ 进行解密可提供提示,用于选择子节点 $N_{k’,l+1}$
$$
\text{Dec}(SK_{k,l}, CT_{k,l}) =
\begin{cases}
0 & \text{if } b_l = 0 \
1 & \text{if } b_l = 1
\end{cases}
$$
应用此技术到所有连续节点,使我们能够在 $O(\log |W|)$ 内高效地遍历树。
要搜索一个涉及多个词 $\psi(w)$ 的公式,首先查找匹配每个词的桶,然后在桶的索引上应用该公式。搜索一个元数为 $|\psi|$ 的复合表达式需要 $O(|\psi| \cdot \log |W|)$。更新加密数据库中的词本质上需要查找匹配该词的桶,然后向该桶添加一个新的索引,或删除该桶。该操作耗时 $O(\log |W|)$。
讨论与推广 。使用函数加密方案 CFE 具有多个优势。首先,它对每个搜索查询进行随机化。没有概率方案下,可搜索加密系统将满足较弱的隐私概念,即(外部)攻击者能够识别先前发送的搜索查询。该方案还确保服务器在确定桶之前必须遍历树结构,从而不会偏离路径。若攻击者将搜索令牌应用于非符合条件的节点,或将其与之前的令牌组合使用,则会得到随机解密结果。这些特性正是该方案除访问桶的模式外不泄露更多信息的关键所在。第三,当表达更全面的遍历策略时,约束函数加密方案的价值随之提升。回顾一下,CFE 支持对函数 $f_x: \mathbb{F}_p^n \to \mathbb{F}_p$ 从内积类 $F = {f_x \mid x \in \mathbb{F}_p^n}$ 中进行解密,其中 $f_x(y) = \langle x, y \rangle$ 来自固定的多项式范围。
可以将该方案推广到以下方式在有向无环图上进行搜索:
- 对每个节点 $N_{k,l}$,加密一个向量 $x_{k,l} \in \mathbb{F}_p^n$。
- 对每条连接父节点 $N_{k,l}$ 与子节点 $N_{k’,l+1}$ 的边,分配一个标签 $f_{x_{k,l}}(y_{k’,l+1})$。
- 要从节点 $N_{k,l}$ 遍历到子节点 $N_{k’,l+1}$,使用对应 $y_{k’,l+1} \in \mathbb{F} p^n$ 的密钥对节点 $N {k,l}$ 进行解密算法。
这样,搜索条件扩展到了内积函数。这些是特别有用的函数,能够计算合取、析取、CNF/DNF 公式、阈值、哈达玛权重和低范围统计。我们将针对有向无环图及其他数据结构进行搜索的通用方案的细节留到全文版本中。在下一节中,我们描述一种可搜索加密方案的特例,其中在节点 $N_{k,l}$ 处,内积函数通过异或 $w_l \oplus 1$ 来执行有效性检查。
4.5 构造的描述
设 $\text{CFE} = (\text{Setup}, \text{KeyGen}, \text{Enc}, \text{Dec})$ 为一个约束函数加密方案。不失一般性,假设 $|W| = 2^d$ 是 2 的幂。令 $\text{PRF}: {0, 1}^\lambda \times {0, 1}^d \to {0, 1}^d$ 为一个伪随机函数。
定义一个动态对称可搜索加密系统 $\text{DSSE} = (\text{Setup}, \text{Search}, \text{Update})$ 如下:
-
Setup$(1^\lambda, DB)$ :输入一个安全性参数 $\lambda$ 和数据库 $DB = ((id_i, {w_j} {j \leq 2^d}) {i \leq m})$,按如下方式构建加密数据结构:
1. 采样一个随机种子 $s \leftarrow_R {0, 1}^\lambda$ 并为维度 $n = 1$ 的约束函数加密方案生成主密钥 $msk \leftarrow \text{CFE}.\text{Setup}(1^\lambda)$。
2. 对于每个 $w_j \in DB$,将 $DB(w_j)$ 添加到桶 $b_j \leftarrow \text{PRF}(s, w_j)$ 中。
3. 通过计算一组 $2^d - 1$ 密文 $CT_{k,l}, q_{k,l} \leftarrow \text{Enc}(msk, 1)$ 来创建加密数据结构,并将每个状态 $q_{k,l}$ 与节点 $N_{k,l}$ 关联。定义 $M$ 为标识所有密文的 $(k, l)$ 对的集合。
4. 返回主密钥 $MSK = (s, q_{k,l}) {\forall (k,l) \in M}$ 和加密数据结构 $EDB = (CT {k,l})_{\forall (k,l) \in M}$。 -
Search$(MSK, \psi(w))$ :为了为查询 $\psi(w) = (\psi, w_0, …, w_{|\psi|})$ 生成搜索令牌 $TK_{\psi(w)}$,客户端为每个词 $w_j = (w_0, …, w_{d-1})$ 按如下方式生成解密密钥 $SK_j = (SK_{j,0}, …, SK_{j,d-1})$:
1. 通过计算 $\text{PRF}(s, w_j)$ 恢复单词 $w_j$ 的桶 $b_j = (b_{j,0}, …, b_{j,d-1})$。
2. 对路径上的节点 $N_{k,l}$ 计算一个解密密钥 $SK_{j,k} \leftarrow \text{KeyGen}(MSK, b_{j,l}, q_{k,l})$。
客户端将搜索令牌 $TK_{\psi(w)} = (\varphi, SK_1, …, SK_{|\psi|})$ 发送给服务器。服务器在收到该令牌后,对每个解密密钥 $SK_j = (SK_{j,0}, …, SK_{j,d-1})$ 所对应的桶 $b_j$ 进行如下搜索:
1. 对 $0 \leq l \leq d-1$ 比特 $b_{j,l} \leftarrow$ 执行解密算法 $\text{Dec}(SK_{j,l}, CT_{k,l})$。
2. 遍历到树中与比特 $b_{j,l}$ 相关联的边所在层级为 $l+1$ 的节点。
一旦服务器识别出所有桶 $b_j$,它将应用公式 $\varphi$ 来检索与标识符 $\psi(w)$ 匹配的密文。
- 更新$(MSK, \phi(u), EDB)$ 。要向数据结构中添加文件,需要搜索匹配该词的桶,并将文件索引存储在该桶中。删除匹配某个词的文件时,需要删除与该词关联的桶。删除单个文件时,客户端需要先解密文件,然后要求服务器删除与相应密文关联的索引。
仔细检查我们的数据结构后发现,桶会泄露所存储单词的数量。服务器可能基于桶的大小进行统计分析,并利用这些额外信息破坏隐私。我们注意到,先前的研究工作也容易受到此类分析的影响。为了防止服务器通过桶中存储的索引数量推断出单词,可以应用标准的掩码技术来调整大小,即通过向桶中添加“虚拟”标识符以使桶的大小归一化。
4.6 安全性分析
我们现在准备分析该方案。
定理 2 。假设 $\text{PRF}$ 是一个安全的伪随机函数,且 $\text{CFE}$ 是一个安全的约束函数加密方案,则上述动态可搜索加密系统是弱安全的。
证明(概要) 。该证明是平凡的,因此仅作简述。可以利用一个攻破可搜索加密方案安全性的攻击者 $A$ 来构建针对伪随机函数或约束功能性加密方案的归约。为了攻击伪随机性,归约过程抛一枚比特 $b$,并模拟可搜索加密方案,其中每次对 $\text{PRF}$ 的调用都被转发至伪随机预言机,以实现伪随机函数 $\text{PRF}(b=0)$ 或具有相同输出范围的随机函数 $(b=1)$。当攻击者 $A$ 输出猜测 $b’ = b$ 时,归约推测其所面对的预言机实现了伪随机函数 $\text{PRF}$;否则,归约推测其所面对的是一个随机函数。与随机函数进行交互。为了攻击受限函数加密方案的安全性,归约通过将加密请求转发给挑战预言机来模拟密码学二叉树的生成。它通过将请求传递给其密钥生成预言机来模拟搜索和更新查询。当攻击者 $A$ 输出猜测 $b’ = 0$ 时,归约声称正在与 $EDB_0$ 交互,搜索词语 $\psi(w)_0$ 并执行更新 $\phi(u)_0$;否则,它声称正在与 $EDB_1$ 交互,搜索词语 $\psi(w)_1$ 并执行更新 $\phi(u)_1$。
2万+

被折叠的 条评论
为什么被折叠?



