优化 ORAM 并将其高效用于安全计算
1. ORAM 递归方案
在基本的 ORAM 协议里,客户端要访问其第 (i + 1) 层表的单个条目,这会通过第 (i + 1) 层的基本 ORAM 递归完成。所以,递归方案最多使用底层 ORAM 的 log N 次访问。
同样的递归结构能应用于任意整数因子 τ ≥ 2(相邻层大小之间)。具体而言,我们把第 i 层客户端表(有 Ni 个条目)存储为一个包含 Ni+1 = ⌈Ni/τ⌉ 个元素的数据库,每个元素大小为 τ log Ni 位。访问第 i 层表的第 j 个条目时,会检索对应数据库中的元素 j′ = ⌊j/τ⌋,并且使用 logτ(N) 层递归。不过,使用大的 τ 值有个缺点,即第 i 层数据库中元素的大小会随 τ 线性增长,这会影响底层基本 ORAM 协议的运行时间。下面假设 τ 是个小常数,比如 τ = 4。
2. 底层基本 ORAM
底层基本 ORAM 协议让服务器把一个 N 元素的数据库存于深度为 log N 的完全二叉树中,树的每个节点有一个足够大的桶来存储 k 个数据元素(k 是安全参数)。当然,所有桶的内容都用客户端的密钥加密,服务器并不清楚每个桶实际存储了多少元素。
每个逻辑地址 v ∈ [N] 的数据库元素与一个随机叶子 Lv 关联,客户端维护一个 N 条目表,记录映射 v → Lv(即表中的条目 v 包含叶子编号 Lv)。用 dv 表示对应逻辑地址 v 的数据,在整个协议中,我们要维持三元组 (Lv, v, dv) 存储在从根到叶子 Lv 的路径上的某个桶中的不变性(最初存储在叶子本身)。对逻辑地址 v 的访问由两个子程序组成,一个用于实际访问,另一个用于清理。
超级会员免费看
订阅专栏 解锁全文
12

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



