DF‐ORAM:一种实用的无虚拟块可忽略内存,用于保护外包数据访问模式
 马秋茂,张文生(B),张金生
 
 美国爱荷华州立大学计算机科学系,艾姆斯{qmma,wzhang,alexzjs}@iastate.edu
1 引言
云存储服务已经变得流行,但这些服务的客户端在外包数据时可能会有所保留。作为安全和隐私防护的基本措施,客户端可以在外包之前加密其敏感数据。然而,仅靠数据加密是不够的,因为如果客户端的数据访问模式被泄露,其隐私和数据机密性仍然可能暴露[7]。
可忽略内存访问模式(ORAM)模型[2],通过在数据被访问时持续地对数据进行洗牌,是一种众所周知的、可证明安全的数据访问模式保护方法。最近,已经提出了大量的ORAM构造[1,3–6,8–20]以降低采用该技术的成本。关于ORAM的大多数研究都集中在提高通信效率上,而存储效率并未受到太多关注。
为了托管 N数据块,最先进的ORAM构造通常需要存储服务器同时存储 O(N) 或 O(N log N) 个虚拟数据块。因此,需要一种新的设计来同时减少存储和通信开销。
本文提出了DF-ORAM,一种同时实现以下特性的ORAM构造:(i)服务器存储不存储任何虚拟块;相反,仅引入 3N比特的小幅开销,前提是外包了 N个真实数据块。(ii)无需服务器进行计算。(iii)客户端与服务器之间的通信开销为每次查询 O(log N · B)比特,假设每个块的大小为 B比特。(iv)客户端存储开销为 O(λ · B)比特,其中 λ为安全参数。
DF‐ORAM将服务器端存储组织为一个二叉树。最初,所有外包数据块被随机存储到该存储树的节点中。当客户端查询某个数据块时,包含查询目标的路径将被访问。对于选定路径上的每个非叶节点,会访问两个数据块:其中一个之前已被访问过,另一个则未被访问过;对于路径上的每个叶节点,会访问一个之前未被访问过的数据块。每次查询过程都遵循这种访问模式,以确保过程的无感知性。
每经过固定次数的查询后,系统会启动一次驱逐过程,将存储在客户端的数据块驱逐回服务器端存储树。为了保证不可区分性,每次驱逐过程都按照逆字典序从树中选择一条路径,并对所选路径上的每个节点执行相同的驱逐操作:将节点上的所有数据块检索到客户端,进行更新和重新加密,然后上传回该节点。
此外,DF‐ORAM 仅在某个节点至少拥有 3s 个数据块时,才会将数据块从该节点驱逐到其子节点,其中 s ≥ 4.2 λ 和 λ 是一个安全参数;然后,在这些数据块中,最多选择 s 个数据块驱逐到左子节点,同时选择相同数量的数据块驱逐到右子节点。这一设计基于以下观察:对于任意节点中的 3s 或更多数据块,在每个数据块可以以均匀随机的方式选择可被驱逐至左子节点或右子节点的前提下,以 1 − O(2−λ) 的概率,至少可以将 s 个数据块驱逐到左子节点,并且至少可以将 s 个数据块驱逐到右子节点。因此,总能找到可用于驱逐的真实数据块,而无需引入虚拟块。
大量分析已验证了DF‐ORAM构造的安全性。本文还对DF‐ORAM、路径ORAM和SE‐ORAM这三种无需服务器端计算的最先进ORAM构造进行了渐近分析和基于实现的比较。与路径ORAM相比,DF‐ORAM将通信开销降低了2倍,查询延迟降低了4到5倍,每次查询的数据访问延迟降低了2倍,同时将服务器端存储开销从 9N · B比特减少至 3N比特。与SE‐ORAM相比,DF‐ORAM将通信开销降低了log N倍,但服务器端存储开销增加了 3N比特。
下文2节回顾相关工作。第3节介绍安全定义。第4节介绍DF‐ORAM,接着在第5节进行安全分析。第6节从渐近分析和基于实现的评估两方面将 DF‐ORAM与最先进的ORAM方案进行比较。第7节总结全文。
2 相关工作
ORAM构造大致可分为两类:基于哈希和基于索引的ORAM。
2.1 基于哈希的ORAM
基于哈希的ORAM[2–6,8,11,18–20]将服务器存储组织为多层结构。每一层包含一系列桶[2,18–20],或一个布谷鸟哈希表对,带有暂存区[3–6,8,11]。
在[2]中提出的桶式ORAM中,服务器需要额外存储(2 log N − 1)N个虚拟块,以容纳客户端的 N个真实数据块;其每次查询的通信开销为 O(log³ N)个数据块,并具有恒定大小的客户端存储。
在[18–20]中提出的桶式ORAM中,服务器每层还需额外存储至少 N 个虚拟块和cN 比特(0 < c < 1)的布隆过滤器;其每次查询的通信开销为 O(log² N log log N)个数据块,客户端存储为 O(log² N)个数据块。
在布谷鸟哈希ORAM[3–6,8,11]中,服务器至少存储 7N 个虚拟数据块;其通信开销为每次查询 O(log² N)个数据块,且客户端存储为常数;或者通信开销为每次查询 O(log N)个数据块,客户端存储为 O(Nᶜ)个数据块(0 < c < 1)。
2.2 基于索引的ORAM
基于索引的ORAM[1,9,10,12–16]使用索引表进行数据查找。它们要求客户端将索引表存储在本地,或以类似于存储数据的方式将其递归地外包到服务器,但这会增加通信开销。
典型的基于索引的ORAM包括路径ORAM[13]、C‐ORAM[10]和SE‐ORAM[9]。
路径ORAM[13] 将数据块存储在二叉树中。为了存储 N个真实数据块,树的高度需要为log N,每个树节点存储 Z(一个系统参数,默认值为5)个数据块,因此树上共存储 2Z · N个数据块(包括(2Z −1) · N个虚拟块)。为了查询一个数据块,客户端检索包含查询目标路径上的所有数据块,找到目标后重新加密这些块,并尽可能多地将块上传回服务器。无法存回的块则保留在本地暂存区中。总体而言,路径ORAM产生的通信开销为 O(log N · B)比特,服务器端存储开销为 O(N · B)比特;它不需要服务器端计算成本。
C‐ORAM[10] 也将数据块存储在二叉树中。为了容纳 N个真实数据块,树的高度设置为 L,即 L ∈ O(log N)。每个节点最多可存储 z个数据块(z是一个系统参数,N ≤ z · 2ᴸ⁻¹)。因此,树上至少存储 4N个数据块(注意:这 4N个块包括 3N噪声或空块;由于使用某种同态加密算法加密,每个块的大小必须扩展)。为了查询一个数据块,客户端首先无感知地将包含查询目标路径上的所有块合并至叶节点,然后发起一次PIR读取以检索查询目标。访问完查询目标后,客户端重新加密该块,并使用PIR写入将其写回根节点,然后执行驱逐过程。在驱逐过程中,客户端指导服务器无感知地将从根节点到叶节点的驱逐路径上的所有块进行合并。后续驱逐过程用于从叶节点移除一个噪声块,以避免叶节点溢出。总体而言,C‐ORAM产生的通信开销为 O(B)比特,服务器端存储开销为 O(N · B)比特;但它需要较高的服务器端计算成本。
3 系统模型和安全定义
我们考虑如下系统:一个客户端将 N 个等大小的数据块导出到远程存储服务器。客户端会不时访问这些导出的数据,并希望向服务器隐藏其访问模式。
来自客户端的每个数据请求(应保密)属于以下两种类型之一:(i)从存储中读取具有唯一ID i的数据块 D,表示为三元组(read, i, D);或(ii)向存储写入或修改具有唯一ID i的数据块 D,表示为三元组(write, i, D)。为了完成私有数据请求,客户端需要访问远程存储中的某些位置。
服务器可观察到的对远程存储中某个位置的每次访问可以是以下类型之一:(i)从远程存储的位置 l检索(即读取)数据块 D,表示为三元组(read, l, D);或(ii)将数据块 D上传(即写入)到远程存储的位置 l,表示为三元组(write, l, D)。
我们假设客户端是可信的,而远程服务器是诚实但好奇;也就是说,服务器会根据我们部署的协议存储数据并响应客户端的请求,但它可能会试图推断出客户端的访问模式。客户端与服务器之间的网络连接被认为是安全的;在实际中,这可以通过使用诸如SSL等已知技术来实现。类似于现有ORAM的安全定义[2,13,16],我们对所提出的ORAM的安全性定义如下。
定义1. 设 x = 〈(op₁, i₁, D₁), (op₂, i₂, D₂), ···〉表示客户端预期数据请求的私有序列,其中每个 op要么是 read操作,要么是write操作。设 A(x) = 〈(op′₁, l₁, D′₁), (op′₂, l₂, D′₂), ···〉表示为完成客户端私有数据请求,客户端对远程存储中位置的访问序列(可被服务器观察到)。设 λ为一个安全参数。若一个 ORAM系统满足以下条件,则称其是安全的:(i) 对于任意两个等长的预期数据请求私有序列 x和 y,其对应的可观察的位置访问序列 A(x)和 A(y)在计算上不可区分;且 (ii) ORAM系统运行失败的概率为O(2⁻λ)。
4 DF‐ORAM构造
4.1 服务器端存储
服务器端存储被组织为一个二叉树,其中每个节点都有一个唯一ID。根节点 n₀的ID为0。对于任何其他节点 nₓ,其父节点为 nₚ,如果 nₓ是 nₚ的左子节点,则 x = 2p + 1;如果 nₓ是 nₚ的右子节点,则 x = 2p + 2。
每个节点 nᵢ包含以下组件:一个数据块容器、一个访问位图(表示为 ABᵢ),用于指示哪些块已被访问,一个加密的标签位图(表示为 TAGᵢ),用于指示每个数据块的驱逐方向(如果该数据块必须被驱逐到该节点的右子节点,则为1;如果该数据块可以以相等的可能性被驱逐到左子节点或右子节点,则为0),一个标签计数器(表示为 TCᵢ),用于指示标记为1的数据块数量,以及一个驱逐位(表示为 EBᵢ),用于指示下一个驱逐节点(0表示左子节点,1表示右子节点)。
存储树最初是一棵满二叉树。每个节点存储 2s个数据块,其中 s ≥ 4.2 λ。每个节点 nᵢ的 ABᵢ、TAGᵢ、TCᵢ和 EBᵢ均初始化为全零。设 h+1表示树高,则树中存储的数据块总数为 N = 2(2ʰ⁺¹ − 1)s。注意,该存储不包含任何虚拟数据块。
每个数据块 dᵢ 在导出到服务器之前,使用对称密码(例如AES)以概率加密方式加密为 Dᵢ。具体地,Dᵢ = E(rᵢ|dᵢ),其中rᵢ 是一个随机数。然后,数据块被随机分发到树上的节点上。
随着数据块被查询和被驱逐,树可能变得不平衡。具体而言,如果一个节点不包含任何数据块,则该节点将被删除;如果一个叶节点包含超过 3s 个数据块,则该节点将扩展为以其为根的两级二叉子树。
4.2 客户端存储
客户端在其本地存储中维护一个index table。每个 N外包数据块在此表中都有一个条目。ID为 i的数据块的条目是一个 〈node(i),offset(i),tag(i)〉元组,表示该数据块存储在节点node(i)上,偏移量为offset(i),并且该块被标记为 tag(i)。
客户端还分配了一个永久的stash空间,用于存储最近被查询的最多 s个数据块,以及一个临时的cache空间,以支持数据查询和重排操作。
4.3 数据查询
当客户端想要查询数据块 Dₜ时,会检查 Dₜ是否在其本地暂存区中。如果是,则该数据块被访问并保留在其原始位置;否则,客户端查找其本地索引表以获取 node(t),offset(t) 和 tag(t)。然后,客户端执行以下操作。
客户端随机选择一个第(h+2)层的节点,记为 nₜ′,它是 node(t)的后代。注意,我们从第h+2层选择后代节点是因为根据第5节中的分析,树的高度以极大概率 1−2⁻λ被限制在 h+3以内。此外,如果 tag(t) = 1,则 nₜ′必须是 node(t)的右子节点的后代;否则,nₜ′可以是 node(t)的任意第(h+2)层后代。然后,客户端向服务器发送消息bitmapReq(t′)。
在接收到 bitmapReq(t′) 后,服务器构建一个有序序列,该序列包含从根节点到 nₜ′ 的路径上所有存在的节点,并返回这些节点的访问和标签位图。记该序列为 n′₀, n′₁,···, n′ₗ,其中 n′₀为根节点,n′ₗ距离根节点最远。根据服务器端存储树的当前拓扑结构,以节点 n′ₗ为根的子树形状存在四种情况(如图2所示):形状(i) - n′ₗ 本身是一个叶节点;形状(ii) - n′ₗ 仅有右子节点;形状(iii) - n′ₗ 仅有左子节点且其标签count(TC) 大于0(即 n′ₗ中至少有一个块被标记为1);形状(iv) - n′ₗ仅有左子节点且其 TC为0。
如果 n′ₗ是一个非叶节点,同时它具有右子节点或 TC为0(即图2中的形状(ii) 或 (iv)),服务器将进一步查找一个叶节点(记为 n′ₗ₊₁),该叶节点是 n′ₗ的最远的后代节点,并返回 n′ₗ₊₁的访问位图。
根据从服务器接收到的访问位图,客户端从每个 n′ᵢ 中选择两个块D′ᵢ,₀ 和D′ᵢ,₁,其中 i = 0,···, l,如下所示。
 –
 
  情况I
 
 :Dₜ位于 n′ᵢ中。根据 Dₜ是否已被访问,以下分为两种子情况。
 
 (i) 情况I-A:Dₜ在 n′ᵢ中已被访问。在这种情况下,D′ᵢ,₀被设为 Dₜ,并从 n′ᵢ中未被访问的块中随机选择一个数据块D′ᵢ,₁。
 
 (ii) 情况I-B:Dₜ在n′ᵢ中未被访问。在这种情况下,从 n′ᵢ中已被访问的块集合中随机选择一个数据块 D′ᵢ,₀,并将 D′ᵢ,₁设为 Dₜ。
– 情况II :Dₜ不在 n′ᵢ中。此时,从 n′ᵢ中已被访问的块中随机选择一个块D′ᵢ,₀;从 n′ᵢ中未被访问的块中随机选择另一个块D′ᵢ,₁。
如果n′ₗ 不是叶节点,客户端需要采取以下进一步操作。
– 情况I :n′ₗ有右子节点或 TC的 n′ₗ为0(即图2中的形状(ii)或(iv))。在此情况下,n′ₗ₊₁的访问位图应已被返回给客户端。作为响应,客户端从在 n′ₗ₊₁中已被访问的数据块中随机选择一个块,记为D′ₗ₊₁,₀。
– 情况II :n′ₗ有左子节点且 TC的 n′ₗ不为0(即图2中的形状(iii))。在此情况下,n′ₗ是本次查询过程中需要访问的最后一个节点。在客户端如上所述选择要访问的数据块后,如果所选数据块D′ₗ,₁被标记为0,则应通过将其中一个1比特改为0来更新 n′ₗ的标签位图;这样,被标记为1的数据块数量减少一个。相应地,服务器将 TC减一。
客户端将上述选定数据块的位置发送给服务器,服务器则按有序序列返回客户端请求的数据块:
D′₀,₀, D′₀,₁,···, D′ₗ,₀, D′ₗ,₁
如果 n′ₗ 是访问的最后一个节点,或者
D′₀,₀, D′₀,₁,···, D′ₗ,₀, D′ₗ,₁, D′ₗ₊₁,₀
如果 n′ₗ₊₁是最后一个访问的节点。
从服务器接收到数据块的有序序列后,客户端访问数据块 Dₜ 并将其存储到本地暂存区。同时,客户端对其余的数据块重新加密,然后进行置换并上传回服务器:如果 Dₜ 是返回数据块中的最后一个,则上传除最后一个之外的所有返回数据块;否则,用返回数据块中的最后一个替换 Dₜ 原先所在的位置。因此,服务器端存储树中原先由返回数据块的最后一个所占据的位置将变为空。
最后,客户端更新访问位图以反映最近被访问的数据块,重新加密节点的标签位图,并将其上传回服务器。客户端还更新其本地索引表以反映数据块的置换。
请注意,根据上述算法,每次查询过程都会访问一系列非叶节点和/或一个叶节点。从每个非叶节点中访问两个数据块。从叶节点中仅访问并移除一个数据块。如果该数据块是查询目标块,则由客户端保留;否则,将其移动到查询目标块所在的位置。图1展示了两个示例,用以说明在两种不同场景下的查询过程。
  中,查询目标 Dt位于节点 n5。客户端随机选择节点 n47作为 n5的第5层(即第(h+ 2)层)后代;即,选择从根节点到 n47的路径进行访问。由于 n47在当前存储树中不存在,客户端实际上从每个节点 n0、 n2、 n5、 n11和 n23分别读取两个数据块(包括 Dt)。 n23是叶节点,因此查询后从 n23读取的数据块被移动到 Dt原来所在的位置。(b)中,查询目标 Dt位于节点 n1,客户端随机 选择 n37作为 n1的第5层后代。由于从 n0到 n37路径上的节点 n8、 n18和 n37在当前 存储树中不存在,客户端实际上从所选路径上的每个节点 n0、 n1和 n3分别读取两个 数据块(包括 Dt)。由于 n3是非叶节点且其所有数据块均标记为0,服务器允许客户 端从 n3的一个最远后代节点 n16读取一个数据块。此外,从 n16读取的数据块在查询后 被移动到 Dt原来所在的位置。)
 中,查询目标 Dt位于节点 n5。客户端随机选择节点 n47作为 n5的第5层(即第(h+ 2)层)后代;即,选择从根节点到 n47的路径进行访问。由于 n47在当前存储树中不存在,客户端实际上从每个节点 n0、 n2、 n5、 n11和 n23分别读取两个数据块(包括 Dt)。 n23是叶节点,因此查询后从 n23读取的数据块被移动到 Dt原来所在的位置。(b)中,查询目标 Dt位于节点 n1,客户端随机 选择 n37作为 n1的第5层后代。由于从 n0到 n37路径上的节点 n8、 n18和 n37在当前 存储树中不存在,客户端实际上从所选路径上的每个节点 n0、 n1和 n3分别读取两个 数据块(包括 Dt)。由于 n3是非叶节点且其所有数据块均标记为0,服务器允许客户 端从 n3的一个最远后代节点 n16读取一个数据块。此外,从 n16读取的数据块在查询后 被移动到 Dt原来所在的位置。)
  
4.4 数据驱逐
每执行 s 次查询后,客户端启动一次数据驱逐过程,在该过程中,客户端将其暂存区中的 s 个数据块驱逐到树上的某条路径。驱逐操作可以在 s 次查询的时间段内均匀分布;然而,为了简化描述,我们将驱逐过程单独阐述如下。
最初,客户端重新加密其暂存区中的 s个数据块,并选择根节点作为第一个驱逐节点。
设 e表示当前驱逐节点的ID。将客户端暂存区中的数据块驱逐至节点 nₑ的过程,记为 evict(nₑ),具体如下:客户端为 nₑ下载驱逐位 EBₑ、标签位图 TAGₑ以及该节点中的所有数据块。然后,客户端解密 TAGₑ并对数据块重新加密。根据 nₑ是否为叶节点,以及 EBₑ和TAGₑ的值,可分为以下几种情况。
情况I :nₑ是一个非叶节点且 EBₑ = 0。在这种情况下,nₑ有 2s个数据块。如图3所示,客户端将其暂存区中的 s个数据块与从 2s下载的 nₑ个数据块合并,随机排列这些3s个数据块,并为每个数据块随机标记为0或1。根据我们在第5.1节的分析,以 1 − O(2⁻λ)的概率,所有 s个数据块中至少有 3s个被标记为0,且至少有 s个数据块被标记为1。
从 3s个数据块中,客户端选择 s个标记为0的数据块并保留在其暂存区中。对于其余的 2s个数据块,客户端选择 s个标记为1的数据块,将剩下的 s个数据块重新标记为0,加密标签并将其存储在 TAGₑ中,并将 2s个数据块连同 TAGₑ一起上传回 nₑ。作为响应,服务器将其 EBₑ更新为1,将 ABₑ初始化为全零,并将 TCₑ设置为 s。
此外,客户端更新其索引表,记录当前存储在节点 nₑ的数据块以及这些数据块的偏移量和标签,并执行以下操作:(i)如果 nₑ存在左子节点,客户端选择该左子节点作为新的驱逐节点,记为 nₑ,并重复过程 evict(nₑ),将其暂存区中的数据块驱逐至 nₑ;(ii)否则(即 nₑ没有左子节点),客户端请求服务器为 nₑ创建一个左子节点,将其暂存区中的 s个数据块上传至该左子节点,为这些数据块上传一个全零标签位图,并结束本轮驱逐。作为响应,服务器将 ABₑ和 EBₑ初始化为全零。
  
情况II - nₑ是一个非叶节点且 EBₑ = 1。在这种情况下,节点 nₑ具有 s个标记为0的数据块,但 TC的范围是从0到 s。图4展示了该情况的一个示例。客户端将其暂存区中的 s个数据块与标记为0的 s 个数据块合并,随机置换后上传回 nₑ。同时,它将 TAGₑ 初始化为全零,重新加密后也上传回 nₑ。作为响应,服务器将 ABₑ、EBₑ 和 TCₑ 初始化为全零。与此同时,客户端将其暂存区中标记为1的数据块保留下来。
接下来,关于 nₑ是否有右子节点,存在以下子情况。(i)子情况II-A:nₑ有一个右子节点。在此子情况下,nₑ有 s个数据块标记为1。因此,客户端选择右子节点作为新的驱逐节点,记为 nₑ,并重复执行过程 evict(nₑ),将其暂存区中的 s个数据块驱逐至 nₑ。(ii)子情况II-B:nₑ没有右子节点。如果 nₑ没有任何标记为1的数据块,客户端完成当前一轮驱逐;否则,客户端请求服务器为 nₑ构建一个右子节点,并将其暂存区中的数据块上传到该右子节点,随后结束本轮驱逐。
  
情况III - nₑ是一个叶节点,并且包含的数据块不超过 2s个。在这种情况下,客户端将其暂存区中的 s个数据块与来自 nₑ 的数据块合并,对这些数据块进行随机置换,并将它们重新上传至 nₑ。客户端还会为该节点上传一个加密的全零标签位图。作为响应,服务器将 nₑ 的访问位图和标签位图全部更新为零。最后,客户端相应地更新其本地索引表,并完成本轮驱逐操作。
情况IV - nₑ是一个叶节点,并且包含超过 2s个数据块。请注意,根据我们的查询和驱逐算法,nₑ不能拥有 3s或更多的数据块。
如图5所示,客户端将其暂存区中的 s个数据块与来自 nₑ的所有数据块合并,并对其进行随机排列。设合并后的数据块数量为 s′。客户端将每个 s′个数据块随机标记为0或1。由于 s′ > 3s,以概率 1 − O(2⁻λ),至少有 s个数据块被标记为比特0,且至少有 s个数据块被标记为比特1。然后,客户端请求服务器为 nₑ创建一个左子节点,并从中选择 ⌈(s′−2s)/2⌉个(小于 s)标记为0的数据块存储在该左子节点中。同时,客户端请求服务器为 nₑ创建一个右子节点,并选择 ⌈(s′−2s)/2⌉个标记为1的数据块存储在该右子节点中。其余的 2s个数据块被上传回节点 nₑ。客户端还将加密的全零标签位图上传至上述三个节点。作为响应,服务器将这三个节点的访问位图、标签位图、驱逐位以及 TC初始化为全零。最后,客户端更新其索引表,以反映这三个节点上数据块的当前分布情况,从而完成这一轮驱逐。
5 分析
在本节中,我们从失败概率和不可区分性方面研究DF‐ORAM的安全强度。我们还分析了服务器端存储树高度的上界,这对于DF‐ORAM的设计和成本评估非常重要。
5.1 失败概率分析
DF‐ORAM在查询过程和驱逐过程中失败的概率分别由引理1和3给出。
引理1。 DF-ORAM在一次查询过程中失败的概率不超过2⁻λ。
证明。 在查询过程中,从包含查询目标的选定路径上的每个非叶节点访问两个数据块。其中,一个块自该节点最近一次驱逐过程以来已被访问过,而另一个块尚未被访问。如果客户端无法在该节点中找到一个未被访问的块,则查询过程在该非叶节点失败。
对于每一层 l上的每个非叶节点 nₗ,每经过 s · 2ˡ次查询后会被选为驱逐节点;而对于每次查询,该节点位于查询路径上的概率为 1/2ˡ。设 X是一个随机变量,用于计数满足以下条件的查询过程的数量:(i) 访问了 nₗ,且 (ii) 发生在两次连续访问 nₗ的驱逐过程之间。因此,
E[X] = s· 2ˡ · 1/2ˡ = s.
根据切尔诺夫界以及DF‐ORAM中 s ≥ 4.2λ ≥ 3λ的事实,X ≥ 2s的概率为
Pr[X ≥ 2s] ≤ e⁻ˢ/³ < 2⁻ˢ/³ ≤ 2⁻λ.
鉴于DF‐ORAM中每个非叶节点 nₗ包含 2s个数据块,查询过程在访问 nₗ时失败的概率上界为 2⁻λ。
对于查询过程访问的每个叶节点,都会访问并移除一个数据块。如果该块是查询目标,则由客户端检索并保留;否则,该块将被移动以替换查询目标。因此,该过程在叶节点不会失败。
因此,我们证明了DF‐ORAM在一次查询过程中失败的概率上界为 2⁻λ。
为了便于分析DF‐ORAM在驱逐过程中失败的概率,我们首先引入并证明以下引理。
引理2。 考虑 3s数据块,其中 s ≥ 4.2 λ。每个块被随机标记为0或1。令k₀和 k₁分别表示标记为0和1的块的数量。那么,
Pr[k₀ < s] = Pr[k₁ < s] < 2⁻λ.
证明。 由于0和1之间的对称性,显然有 Pr[k₀ < s] = Pr[k₁ < s]。因此,我们接下来仅考虑 Pr[k₀ < s]。
Pr[k₀ < s] = ∑ₖ₌₀ˢ⁻¹ (3s choose k)(1/2)³ˢ < s(3s choose s)(1/2)³ˢ = s·(3s)! / (s!(2s)!)(1/2)³ˢ (1)
≤ s· e(3s)³ˢ⁺¹/² e⁻³ˢ / (√2π e⁻ˢ sˢ⁺¹/² √2π e⁻²ˢ (2s)²ˢ⁺¹/²) (1/2)³ˢ (2)
= es / (2π) · 3³ˢ⁺¹/² s³ˢ⁺¹/² / (sˢ⁺¹/² 2²ˢ⁺¹/² s²ˢ⁺¹/²) (1/2)³ˢ = e/(2π) · √(3)/(2ˢ) · (27/32)ˢ ≤ (1/2)ˢ/⁴.² ≤ 2⁻λ (3)
这里,不等式(2)是由于斯特林近似,而不等式(3)是由于 e/(2π) · √(3)/(2ˢ) < 1和(27/32)ˢ < (1/2)ˢ/⁴.²。
引理3。 DF-ORAM 在驱逐过程中失败的概率是O(2⁻λ)。
证明。 如第4节所述,将数据块驱逐到驱逐节点nₑ的过程有四种情况。其中,情况III永远不会失败,但情况I、II或IV可能失败,如果客户端在每个块被随机标记为0或1后,无法找到 s标记为0的块或 s标记为1的块。根据引理2,每种情况发生的概率不超过 2⁻λ。因此,DF‐ORAM在一次驱逐过程中失败的概率不超过O(2⁻λ)。
根据上述引理,我们得到以下定理。
定理1. DF-ORAM 失败的概率为 O(2⁻λ)。
5.2 不可区分性分析
引理4。 当查询一个数据块时,该数据块位于从根节点到第(h+ 2)层节点的任意路径上的概率相同。
证明。 (概要)该证明包含三个部分。第一部分:当一个数据块第一次被查询时,由于数据块在服务器端存储树上的初始随机分布,显然它出现在任意(h+2)跳路径上的概率相同。
第二部分:在某个块被查询后,我们可以通过归纳法证明,该块可以以相同概率被驱逐回服务器端存储树上任意一条(h+2)跳路径。(i)基础情况:如 DF‐ORAM驱逐算法所述,当一个数据块从客户端的暂存区被驱逐到服务器端存储树时,它以相同概率被驱逐至树根的左子节点或右子节点,或者被驱逐至标记为0的根节点,因此可以从任意一条(h+ 2)跳路径以相同概率被查询。(ii)归纳步骤:一旦一个块位于树中的某个节点,根据DF‐ORAM驱逐算法,它可以以相同概率被驱逐至其左子节点或右子节点,或停留在标记为0的该节点中,因此可以从该节点通向第(h+ 2)层节点的任意路径以相同概率被查询。
第三部分:在查询过程中,位于较低层的数据块可能会被移动到上层以替换查询目标块。这种情况等同于在驱逐该数据块的过程中回溯到更早的步骤。因此,回溯不会改变数据块能够以相同概率从任意(h+ 2)‐跳路径被查询的概率。
定理2. DF-ORAM中的查询和驱逐过程是无感知的。
证明。 (概要)根据引理4,一个块被分配到从根节点到第(h+ 2)层节点的任意路径上的概率相同。因此,查询路径的分布是均匀随机的。此外,在每次查询过程中,位置访问遵循相同的模式:每个非叶节点上的查询路径中有两个数据块被访问,其中一个已被访问,另一个尚未被访问;每个叶节点有一个数据块被访问并被移除。因此,查询过程是无感知的。
每次查询后都会启动一次驱逐过程。用于驱逐的路径遵循逆字典序。在每次驱逐过程中,对选定路径的位置访问也遵循相同的模式:驱逐节点中的所有数据块被下载到客户端;然后客户端重新加密、置换并将其存储回服务器。置换对服务器是未知的,并且每个数据块在上传前都会被重新加密。因此,驱逐过程也是无感知的。
5.3 存储树高度的上界
引理5。 在DF-ORAM中,给定 s ≥ 4.2(λ+ 1),存储树的高度以至少 1 −2⁻λ的概率被上界h+ 3所限制。
证明。 在DF‐ORAM中,外包数据块的总数为 N = 2(2ʰ⁺¹ −1)s,第(h+ 2)层节点的总数为 P = 2ʰ⁺²。初始分布和驱逐过程都将 N个数据块均匀随机地分配到每条从根节点连接到第(h+2)层节点的P条路径上。
接下来,我们估计分配给每条从根节点到第(h+2)层节点的路径上的最大数据块数量。这可以通过使用标准的球与箱子模型来实现,其中将 N = 2(2ʰ⁺¹ − 1)s个球投入 P = 2ʰ⁺²个箱子中。每个箱子平均分到的球数为 N/P < s。
根据切尔诺夫界,如果每个箱子的容量为 2s,则箱子发生溢出的概率被限制在 e⁻ˢ/³以内,由于 s ≥ 4.2λ,该概率小于 2⁻λ。由于DF‐ORAM中叶节点的容量为 3s,因此第(h+ 2)层节点发生溢出的概率低于 2⁻λ。因此,该定理得证。
6 性能比较
我们首先在渐近存储、通信和计算开销方面,将DF‐ORAM与几种最先进的 ORAM构造进行比较,包括路径ORAM[13], C-ORAM[10]和SE‐ORAM[9]。然后,基于DF‐ORAM和路径ORAM的系统实现,我们在实际环境中比较它们的性能。
6.1 渐近的比较
从表1可以看出,路径ORAM和C‐ORAM均在服务器端引入了 O(N · B)比特的存储开销。具体而言,当客户端导出 N · B比特数据时,路径ORAM需要服务器存储 9N · B比特;C‐ORAM需要存储 3N·B个额外的虚拟块和空块;此外,每个数据块和虚拟块都需使用某种同态加密进行加密,这会带来进一步的存储开销。最近提出的SE‐ORAM不会产生服务器端存储开销。尽管 DF‐ORAM在服务器端确实会产生存储开销,但该开销小于 3N比特。在实际环境中,B ≥ 16KB是典型值,此开销小于客户端导出数据量的一小部分(即小于 1/B)。
表1. 通信与存储成本的渐近比较。N个大小为 B比特的数据块被外包。λ是 DF‐ORAM的安全参数。对于列出的所有ORAM构造,索引表假设存储在客户端,因此其存储开销不计入比较中。服务器存储开销定义为除外包数据块(即 N · B比特)之外的额外开销。
| ORAM | 客户端存储开销 | 服务器存储开销 | 通信开销 | 
|---|---|---|---|
| 路径ORAM [13] | O(log N · B) · ω(1) | O(N · B) | O(log N · B) | 
| C‐ORAM [10] | O(B) | O(N · B) | O(B) | 
| SE‐ORAM [9] | O(log² N · B) | 0 | O(log² N · B) | 
| DF‐ORAM | O(λ · B) | < 3N | O(log N · B) | 
DF‐ORAM的客户端存储开销主要来自其暂存区(stash)和临时缓存(cache),两者大小均为 O(s· B) 比特且 s ≥ 4.2 λ。路径ORAM 要求客户端维护一个大小为O(log N · B) · ω(1) 比特的缓存,用于存储无法写回服务器的数据块。C‐ORAM 仅需要 O(B) 比特的客户端存储,而 SE‐ORAM 需要 O(log² N · B) 比特的客户端存储。尽管 DF‐ORAM 所需的客户端存储大于对比方案,但在实际中该开销并不高。特别是当 λ = 80且 B = 256 K字节时,开销仅为336 M字节,手机完全可以承受。
从表1可以看出,DF‐ORAM 的渐近通信开销与路径ORAM 处于同一水平。正如我们将在第6.2节中展示的那样,DF‐ORAM 的实际通信开销约为路径 ORAM 的一半。与 SE‐ORAM 相比,DF‐ORAM 将通信开销降低了 log N倍。尽管 DF‐ORAM 的通信开销高于 C‐ORAM,但 C‐ORAM 会带来高昂的计算成本,这可能会掩盖通信开销的降低,甚至导致更长的数据访问延迟[10]。
从表2可以看出,C‐ORAM要求服务器和客户端执行开销较大的同态加密、解密、加法和乘法运算。DF‐ORAM、路径ORAM和SE‐ORAM均不要求服务器执行计算操作,且DF‐ORAM的客户端计算成本与路径ORAM相当,即仅需使用对称密码学原语对数据块进行加密和解密。此外,正如我们将在第6.2节中展示的,与路径ORAM相比,DF‐ORAM将客户端计算成本降低了 N倍。
表2. 计算成本的渐近比较。存储了 N 个数据块,每个数据块为 B 比特。对于 C‐ORAM,由于其使用加法同态加密作为基本原语,我们采用以下两个参数来衡量同态加密的性能:b 表示明文大小(以比特为单位),CAH 表示一次同态操作的计算成本,包括加密/解密、加法和乘法。CReg 表示一次对称加密/解密操作的计算成本。
| ORAM | 客户端计算成本 | 服务器端计算成本 | 
|---|---|---|
| 路径ORAM [13] | O(B log N · CReg) | 0 | 
| C‐ORAM [10] | O(CAH · B/b) | O(log² N · CAH · B/b) | 
| SE‐ORAM [9] | O(B log² N · CReg) | 0 | 
| DF‐ORAM | O(B log N · CReg) | 0 | 
还需注意,路径ORAM、SE‐ORAM 和 DF‐ORAM 支持小块大小,即它们仅需要 B ∈ Ω(log² N) 比特,而 C‐ORAM 需要块大小为 B ∈ Ω(log⁴ N) 比特。
6.2 基于实现的比较
我们实现了DF‐ORAM,并将其与Path ORAM [13]进行比较,后者是目前无需服务器端计算成本的最先进的ORAM方案。需要注意的是,我们未将 DF‐ORAM与C‐ORAM [10]进行比较,因为C‐ORAM在服务器端和客户端均需要昂贵的计算,这可能会掩盖因降低通信开销所带来的优势。特别是,如 [10]中所述,检索一个大小为 100k比特的数据块需要花费7分钟,其中大部分时间消耗在计算上。此外,由于DF‐ORAM的通信开销远低于SE‐ORAM,因此本节中也不对其进行比较。
参数和系统设置。 在基于实现的评估中,我们选择 2¹⁶ ≤ N ≤ 2²⁴和16KB ≤ B ≤ 256 KB。对于DF‐ORAM,我们设置 λ = 20和 s = 100。对于路径ORAM,我们设置节点大小为 Z = 5。这样的设置使得两种方案的失败概率均约为 2⁻²⁰。我们使用两台虚拟机分别作为客户端和服务器。每台虚拟机均配备AMD Opteron 63xx 2.4 GHz中央处理器和8 GB内存。它们之间的网络带宽为20 Mbps。
存储开销。 路径ORAM中的服务器存储开销为 10N · B比特;在DF‐ORAM中,数据块占用 N · B比特,元数据占用不到6 MB。在这两种方案中,索引表均存储在本地,大小均为O(N · log N)。但DF‐ORAM中的每个条目比路径ORAM的大。在我们的实验设置中,node(i)占32比特,offset(i)占16比特,TAG(i)占8比特。因此,路径ORAM中的索引表小于64 MB,而DF‐ORAM中的索引表小于112 MB。
路径ORAM有一个永久存储区,用于存储无法返回到服务器的数据块,大小为 O(log N · B)比特,以及一个临时缓存,用于存储从服务器检索的数据块,大小为5 log N · B比特。这两部分总共消耗少于42兆字节。在DF‐ORAM中,暂存区可容纳 s个数据块,缓存可容纳 3s个数据块。在我们的设置中,s = 100,因此这两部分消耗少于100兆字节。
总之,DF‐ORAM 的客户端存储开销小于 212兆字节,而路径ORAM 的客户端存储开销小于 106 MB。
通信开销。 表3显示了每次查询时客户端与服务器之间传输的数据块数量,即路径ORAM 和 DF‐ORAM 的通信开销。如我们所见,DF‐ORAM 的通信开销在 75到127 之间,而路径ORAM 的通信开销为 160到240。与路径ORAM 相比,DF‐ORAM 将通信开销降低了 2倍。
表3. 通信开销。单位:数据块数量。路径 ORAM 的通信开销为 10 log N,而 DF‐ORAM 的开销约为路径 ORAM 的一半。
| ORAM | N = 2¹⁶ | N = 2¹⁸ | N = 2²⁰ | N = 2²² | N = 2²⁴ | 
|---|---|---|---|---|---|
| DF‐ORAM | 75 | 90 | 102 | 115 | 127 | 
| 路径ORAM [13] | 160 | 180 | 200 | 220 | 240 | 
响应时间。 我们将查询延迟定义为从发出查询请求到客户端接收并解密目标数据块的时间。我们还将访问延迟定义为从客户端发出查询请求到查询及其相关驱逐任务均完成的时间。注意,查询延迟和访问延迟均包括计算时间和块传输时间。从图6(a)、(b) 和 (c) 中可以看出,与路径ORAM相比,DF‐ORAM将查询延迟减少了4到5倍,访问延迟减少了2倍。我们还可以看到,DF‐ORAM的访问延迟在800毫秒到14秒之间,远短于C‐ORAM所产生的访问延迟[10]。
7 结论
本文提出了DF‐ORAM,一种实用的无虚拟块ORAM构造,其通信开销为 O(log N · B),并在服务器端产生较小的存储开销。渐近分析和基于实现的评估表明,在无需服务器端计算的现有ORAM构造中,DF‐ORAM是通信效率和存储效率最高的方案。具体而言,在实际环境中,与路径ORAM相比,DF‐ORAM将通信开销降低了2倍,查询延迟降低了4到5倍,访问延迟降低了2倍,同时仅在服务器端引入了不到6 MB的存储开销。
 
                   
                   
                   
                   
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   27
					27
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            