Lec 20Oblivious RAM(ORAM)
后续
当前课程暂无后续已收录内容。
Lec 20 Oblivious RAM(ORAM)
MIT 6.5610 · Lecture 20 · 关键词:访问模式泄露、ORAM、平凡下界、Square-root ORAM、Path ORAM、带宽开销 说明:以标准处理撰写(Goldreich–Ostrovsky 1996 / Path ORAM 2013),要点与本课"Oblivious RAM"一致。
TL;DR
- 加密只隐藏数据内容;服务器观察读写地址和频率,仍可推断敏感访问模式。
- ORAM 通过持续搬移、重加密和填充访问隐藏真实地址,平方根 ORAM 与 Path ORAM 代表不同设计路径。
- 带宽开销、客户端位置图和 stash 溢出概率共同决定系统是否可用。
0. 问题
把数据加密存到不可信服务器并不够——访问模式本身泄露信息:哪个地址被读、读写频率、先后顺序,都可能暴露隐私(即使内容已加密)。
定义
ORAM 目标:客户对逻辑地址序列 的访问,转化为对服务器的物理访问序列,使得任意两条等长逻辑序列产生的物理访问模式计算不可区分——服务器看不出客户在读还是写、读写了哪里。
1. 平凡下界与朴素方案
- 平凡方案:每次操作都扫描整个数组( 次访问)→ 访问模式与逻辑操作无关,完美隐藏,但每次操作 带宽,不可用。
- 下界:Goldreich–Ostrovsky 证明 ORAM 每次逻辑操作的开销有 的下界(在自然模型下)。目标是逼近这个对数开销。
2. Square-root ORAM(直觉版)
例
方案要点
- 数据 + 个"哑元(dummy)"块随机置乱(用伪随机置换)存放,外加一个 大小的 shelter(缓存区)。
- 每次访问:先线性扫描整个 shelter(隐藏目标是否在缓存中),再去主区取一个块——若目标已在 shelter,则去主区取一个未用过的哑元作掩护。取回的块写入 shelter。
- 每 次操作后,重新随机置乱整个结构(oblivious shuffle),清空 shelter。 :::
🔎 为何隐藏:每次对主区的访问看起来都是"取一个尚未访问过的随机置乱位置",与逻辑目标无关;周期性重置防止访问历史累积泄露。摊销带宽 。
3. Path ORAM(实用主流)
Path ORAM(二叉树 + 位置映射)
- 服务器存一棵二叉树,每个节点是一个能放若干块的 bucket;客户持一张 position map:每个块被随机指派到某条根到叶路径,块一定在该路径的某个 bucket 上。
- 读/写块 :查 position map 得其叶 → 读回整条根到 的路径(固定模式)→ 在本地 stash 中取出/更新块 ,并给 重新随机指派一条新路径 → 把路径上的块尽量写回靠近各自目标叶的位置(其余暂存 stash)。 :::
🔎 为何隐藏:每次操作服务器只看到"读一条路径、写回一条路径",而目标块每次访问后立即换到新随机路径 → 连续两次访问同一逻辑块对应互相独立的随机路径,物理模式与逻辑序列无关。带宽 路径 × bucket 容量。position map 自身较大时递归存成更小的 ORAM。
4. 工程视角
- 应用:加密云存储/数据库隐藏访问模式、可信执行环境(SGX)抗内存访问侧信道、隐私支付的钱包扫描、隐私搜索引擎。
- 与 PIR(L8)区别:PIR 隐藏对公开只读库的查询,通常不改服务器状态;ORAM 隐藏对自有私有可读写存储的访问模式。
- 成本现实:即使 Path ORAM,带宽放大仍是几十×—— 对延迟敏感系统是硬约束;常配合批处理、ORAM 友好的数据结构。
- 元数据即信息:很多"已加密就安全"的直觉错误,正是被访问模式/时序/大小这些元数据击穿——ORAM 是堵这个洞的工具。
5. Oblivious RAM 小结
- 加密不够,访问模式会泄露 → ORAM 让物理访问模式与逻辑操作不可区分。
- 平凡方案 ;理论下界 。
- Square-root ORAM:置乱 + shelter 扫描 + 周期重洗,摊销 。
- Path ORAM:二叉树 + position map,每次读写一条路径并把目标块重指派到新随机路径,。
访问模式常与内容同样敏感;ORAM 的价值在于把“读了哪里”也纳入机密性边界。