外包数据库上的隐私保护 k近邻查询
摘要
云计算使传统的客户端‐服务器模型转变为数据库即服务( DBaaS),数据拥有者将她的数据库以及数据管理功能外包给云服务提供商。尽管云服务减轻了客户端的数据管理负担,但数据隐私方面的重大担忧仍然存在。在本研究中,我们聚焦于隐私保护的 k‐最近邻(k‐NN)查询,首次在诚实但好奇的攻击者模型下提供了具有预处理的亚线性解决方案,其计算复杂度为 O˜(klog⁴n)。我们的构造方法采用名为 kd‐tree 的数据结构以实现亚线性查询复杂度。为了保护数据访问模式,使用混淆电路模拟不经意 RAM(ORAM)来访问 kd‐tree 中的数据。与现有方案相比,我们的方案对数据拥有者和查询客户端均只引入了较小的开销。
关键词 :隐私保护计算 · k最近邻搜索 · Outsourcing计算 · Encrypted数据库 · ObliviousRAM
1 引言
过去十年见证了云计算的快速发展,其无处不在、便捷、按需的网络访问特性使其取得了巨大成功。云计算的一个有趣应用是数据库即服务(DBaaS)[7],在该模式下,数据拥有者将数据库及其管理功能外包给云服务提供商,以降低数据库管理成本。尽管如此,数据库即服务中的数据隐私问题仍然存在,因为无法完全信任云,而数据拥有者希望保护其数据不被云所暴露。在将数据库外包给云之前对其进行加密是提供隐私保护的直接方法。然而,这带来了在加密数据库上搜索的挑战,因为通常很难以有意义(且安全)的方式操作加密数据。
在本研究中,我们考虑了一种更具挑战性的情况,即数据拥有者与查询客户端互不信任。姚(Yao)提出的多方计算(MPC)[28]为处理此类问题提供了一种通用工具。然而,直接应用多方计算(MPC)通常会导致性能不佳,因为查询客户端可能使用计算能力和/或通信能力受限的设备,例如智能手机。在数据库即服务(DBaaS)场景下,云拥有巨大的计算资源,因此利用这一优势是十分自然的选择。
我们专注于隐私保护 k最近邻(k‐NN)查询,这一问题广泛属于在加密数据库上的搜索领域。需要注意的是,k最近邻是机器学习和数据挖掘中的一个基本构建模块,并具有广泛的应用。这些因素促使了许多关于数据库即服务环境下 k‐NN 的研究,其目标是保护数据和查询的隐私(详见第1.2节)。在我们的解决方案中,通过采用戈登等人提出的结合不经意内存访问和多方计算的技术,成功将终端用户的计算和通信开销卸载到云上。同时,云的复杂度为 O˜(klog⁴n),相对较低。
1.1 问题描述
隐私保护 k‐NN查询 :数据拥有者拥有一个数据库 D,其中包含来自 m 维度度量空间的 n 个点 d₁,…, dₙ。客户端有一个查询点 Q,希望找出 Q 的 k 个最近邻。当 k = 1 时,简称为最近邻(NN)查询。本文中我们考虑低维欧几里得空间,例如位置服务中使用的空间数据点(通常是二维或三维点)。
隐私保护的 k‐最近邻应确保查询客户端除了其查询结果外,无法获取关于数据库 D 的任何信息;数据拥有者无法获取关于查询点和结果的任何信息;云服务提供商无法获取关于数据库、查询点和结果的任何信息。
外包模型 :在概念上涉及三方:拥有数据库的数据拥有者、提供存储和计算资源的云服务提供商(CSP),以及发起 k‐最近邻查询的客户端。请注意,我们的构造方法支持多个客户端。与许多考虑数据外包的研究(参见相关工作)类似,我们将云服务提供商(CSP)划分为两个互不勾结的云服务器,以便将通信和计算开销从客户端卸载。框架示意图见图1。
我们注意到,关于两个互不勾结的云服务器的假设已经在许多先前的云计算安全研究中被采用,例如在[4,5,9,25]中。
此外,信息论安全的私有信息检索[6]的整个领域完全基于这一假设。最后,我们注意到,可以允许云服务器之间存在共谋,但代价是假设有足够多的云服务器,且共谋联盟的规模足够小。为此,我们指出,我们的非共谋模型本质上是无条件安全多方计算和阈值密码学中广泛使用的标准阈值假设的一个特例。然而,在本研究中,为了简化,我们重点关注涉及两方计算的两个云服务器的情况,从而使阈值等于1。
安全定义 :我们采用诚实但好奇的敌手模型,这意味着各方会遵守协议,但可能会根据从协议执行中获取的消息尝试推导出其他方的额外信息。我们遵循多方计算文献中的基于模拟的安全定义 [11]。
定义1(非正式) 。我们说一个协议 Π 安全计算一个函数,如果对于每一方,都存在一个多项式模拟器,可以从她自己的输入和输出来模拟该方的视图。
1.2 相关工作
服务器辅助的安全计算 我们工作的动机与Kamara等人提出的服务器辅助安全计算领域类似,其目的是利用云服务器的能力来卸载多方计算参与者的巨大通信和计算开销。后续工作要么构建通用外包多方计算协议[5,18],要么在服务器辅助安全计算模型下为特定应用设计协议[1,16,24]。我们的工作在两个方面不同于他们的工作:(1)在服务器辅助安全计算模型下,尚未设计针对 k‐NN 查询的特定协议;(2)所有针对服务器辅助安全计算的解决方案仅考虑了卸载的终端用户的复杂度,而云服务器的负担在输入规模上仍具有线性复杂度的下界。然而,我们的协议也实现了云服务器的亚线性复杂度。
基于不经意RAM(ORAM)的方法 。最近,戈登等人[13]提出将混淆电路与 ORAM 结合,以在客户端‐服务器模型中构建摊销亚线性两方计算协议。我们的隐私保护 k‐NN 查询协议在此框架下运行。在戈登等人的通用构造中,他们将底层函数抽象为迭代式通用下一条指令RAM电路所描述的形式。然而,将实际 RAM 协议转换为下一条指令函数表示形式并非易事。我们设计了基于不经意协议的NN查询和 k‐NN查询算法的迭代版本,该算法基于 kd‐tree,这是我们的技术贡献之一。
另一类研究工作是基于ORAM的不经意数据结构。王等人[26]在经典 ORAM 模型中研究了不经意数据结构。他们指出,非递归ORAM足以不经意地构造一类特定的数据结构,他们称之为有界分叉树。但他们留下了设计不经意递归数据结构的问题尚未解决。我们通过将递归数据结构以及递归算法转换为其迭代对应形式,展示了如何实现这一缺失的部分。我们针对 kd‐tree 的 ORAM 构造受到他们观察的启发,但 kd‐tree 并不完全是有界分叉树,因为在 k‐NN 查询协议中,我们需要从子节点回溯到其祖先节点。
特定的隐私保护 k‐NN 查询在云上的协议 。为了在加密数据上安全地处理 k‐NN 查询,Wong等人[27]提出了一种不对称保内积加密(ASPE)方案,该方案保留了查询点与数据库中记录之间的距离。然而,Yao等人[29]指出ASPE加密方案容易受到选择明文攻击,因此是不安全的。Zhu等人[31]改进了Wong等人的构造,使得在无需与客户端共享密钥的情况下也能实现隐私保护的 k‐NN 查询。但他们的构造要求数据拥有者参与查询过程。Hu等人[14]提出使用隐私同态来解决隐私保护的 k‐NN 查询问题。然而,他们的构造由于两个原因被证明是不安全的。首先,他们所选用的隐私同态加密方案[8]本身是不安全的[23];其次,即使假设底层隐私同态是安全的,他们的构造仍然容易受到探测攻击[29]。
最近,Elmehdwi等人[9]在与我们完全相同的模型下,提出了一个针对加密数据库的 k‐NN 查询协议。他们利用加法同态加密开发了多种两方计算工具,以构建安全的 k‐NN 查询协议。不幸的是,他们的构造采用了直接的线性搜索算法,导致云服务器的复杂度为准线性。
1.3 我们的贡献
我们提出了在诚实但好奇的敌手模型下,针对外包数据库的最近邻查询和 k‐最近邻查询的高效隐私保护协议。所提出的协议具有以下优势:(1)适用于更实际的应用场景,其中数据拥有者无需信任查询客户端;(2)支持多个查询客户端;(3)为数据拥有者和查询客户端提供基于仿真的隐私保护;(4)对数据拥有者和查询客户端均产生恒定开销;(5)云服务提供商的计算和通信复杂度在数据库规模上为拟对数级,特别是,我们在规模为 n 的低维数据库上实现的隐私保护最近邻查询具有平均复杂度 O˜(log⁴n),而我们的隐私保护 k‐最近邻查询协议具有平均复杂度 O˜(klog⁴n)。
| 方案 | C云服务商 | C_do | C_qc | 诚实客户端安全性 | A_kpa | A_pa | SB |
|---|---|---|---|---|---|---|---|
| Wong et al. [27] | O(nlogk) | O(1) | O(1) | yes | no | yes | no |
| Hu et al. [14] | O(kn) | O(1) | O(kn) | no | no | no | no |
| Elmehdwi 等人 [9] | O˜(kn) | O(1) | O(1) | no | yes | yes | yes |
| 这项工作 | O˜(klog⁴n) | O(1) | O(1) | no | yes | yes | yes |
为了实现期望的亚线性复杂度,我们使用非递归路径ORAM构建了oblivious kd‐tree和oblivious有界优先队列,其开销为 O˜(log²n),这可能具有独立的研究价值。
为了便于参考,我们将所提出的隐私保护 k‐NN 查询协议与现有方案在表 1 中进行比较。注意,表中 C_csp 表示“CSP的复杂度”,C_do 表示“数据拥有者的复杂度”,C_qc 表示“查询客户端的复杂度”,A_pka 表示“抵御已知明文攻击”,A_pa 表示“抵御探测攻击”,SB 表示“基于仿真的安全性”。我们通过将查询点的维度和域大小视为较小的常数来简化比较。
局限性和非目标 :与所有先前使用ORAM来提高安全计算效率的研究类似,我们的构造方法无法防范算法运行时间带来的信息泄露。此外,我们为 k‐NN 查询提出的隐私保护协议的报告复杂度是平均情况复杂度。然而,据我们所知,即使在“明文世界”中,目前也不存在最坏情况复杂度低于线性的k‐NN查询算法。
2 预备知识
2.1 kd‐树
弗里德曼等人提出了一种称为 kd-tree[10]的数据结构,用于解决多维欧几里得空间中的最近邻问题。Kd‐tree 本质上是沿不同维度对空间进行层次分解,更具体地说,kd‐tree 是一种二叉树,其中每个节点都是一个 k‐维点。
我们指出,“kd‐树”表示 k维树,但在本研究中,我们使用 k 作为最近邻的数量,且我们的数据点的维度为 m。使用 kd‐树是为了遵循标准术语,读者不应因 k 的不同含义而产生混淆。
我们建议读者参阅附录A以了解有关 kd‐树及一个简单示例的详细信息。关于d‐树的进一步阅读,请参见 kd‐树,请参见[20]。
2.2 (k)最近邻搜索在 kd‐树中
为了从 kd‐树 T 中查询查询点 Q 的最近邻,算法首先为最近邻初始化一个估计点,并遍历树以更新该估计。一个关键观察是,如果存在一个比当前估计更接近查询点的点,则该点必须位于以 Q 为中心、半径为 Q 到估计点距离的超球面内。如果该超球面与另一半平面不相交,则答案不可能在当前节点的该子树中(为方便起见,我们称之为交集规则)。这一观察本质上使得平均复杂度从线性降低到对数。
当涉及到 k‐NN 查询时,我们需要维护一个容量为 k 的有界优先队列,以记录对 k 个最近邻的当前估计,而不是仅记录单个最近邻。有界优先队列(BPQ)与普通优先级队列类似,区别在于队列的大小有一个固定上限。每当要将新元素插入BPQ时,如果队列已满,则在插入之前会先从BPQ中删除优先级最高的元素。
2.3 路径ORAM
不经意RAM(ORAM)最早由戈德赖希和奥斯特朗斯基提出[12],允许客户端隐藏其访问模式,远程服务器会持续对其内存空间进行重新加密和洗牌。近年来,许多构造方法提升了ORAM算法的效率。其中,斯特凡诺夫等人提出的路径ORAM [22] 是具有多项式对数开销的最先进的实现。
2.4 混淆电路
由于空间限制,我们仅列出ORAM和使用混淆电路的条件栈模拟的已知复杂度的一些事实,这些将用于计算我们的不经意最近邻查询协议的复杂度。我们建议读者参考
读者参考贝尔尔等人的工作 [3] 以获得关于混淆电路的系统性论述,以及[2]了解最先进的实现方法。
- 有使用混淆电路实现的非递归路径ORAM,每次ORAM操作的复杂度为 O˜(log³N),其中 N 是存储在ORAM上的数据的大小[19]。
- 有使用混淆电路实现的条件栈,每次栈操作的复杂度为 Θ(logN),其中 N 是栈的大小[30]。
3 我们的构造
3.1 概述
我们的构造方法采用基于ORAM的多方计算框架[13],以实现使用 kd‐树进行隐私保护的 k‐NN 查询时的次线性计算和通信复杂度。我们通过改进王等人[26]提出的oblivious有界分叉树,构建了一个oblivious kd‐树。然而,如上所述,kd‐树并非精确的有界分叉树,因此我们必须将明文的recursive k‐NN查询算法转换为既oblivious又迭代的版本。
数据拥有者首先将其数据库预处理为一个 kd‐树 T 并上传至一个(概念上的)ORAM服务器。实际上,ORAM服务器以及ORAM客户端由两个互不勾结的云服务器C1和C2模拟实现。T 的内容在C1和C2之间进行加法共享。当客户端以输入 T 发起查询时,她将数据点 Q 在C1和C2之间进行加法共享。C1和C2运行底层的 Q ‐NN查询算法,并通过ORAM程序访问 kd‐树。ORAM访问操作通过C1和C2之间的安全函数计算进行模拟。k使用d‐树进行 k‐NN查询的问题是一个递归算法。我们将首先把该递归算法转换为迭代版本,然后使其具有数据隐匿性,以便进行混淆电路模拟。在执行混淆电路模拟后,C2持有加密结果,C1持有解密密钥,它们分别将加密结果和解密密钥发送给客户端。参见图2的示意图。
外包数据库上的隐私保护 k近邻查询
3 我们的构造
3.2 迭代最近邻查询算法
为了便于说明,我们从最近邻(最近邻)查询问题开始。为了将递归的NN查询算法转换为迭代版本,我们使用一个栈 S 来存储 kd‐tree 中的节点 T 并保持不变性:即 S 的顶部是当前正在访问的节点。初始时,将 T 的根节点压入 S。在每次迭代中,我们从 S 弹出一个元素并对其进行处理。如果这是首次访问该元素,则检查它是否提供了更优的估计,并将其子节点压入栈中;如果这是第二次访问该元素,则称其为返回点。¹ 对于一个返回点,我们必须根据交集规则来决定是否忽略另一棵子树。当 S 变为空时,算法结束,并找到 Q 的最近邻。
¹ 这意味着算法已完成对该节点子树的遍历并返回到该节点。
3.3 最近邻查询的不经意协议
我们现在描述在外包数据库上的隐私保护最近邻查询。详细的协议1见附录B。
符号和数据结构
。数据拥有者将首先构建一个 kd‐树 T 来表示数据库 D,并将其存储在 ORAM 服务器上,同时完成所有必要的预处理操作,例如数据加密和创建虚拟元素。T 中的节点为
node:=(id, label, level, data, lid, llabel, rid, rlabel, ln, rn)
,其中“id”和“label”分别表示该节点在 ORAM 树中的标识和叶标签,“level”表示该节点在 kd‐树中的递归层级(对 m 取模),即用于划分其子节点的维度,“data”是实际的有效载荷(即 m 维空间中的点),“lid”、“llabel”分别是其左子节点的标识和叶标签,“rid”和“rlabel”则是右子节点的标识和叶标签。为了方便起见,每个节点还包含两个额外的二进制标志“ln”和“rn”。当左(右)子节点非空时,标志“ln”(“rn”)被设为1。在查询算法中,我们使用一个栈 S 来记录算法流程。由于所有对 T 的访问都通过 ORAM 协议进行,因此我们仅在栈中存储节点的标志和指针。栈元素 S 的数据结构如下:
e:=(value, id, level, label, newlabel, r)
。字段“value”是“node.data”在“level”维度上的分量,其中 level 是节点 e 用于划分其子节点的维度;“newlabel”用于在通过底层 ORAM 协议访问 e 时分配一个新的均匀随机叶标签;‘r’是一个二进制标志,用于指示 e 是否为返回点,如第 3.2 节所述。需要注意的是,只有当我们要判断潜在候选点是否可能存在于另一子树中时,字段“value”对于返回点才有意义。
Oblivious kd‐树 。我们修改了王等人 [26] 实现 oblivious 有界分叉树的方法,以构建一个 oblivious kd‐树。王等人使用非递归 ORAM 构造 oblivious 有界分叉树结构的方法是将子节点标识和叶标签存储在父节点上节点,以便每次 ORAM 协议访问一个元素时,都能获取下一个元素的标识和标签。然而,每次通过 ORAM 访问一个元素后,其标签都会改变。为了确保父节点存储其子节点正确的叶标签,王等人采用了预选择技巧。具体而言,在访问一个元素时,访问协议会为其子节点选择一个均匀随机的标签,并存储该新的子节点标签。这个新标签将传递给下一次 ORAM 访问协议,并用于子节点更新其标签。但我们的应用场景与这一假设略有不同。在用于 NN 查询的迭代算法中,我们需要处理返回点的情况,即访问流从一个节点回到其祖先节点。例如,如果 curr 是一个返回点,则在通过 ORAM 协议访问 curr 之后,其标签会发生变化。此时,curr 的父节点将存储关于 curr 的错误信息。一种可能的解决方案是不访问返回点,但此方案会破坏无记忆性属性,从而泄露访问模式的信息。
我们注意到,实际上无需从 ORAM 存储中访问返回点,因为返回点仅用于判断是否需要搜索另一棵子树,而完成此任务所需的所有信息均已存在于栈元素中。因此,在预处理阶段,数据拥有者还会设置一个称为 dummy 的奇异点,其标识为 dummyid,叶标签为 dummylabel。当 curr 为返回点时,算法只需访问虚拟点。由于虚拟元素是一个奇异点,我们既不关心其有效载荷的值,也不关心其子节点标识和标签。因此,可以多次访问该虚拟元素。由于 ORAM 的无记忆性,难以区分访问真实元素和多次访问虚拟元素的情况。
不经意最近邻查询协议 。当客户端发起一个 NN 查询时,她将查询点 Q 共享给 C1 和 C2。随后,C1 和 C2 在非递归路径 ORAM 上使用混淆电路来模拟 NN 查询算法。迭代的 NN 算法从栈中迭代地弹出一个元素,并根据该元素的不同情况继续执行。因此,算法流程依赖于栈顶元素。我们使用一个无记忆栈来使整个协议实现数据隐匿。对于一个无记忆栈 S,有两种操作:条件压栈和条件弹栈。
-
S.conpush(p, e)在谓词 p 为真时将元素 e 压入 S。 -
S.conpop(p)在谓词 p 为真时弹出 S 的栈顶元素。
协议1描述了使用路径 ORAM 进行 NN 查询的无记忆查询过程。ORAM 协议包含两种操作:Access 和驱逐。
-
(node, llabel∗, rlabel∗) ← ORAM访问(id, label, label∗)返回从 ORAM 树根到叶子 label 路径上的一个标识为 id 的节点,及其子节点的两个新标签 (llabel∗, rlabel∗),并更新叶子为 label∗。注意,返回的 node 中子节点的标签是旧版本 (llabel, rlabel)。 -
ORAM.Eviction()在每次 ORAM.访问() 之后执行清理工作。
另一个常用的操作是
x ← MUX(a, b, c)
,其中 a 是一个位值,且当 a = 1 时为 x = c,否则为 x = b。
3.4 混淆电路仿真
协议1的一个重要补充是使用混淆电路模拟路径 ORAM。下面,我们讨论这一点。
由于混淆电路的评估等同于不经意协议,我们不在协议中展示 MUX 门、比较门等基本原语的电路描述。凯勒和肖尔 [19] 使用达姆加德等人的 SPDZ 协议为多方计算实现了路径 ORAM。尽管与混淆电路不同,但协议逻辑是相同的。我们将用贝尔尔等人 [2] 的混淆电路替代其实现的核心部分,以实现不经意最近邻查询协议。除了基本原语和 ORAM 仿真外,我们还需要使用混淆电路模拟一个条件栈。我们同样可以使用 ORAM 来构建条件栈。然而,扎胡尔和埃文斯 [30] 使用具有对数开销的混淆电路的实现结果更高效且简单。
4 扩展到隐私保护 k‐NN 查询
为了实现 k‐NN 查询,我们需要构建一个条件有界优先队列。通过使用混淆电路实现条件有界优先队列,可以轻松地将协议1调整为隐私保护的 k‐NN 查询协议。
王等人 [26] 使用非递归路径 ORAM 构建了一个不经意优先队列,但他们的构造方法在客户端使用了客户端缓存和分支操作,因此难以将其转换到多方计算环境中。凯勒和肖尔构建了一个用于多方计算的不经意优先队列,但他们改进后的实现(开销为 O(log²N)) 使用了递归 SCSL ORAM [21]。本节将展示如何使用非递归路径 ORAM 实现一个开销为 O(log²N) 的 oblivious 有界优先队列,其中 N 是队列的大小。
在我们的 oblivious 有界优先队列中,队列大小的上界为 k。经典优先级队列的构造使用完全二叉堆来存储队列,堆通过一个大小为 A 的数组 k 表示。为了便于表述且不失一般性,我们假设 k = 2ʰ − 1,其中 h 为整数。用 s 表示队列的实际大小。当从优先级队列中出队一个元素时,我们输出堆的根,即 A[1],并将最后一个元素 A[s] 移至根位置,并通过向下冒泡操作调整堆。我们采用一个简单技巧以避免算法流程依赖于大小 s。我们将始终假定优先级队列处于满容量状态 k。初始时,优先级队列中填充了优先级为 ∞ 的虚拟元素。该有界优先队列支持两种操作:
ConDequeue(p, e)
和
ConEnqueue(p, e)
。
Con Dequeue(p) 。条件出队协议将提取具有最高优先级的元素,并且仅在谓词 p 为真时将其移除。
Con Enqueue(p, e) 。条件入队协议将在谓词 p 为真时,将一个优先级为 e 的元素添加到优先级队列中。
由于我们添加了优先级为 ∞ 的虚拟元素,队列始终处于满容量状态。我们将始终执行一个条件出队操作,随后使用相同的谓词 p 执行一个条件入队操作。这一观察使我们获得了一个简单的算法,可将条件出队和条件入队操作合并执行,同时避免了以不经意方式读取从根到 A[s] 路径的开销。其思想是:向一个满的有界优先队列中添加元素时,需先出队优先级最高的元素,然后将新元素插入队列,并进行一些调整以维持堆性质。为了出队优先级最高的元素,我们只需读取二叉堆的根并将其移除。为了插入新元素,我们将二叉堆的根替换为新元素,并使用标准的向下冒泡算法来维持堆性质。详见附录 C 中关于
Con Dequeue And Enqueue(p, e)
的详细协议。
5 安全性与复杂度分析
oblivious NN 协议的安全性(即协议1) 。
定理1 。当使用基于模拟隐私的混淆电路实现时 [3],协议1 安全计算最近邻问题。
证明(概要) 。由于空间限制,我们仅对安全性证明提供一些直观解释。总体思路是使用组合理论,该理论指出,如果方案的每个组件都得到了安全实现,则整个方案也是安全实现的。在协议1中,所有输入和中间变量都在两个互不勾结的云服务器 C1 和 C2 之间共享,唯一公开的信息是 ORAM 树中某些元素的叶标签。当我们访问数据库中的一个元素时,是通过 ORAM 进行访问的。由于我们使用具有统计安全性的路径 ORAM 来实例化 ORAM,因此只要使用提供基于仿真隐私的混淆电路来实现不经意协议,该协议就能实现基于仿真的安全性。
oblivious NN 协议的复杂度 。回想一下,kd‐树数据结构主要适用于低维数据,并且我们还假设一个点的每个维度都属于一个较小的范围,例如位置坐标中的经度和纬度,这些可以用较少的比特表示。在上述设定下,我们可以将涉及有效载荷数据的基本门操作,如加法门、比较门甚至索引() 门,视为具有常数复杂度。
在协议1中,容易看出,在协议流程的任意时刻,我们的条件栈大小被限制在 O(log n) 以内(n 是数据库 D 中的点数),而
ORAM.访问()
和
ORAM.驱逐()
主导了复杂度。由于 ORAM 操作可以通过 O˜(log³n) 的开销来模拟,如第 2.4 节所述,且 while 循环的平均规模为 O(log n),因此我们得到了一个具有平均复杂度 O˜(log⁴n) 的隐私保护最近邻查询算法。
不经意 k‐NN 查询协议的安全性 。不经意 k‐NN 查询的安全性可直接由不经意最近邻查询协议的安全性得出。我们只需指出,附录 C 中的 oblivious 有界优先队列是基于仿真的安全的,因为我们使用路径 ORAM 实现它,并利用具有基于仿真的隐私的混淆电路来模拟操作。
oblivious k‐NN 查询协议的复杂度 。基于 kd‐树计算包含 n 条记录的数据库的 k‐NN 查询的算法具有复杂度 O(k log n),假设每条记录的维度是一个较小的常数。由于我们可以通过 ORAM 以 O˜(log³n) 的开销实现大小为 n 的 oblivious kd‐树,并通过 ORAM 以 O˜(log³k) 的开销实现大小为 k 的 oblivious 有界优先队列,因此我们提出的 oblivious k‐NN 查询的复杂度为 O˜(k log⁴n)。
9563

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



