DF - ORAM:实用的无虚拟数据不经意随机访问内存
1. 存储树结构
存储树初始为满二叉树,每个节点存储 2s 个数据块(s ≥ 4.2λ)。每个节点的 ABi、TAGi、TCi 和 EBi 初始化为全零。设树的高度表示为 h + 1,则树中存储的数据块总数为 N = 2(2h + 1 − 1)s,且该存储不存储任何虚拟数据块。
每个数据块 di 在导出到服务器之前,使用对称密码(如 AES)进行概率加密为 Di,具体为 Di = E(ri|di),其中 ri 是随机数。然后,这些块被随机分布到树的节点上。
随着数据块的查询和逐出操作,树可能变得不平衡。具体来说,如果一个节点不包含任何数据块,则该节点被删除;如果一个叶子节点包含超过 3s 个块,则该节点将扩展为以自身为根的两层二叉子树。
2. 客户端存储
客户端在其本地存储中维护一个索引表,外包的 N 个数据块中的每个块在该表中都有一个条目。ID 为 i 的块的条目是一个 ⟨node(i), offset(i), tag(i)⟩ 元组,表明该数据块存储在节点 node(i) 中,偏移量为 offset(i),并且该块带有标签 tag(i)。
客户端还分配了一个永久存储区,用于存储最近查询的最多 s 个数据块,以及一个临时缓存区,以方便数据查询和洗牌。
3. 数据查询
当客户端想要查询数据块 Dt 时,操作步骤如下:
1. 检查 Dt 是否在其本地存储区中。如果是,则访问该块并将其保留在原始位置;否则,客户端查找其本地索引表,以获取 node(t)、offset(t) 和 tag(t)。
2. 客户端
超级会员免费看
订阅专栏 解锁全文
886

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



