市中心的巷子深处有家奇特的私房菜馆。大厨老王一天只做四道招牌菜,顾客小赵嘴馋,却想守住一个秘密:他今天想尝哪一道。老王也有一层顾虑:四道菜各有家传秘方,小赵只能尝自己选的那一道,其余三道得连味道都猜不出。问题来了——两人不愿请裁判,老王的菜馆又装不起玻璃厨房。于是他们请来一位“数学魔法师”:一道看不见的隔味门,让小赵蒙眼舀菜,老王看不出他舀的是哪锅,小赵也学不到其他锅的秘方。这道门,就是遗忘传输(Oblivious Transfer,OT)。遗忘传输是隐私计算世界最基础的积木:隐私求交、联邦学习、安全多方计算的底层,几乎都踩着它。本文就用老王的盲选私房菜作比喻,带零基础读者建立直觉,再看懂它的协议变体、安全模型、核心算法与工程落地。
遗忘传输是隐私计算的“原子操作”:读懂它,你就拿到了隐私求交、隐私机器学习等热门方向的入场券,是数据工程与 AI 开发者进阶隐私计算领域的必修第一课。
可视化演示
展示系统处理流水线、实时性能指标曲线及多方案对比分析,包含数据流转、吞吐延迟监控与方案评估。
本节配有交互动效(进入视口后自动加载,约 3KB)。
系统可视化 处理流程:输入→处理→模型→输出 性能监控:实时指标 P=L×T
基本概念
老王想出的“盲选规则”很简单:四道招牌菜装在四只一模一样的砂锅里,小赵蒙上眼罩,用一只长柄勺探进其中一只锅,舀一勺尝。规则有两条底线——第一,老王不能偷看小赵的勺子伸进哪只锅;第二,小赵的勺子只能碰到自己选的那道菜,其他锅的盖子纹丝不动。大家发现,这个规则最难的地方在于:没有服务员当裁判,老王的厨房也没有监控。也就是说,规则只能靠“门”本身的魔力来维持。
把这个场景抽象成计算机语言,就是遗忘传输的雏形。发送者(老王)手里握着 n 条消息(菜谱),接收者(小赵)握着选择编号 b(想尝哪道),协议结束后,接收者恰好得到第 b 条消息,而发送者看不出 b 是几,接收者也学不到其他任何一条消息。这套流程在密码学里记为 OTₙ¹,读作“1-out-of-N 遗忘传输”——从 N 个里遗忘式地传 1 个。
最小、也最常被当成积木的单元是 1-out-of-2 遗忘传输:发送者持 m₀、m₁,接收者持 b ∈ {0,1},输出恰好是 m_b。这里有两个方向相反的隐私条款:接收者隐私要求发送者看不出 b;发送者隐私要求接收者拿不到 m_{1-b}。注意,它和普通的“加密传输”根本不是一回事——加密传输假设发送者值得信任,只是防外部窃听;而遗忘传输假设发送者和接收者互相提防,谁都不肯让步半分。
回到菜馆:小赵尝完菜,心满意足地擦嘴。老王在厨房里收拾,看见的只是一只空锅和一把勺子——他不知道刚才端出去的是清蒸鲈鱼还是红烧肉。而小赵舌尖上也只有那一口鲜味,另外三口锅的香气,像被这门魔法吸走了一般,与他彻底无关。
- 输入消息对发送者手里的两道秘方,一道都不能被对方同时拿到。
- 选择位b 是接收者心里的小算盘,只属于接收者本人,发送者看不见。
- 输出结果协议结束,接收者恰好得到 m_b,另一条消息始终是雾里看花。
协议变体
老王后来发现,光有两口锅不够用。熟客的口味越来越刁,有人想从四道菜里选,有人想要一张“万能券”——今天不想决定,明天凭券再来选一次。于是老王把盲选规则做成了三款套餐,对应遗忘传输的三种重要变体。
第一款是最小的“对赌套餐”,即 1-out-of-2 OT,两道菜选一道,前面的公式描述的就是它。第二款是“满汉全席盲选”,即 1-out-of-N OT,一长排砂锅任选其一。第三款是“魔法券”,学名叫不经意伪随机函数(OPRF):顾客手持一个数 x,厨房持密钥 k,双方共同算出 F(k, x),但厨房不知道 x 是什么,顾客也学不到 k——下次来,凭这张券还能接着选。
1-out-of-N 不需要真的造 N 道魔法门。如果 N = 2^ℓ,只需 ℓ 个 1-out-of-2 门嵌套在一起:把选择下标 b 写成二进制,每一位比特对应一道门,逐层收窄范围。比如 4 道菜写成两位二进制:第一位决定“左半还是右半”,第二位决定“上半还是下半”,两次盲选后答案就锁定了。这种“用 log 级别的门办成 N 选 1”的组合法,是协议设计里最常见的省钱思路。
小赵对着满汉全席的一百零八道菜微微一笑:他只需回答“左边还是右边”七次——因为 2⁷ = 128 足够覆盖 108 道菜。每一次回答都在蒙眼状态下完成,老王听了一串“左、右、右、左……”的暗语,却怎么也拼不出最终答案。
- 二进制位数把 N 写成二进制需要的比特数——4 道菜是 2 bit,108 道菜是 7 bit。
- 门组合每道 1-of-2 门负责收窄一个比特,ℓ 道门嵌套后等效于一道 1-of-N 门。
安全模型
老王最担心两件事:小赵会不会偷偷掀眼罩?会不会用花言巧语套他的秘方?这两种担心,恰好对应密码学里的两个安全模型——半诚实模型和恶意模型。它们是所有隐私协议都必须回答的“考卷”。
半诚实模型里,双方“规矩但好奇”:严格按协议流程执行每一步,但在协议结束后,会翻看所有聊天记录和中间结果,试图推断对方的秘密。这就像小赵全程老实蒙着眼,但散场后悄悄问服务员:“刚才老王往哪只锅里加了葱花?”恶意模型则严酷得多:参与方可能随时篡改消息、提前中止协议、派替身发言,甚至故意发送错误数据污染结果——这相当于小赵直接掀掉眼罩抢菜单。
密码学用什么证明协议在这两种考卷面前都及格?答案是“模拟器”思想:构造一个理想世界,里面有一位绝对可信的裁判替双方完成计算;再与现实世界(没有裁判、只有数学魔法)对比。如果任何对手都能看出两场戏的区别,说明协议泄密;如果区别小到可忽略,就说明现实世界的魔法门和理想裁判一样可靠。这里的“可忽略”用安全参数 λ 来衡量,λ 越大,失败概率越小。
半诚实的及格线是“小赵蒙着眼但忍不住偷听”,恶意的优秀线是“小赵直接掀眼罩还要抢菜单”。好的遗忘传输协议必须两道坎都迈过去:前者是所有新协议的第一版标配,后者是落地到真实系统前的终极考验。
- 两场戏Real 是真实协议,Ideal 是理想裁判下的协议,两个概率分别代表对手以为自己在哪场戏里。
- 区分优势对手猜错场景的概率差,就是他的“优势”。
- 可忽略函数随 λ 增大急速趋零,比如 2⁻¹²⁸,工程上等于不可能。
核心算法
隔味门的“建造图纸”直到 1985 年才被三位工匠画出来——Even、Goldreich 和 Lempel,他们用的材料是一种叫 RSA 的密码锁。理解这段历史,就能理解遗忘传输为什么“只能靠公钥密码学”。
RSA 锁的特点是单向:公钥 (N, e) 是“扣锁按钮”,谁都能把锁扣上;私钥 d 是“万能钥匙”,只有持有者能打开。扣锁容易开锁难,没钥匙的人只能干瞪眼。遗忘传输正是借这个“单向落差”搭起隔味门。具体流程分三步:老王(发送者)生成 RSA 密钥,把公钥公开;小赵(接收者)随手挑一个随机数 x 当“真身”,再造一个随机数 k 当“障眼法”;然后按自己的选择位决定顺序——如果 b=0,就把 x^e 放进 0 号盒、k^e 放进 1 号盒,反过来亦然。
两个盒子寄到厨房后,关键魔术登场:在 RSA 假设下,x^e 和 k^e 都是均匀分布的随机数,老王用公钥怎么也看不出哪个盒子藏着 x。他用私钥 d 把两个盒子都打开,得到 y₀、y₁,再把两道菜的秘方分别异或上 H(y₀)、H(y₁) 寄回。小赵收到后,因为自己知道其中一个 y 就是 x,用 H(x) 一异或,正好还原出 m_b;而另一个 y 他算不出来,m_{1-b} 便永远裹在雾里。现代实现往往把 RSA 换成椭圆曲线(如 X25519),结构完全一致,只是把“取模幂”换成“点乘”,同等安全强度下钥匙更短、运算更快;协议结束时还能验证:接收者确实只拿到了 m_b,其余消息则差之毫厘谬以千里。
回到菜馆:小赵把两口砂锅盖得严严实实寄进厨房,老王挨个掀盖——两只锅的香味一模一样,他永远猜不出哪只锅里藏着 x。小赵呢?他用自己手里的 x 当钥匙,只打开属于自己那封信,另一封信烧成了灰。
- 上锁动作接收者把随机数 v_i(x 或 k)用公钥 e 扣进锁里,外人看不出哪个是 x。
- 开锁动作发送者用私钥 d 同时打开两把锁,得到两个群元素 y₀、y₁。
- 异或信封消息和群元素的哈希做异或,像把纸条裹进只有对应钥匙能开的信封。
工程实践
每做一次 OT 就要开一次 RSA 的大火,菜价贵得离谱。老王后来想通了:能不能先花重金熬一锅浓汤底,之后每道菜只用小火快炒?这个思路在密码学里被称为“OT 扩展”,是遗忘传输从论文走进生产系统的分水岭。
2003 年,Ishai、Kilian、Nissim 和 Petrank 四人给出了著名的 IKNP 方案。核心思想是:先用 κ 次“真金白银”的基础 OT(公钥运算)建立一张随机相关性矩阵,然后借助“相关鲁棒哈希”把这份相关性成百上千倍地放大,一次性派生出 n 个廉价的 OT。放大阶段只调用哈希函数和伪随机生成器,全是流水线友好的轻量运算。
工程落地时还有三件事要盯紧。第一是参数选型:基础 OT 的安全参数 κ 通常取 128,消息定长、选什么椭圆曲线(如 Curve25519)都直接影响性能。第二是性能优化:把上万个 OT 打包成矩阵运算并发执行,通信量压缩到每 OT 仅几百比特。第三是安全实现:随机源必须是密码学安全随机数生成器,历史上因随机数污染导致 OT 泄密的案例不在少数。综合下来,一次扩展能把成本压到:公钥运算只剩 O(κ) 次、对称运算 O(n) 次,而 n 可以轻松到百万级。
一锅浓汤底能撑起一百桌盲选宴席,每桌只花几毛钱的燃气费——这就是 OT 扩展的魔法所在。如今工业级隐私计算平台里跑的 OT,几乎都是“底料 + 小火”的扩展结构,而不是笨重的一锅一锅现烧。
- 公钥开销昂贵的 RSA/椭圆曲线运算只做 κ 次,不再随消息数 n 增长。
- 对称开销哈希与伪随机生成随 n 线性增长,但每个都极其廉价。
- 规模悬殊κ 远比 n 小,正是扩展方案能大幅省钱的根源。
应用场景
老王的盲选魔法很快传遍了美食江湖。两家餐厅想搞联名活动,先得知道有多少顾客是两家的共同熟客,但谁都不肯把完整客户名单交给对方——这份名单可是立店之本。老王拍板:用盲选门来算交集!
这个场景在隐私计算里叫隐私求交(PSI)。做法是:双方先把各自的客户手机号哈希成“匿名代号”,装进布谷鸟哈希表的格子里,再对每一格执行一次 OT 式的安全比较。比较的结果只有“这格上的代号两边都有”或“没有”两种情况,非交集的代号在对方眼里永远是乱码。同理,遗忘传输也是 GMW 等安全多方计算协议的地基:布尔电路里每个“与门”的求值,都可以用一次 OT 实现秘密分享下的安全计算。
隐私机器学习是另一个重镇:两家机构联合训练逻辑回归,梯度交换时用 OT 相关原语做安全聚合,保证“对方只得到聚合结果,得不到你的原始梯度”;联邦学习的样本对齐阶段,也常常先用 OT 构造的 PSI 找到共同样本 ID,再开始训练。可以说,凡是“既要合作、又要保密”的数据协作,OT 都有出场机会。
两家老板在小黑屋里各自报出用代号写的名单,最后只知道“这 300 人是共同的”,却不知道对方还有哪些别的高端客户——OT 让这场联名活动既热闹又体面,谁的面子都没丢。
- 匿名代号哈希把真实手机号变成“代号”,对方无法从代号反推真人。
- 交集判定只有两边代号一致的元素才落入交集,其余全部落空。
未来趋势
江湖上流传着一个传说:有一台量子计算机即将问世,RSA 那套魔法锁在它面前像纸糊的。老王坐不住了——如果锁匠的手艺过时,整座盲选菜馆都得关门。遗忘传输的未来,正在于换锁、提速与铺路。
换锁的方向叫后量子密码。目前最被看好的候选是格密码(LWE 问题):把秘密配方藏在带噪声的线性方程组里,已知公开矩阵 A 和结果 b,想反推出秘密 s 极其困难——连量子计算机也只能望洋兴叹。基于 LWE 的 OT 已经出现在学术界和标准化草案中,安全模型也从“可忽略优势”升级到“后量子不可区分”。提速的方向是硬件加速:FPGA 和专用芯片把哈希与多项式乘法做成流水线,OT 吞吐量提升了几个数量级。铺路的方向是产业落地:隐私计算平台把 OT 封装成 SDK,数据工程师只需调用两行接口,就能完成一次安全的盲选。
产业界的动作比想象中更快:主流隐私计算厂商的 PSI 产品已能处理亿级数据,联邦学习框架内置 OT 安全聚合,医疗、金融、政务领域纷纷试点。遗忘传输不再是论文里的玩具,而是数据要素流通时代的地下管道。
老王换上新式“量子锁”,依然是那道看不穿、尝不全的隔味魔法门。盲选的规则没变,变的只是锁匠的手艺——从 RSA 的铜锁,到格密码的合金锁,再到芯片里流淌的电流。只要“合作又要保密”的需求还在,这道门就会一直立在巷子深处。
- 噪声方程组A 是公开的做法清单,s 是秘密配方,e 是刻意加入的噪声。
- 反推困难已知 A 和 b 求 s,像从炒好的菜反推每一撮盐的量——几乎不可能。
AI 应用场景
场景一:广告平台隐私求交(PSI)
阶段:数据融合与特征对齐(数据准备阶段)
解决的问题:两家广告平台要做联合建模,却无法共享完整用户名单。传统做法是把名单交给可信第三方比对,但第三方泄露风险大且不合规(如《个人信息保护法》)。用遗忘传输构造 PSI,双方在密文上完成交集计算,只输出交集结果,非交集用户彼此不可见。
具体案例:某电商平台与视频平台要统计“重叠高消费用户”做联合营销。工程师把用户 ID 哈希后装入布谷鸟哈希表,再用批量 OT 逐桶比对,最终只输出交集 ID 列表;全流程跑在隐私计算平台上,通算时间从数小时降到分钟级。
场景二:联邦学习中的样本对齐与安全聚合
阶段:模型训练与推理
解决的问题:医院和药企联合训练疾病预测模型,样本 ID 必须对齐,但病例数据不能出域。联邦学习常用 OT 做“样本对齐”(PSI),并在安全聚合中用 OT 相关原语保护梯度,防止恶意服务器通过梯度反推单条样本。
具体案例:某三甲医院与科研机构联合训练糖尿病并发症预测模型,双方用 OT 完成 5 万条样本的隐私求交,对齐后各自在本地训练,只上传加密梯度;模型 AUC 提升 8%,并通过第三方安全审计。
场景三:安全多方计算(MPC)的基础原语
阶段:计算执行阶段
解决的问题:多个机构要联合统计(如平均薪资、共债客户数),又互不信任。GMW、姚氏混淆电路等 MPC 协议把计算拆成布尔电路,每个“与门”的求值都调用一次 OT,遗忘传输是整个 MPC 大厦的地基。
具体案例:四家银行联合统计“共债客户”数量,每家输入本地借款人列表,MPC 引擎底层调用 OT 扩展生成随机相关值,完成秘密分享下的电路求值,最终只输出统计数字。审计日志显示 OT 调用量达千万级,但整体延迟控制在秒级。
Python 演示
"""基于 RSA 的 1-out-of-2 遗忘传输教学演示(小素数版,仅供学习)。"""import hashlibimport random def _is_prime(x): if x < 2: return False for d in range(2, int(x ** 0.5) + 1): if x % d == 0: return False return True def _rand_prime(lo, hi): while True: p = random.randint(lo, hi) if _is_prime(p): return p def _gcd(a, b): while b: a, b = b, a % b return a def _inv(a, m): r0, r1 = a, m s0, s1 = 1, 0 while r1: q = r0 // r1 r0, r1 = r1, r0 - q * r1 s0, s1 = s1, s0 - q * s1 return s0 % m def _kdf(x, length): h = int(hashlib.sha256(str(x).encode('ascii')).hexdigest(), 16) return h.to_bytes(length, 'big')[:length] def _xor(a, b): return bytes(x ^ y for x, y in zip(a, b)) class Sender: """厨师老王:持有 m0/m1,生成 RSA 密钥,解密后发回密文。""" def __init__(self, m0, m1): self.m0 = m0 self.m1 = m1 p = _rand_prime(200, 400) q = _rand_prime(200, 400) while q == p: q = _rand_prime(200, 400) self.n = p * q self.phi = (p - 1) * (q - 1) self.e = 3 while _gcd(self.e, self.phi) != 1: self.e += 2 self.d = _inv(self.e, self.phi) def public_key(self): return self.n, self.e def send(self, c0, c1): y0 = pow(c0, self.d, self.n) y1 = pow(c1, self.d, self.n) z0 = _xor(self.m0, _kdf(y0, len(self.m0))) z1 = _xor(self.m1, _kdf(y1, len(self.m1))) return z0, z1 class Receiver: """顾客小赵:持选择位 b,构造两个盒子并还原 m_b。""" def __init__(self, b): self.b = b def choose(self, n, e): x = random.randint(2, n - 2) k = random.randint(2, n - 2) c0 = pow(x if self.b == 0 else k, e, n) c1 = pow(x if self.b == 1 else k, e, n) return c0, c1, x def recover(self, z0, z1, x): zb = z1 if self.b == 1 else z0 return _xor(zb, _kdf(x, len(zb))) def main(): m0 = b'Dish A: Steamed Fish ' m1 = b'Dish B: Braised Pork ' sender = Sender(m0, m1) b = random.randint(0, 1) receiver = Receiver(b) c0, c1, x = receiver.choose(*sender.public_key()) z0, z1 = sender.send(c0, c1) got = receiver.recover(z0, z1, x) print('小赵想选:', '菜谱 B' if b else '菜谱 A') print('小赵收到:', got.decode('ascii')) assert got == (m1 if b else m0) print('厨师视角: 两个盒子都是随机数,选择位 b 完全隐藏') if __name__ == '__main__': main()
self.d = _inv(self.e, self.phi)求出 RSA 私钥,这把“万能钥匙”只握在厨师手里。c0 = pow(x if self.b == 0 else k, e, n)顾客按选择位把 x 或 k 扣进锁里,两个盒子从外面看毫无差别。z0 = _xor(self.m0, _kdf(y0, len(self.m0)))厨师用解密出的群元素哈希做信封,把秘方裹进去寄回。got = receiver.recover(z0, z1, x)顾客只用自己的 x 还原答案,另一封信永远拆不开。assert got == (m1 if b else m0)校验正确性:拿到的确实是选中的那道菜。
常见误区
误区遗忘传输是不是说传完之后,发送者和接收者都忘了消息内容?那接收者还怎么用数据?
正解OT 的“遗忘”是相对普通传输而言的:发送者对“接收者选了哪条”选择性失忆,接收者对“其他消息”永久失忆。接收者清清楚楚拿到 m_b,发送者只知道“有人拿走了一条”,但不知道是哪一条。就像小赵尝完菜记得那口鲜味,老王却不知道他尝的是哪道菜。
为何常见:“遗忘”这个词太形象,字面理解成“大家都忘了”,混淆了“隐私保护”与“数据删除”两个概念。
误区没有可信第三方怎么保证公平?是不是所有 OT 系统背后都得有一个裁判或中介机构?
正解OT 的全部意义恰恰是去掉裁判。公钥密码学(RSA、椭圆曲线、格)充当“数学裁判”:单向性让发送者无法区分两个盒子,计算困难性让接收者凿不开第二扇门。引入中心化第三方反而破坏了隐私计算的信任模型——那正是 OT 要消灭的东西。
为何常见:生活中“公平”通常靠第三方(法院、公证处)维持,直觉上很难接受“一张数学试卷也能当裁判”。
误区发送者把 m₀⊕r 和 m₁⊕r 发过去,接收者拿自己的 r 解开,这不就实现双向保密了吗?
正解不行。发送者手里有 m₀、m₁ 和 r,随手一算就能推出接收者选了哪条。OT 的接收者隐私要求“选择信息在发送者眼里计算不可区分”,必须靠带陷门的单向函数(公钥运算)构造;纯对称的异或没有单向性,做不出双向隐私的 OT。
为何常见:XOR 是密码课上最常用的“伪装术”,初学者容易以为“包一层随机数”就安全了,忽略了发送者本身也能看到密文。
误区OT 扩展是不是做了几百次基础 OT 之后,就能零成本导出无限多次 OT?
正解扩展把代价从“每次公钥运算”摊薄为“每次哈希/伪随机调用”,但基础 OT 的次数由安全参数 κ 决定(如 128 次),底层主密钥一旦泄露,全部扩展 OT 作废。安全等级、通信量、消息长度都有下限,没有免费午餐。
为何常见:“扩展”听起来像“复制拷贝”,让人忽略了底层随机相关性的安全边界和无泄漏约束。
误区遗忘传输是学术界的玩具协议,离我写的业务系统太远了,学了也用不上。
正解工业界早已大规模消费 OT:隐私求交、联邦学习样本对齐、MPC 平台底层都在调用它。蚂蚁、微众等隐私计算平台把 OT 封装成 C++ 库,单次 PSI 可处理亿级数据。数据/AI 工程师在隐私计算方案里几乎必然遇到 OT 接口。
为何常见:密码学原语大多藏在库的最底层,业务工程师看不到它,就误以为“不存在、不重要”。
面试题
Q1. “遗忘传输”中“遗忘”的核心含义是什么?
- A.双方都忘记消息内容
- B.发送者不知道接收者选了哪条← 正确答案
- C.接收者忘记自己选过什么
- D.传输结束后消息自动删除
答案:B。遗忘指发送者不知道接收者的选择位 b(接收者隐私),同时接收者学不到其他消息。小赵清楚记得自己尝的菜,老王却不知道他尝的是哪道。A 和 D 是字面误解,C 违背协议正确性。
Q2. 1-out-of-N OT 最常用的构造思路是什么?
- A.连续执行 N 次 1-out-of-2 OT
- B.用 ⌈log₂N⌉ 个 1-out-of-2 OT 组合← 正确答案
- C.提前把全部消息发给接收者
- D.依赖可信第三方分发密钥
答案:B。把选择下标写成二进制,每个比特对应一道 1-of-2 门,ℓ 道门嵌套即得 1-of-N。连续执行 N 次会让发送者逐步窥见选择信息,消息全发违背发送者隐私,第三方分发违背去中心化设计目标。
Q3. 在 RSA 基础 OT 中,接收者发送 c₀=x^e、c₁=k^e,发送者为什么无法判断哪个对应 x?
- A.因为 x 与 k 取值恰好相等
- B.因为模数 N 是公开的公开值
- C.因为 RSA 加密结果不可区分← 正确答案
- D.因为公钥指数 e 取值很小
答案:C。x 和 k 都是接收者随机挑选的,两者在 e 次幂后都均匀分布在模 N 的群中;发送者只有公钥 (N,e),在 RSA 假设下无法区分哪个盒子里藏的是 x。若看得穿,接收者隐私就被攻破了,所以随机源质量至关重要。
Q4. 半诚实模型与恶意模型的本质区别是什么?
- A.半诚实模型允许使用更大的安全参数
- B.恶意模型允许参与方偏离协议任意操作← 正确答案
- C.半诚实模型不保护发送者隐私
- D.恶意模型不需要密码学假设
答案:B。半诚实假设参与方严格照协议执行,只是事后想从记录里推断秘密;恶意对手则可以篡改消息、提前中止、伪造身份。真实系统常用“编译器”把半诚实协议升级为恶意安全,但成本更高。
Q5. OT 扩展(如 IKNP)主要用什么替代大量公钥运算?
- A.对称哈希与伪随机生成← 正确答案
- B.更复杂的椭圆曲线
- C.增加一轮 RSA 签名
- D.大规模并行网络传输
答案:A。IKNP 先用 κ 次基础 OT 建立相关矩阵,再用相关鲁棒哈希把相关性放大到 n 个 OT,使公钥运算只剩 O(κ) 次、对称运算 O(n) 次。密钥协商仍然用椭圆曲线或 RSA,但扩展阶段全部换成哈希等轻量运算。
Q6. 隐私求交(PSI)利用 OT 主要实现了哪种保护?
- A.保护哈希函数的单向性
- B.双方只获得交集不泄露其余元素← 正确答案
- C.保护网络传输带宽不泄露
- D.保证交集至少包含一个元素
答案:B。PSI 是 OT 的招牌应用:双方把集合元素哈希后装入布谷鸟哈希表,用 OT 做逐格安全比较,最终只输出 X∩Y,交集之外的元素对方一无所知。哈希单向性只是辅助工具,网络带宽和交集非空都不是 PSI 的保护目标。
Q7. 在 RSA 基础 OT 协议中,接收者最终如何还原出 m_b?
- A.用私钥 d 解密 z_b 得到明文
- B.用随机数 x 算 H(x) 异或 z_b← 正确答案
- C.解密 z0 和 z1 后做比对
- D.向发送者索要完整的密钥
答案:B。接收者知道 y_b = x(因为 c_b = x^e),故用 H(x) 异或 z_b = m_b ⊕ H(x) 即得 m_b。它没有私钥 d,也算不出 y_{1-b}。若向发送者索要密钥,发送者就能反推选择位,协议里绝不允许这一步。
Q8. 遗忘传输需要满足哪些隐私性质?(多选)
- A.发送者不知道接收者的选择位← 正确答案
- B.接收者学不到未被选中的消息← 正确答案
- C.双方都能看到完整消息集合
- D.接收者的选择位对第三方可见
答案:AB。OT 的双向隐私就是“发送者隐私 + 接收者隐私”:小赵尝菜不被老王看见、选择也不让旁人知道,而其他菜的做法对他永远是机密。C 违背发送者隐私,D 违背接收者隐私。
Q9. 关于 RSA 基础 OT 协议,下列说法正确的有?(多选)
- A.发送者用私钥 d 解密 c0 和 c1← 正确答案
- B.接收者可以恢复 m_b 但得不到 m_{1-b}← 正确答案
- C.接收者需要可信第三方帮忙解密
- D.该协议的安全依赖大整数分解难题← 正确答案
答案:ABD。发送者用 d 打开两个盒子;接收者只有 x 这一把钥匙,只能还原选中的那条;整个协议没有任何第三方。RSA 的安全性建立在大整数分解困难之上——这正是量子计算机威胁它的原因。C 既多余又违背设计初衷。
Q10. IKNP OT 扩展方案使用了哪些组件?(多选)
- A.κ 个基础 OT← 正确答案
- B.相关鲁棒哈希函数← 正确答案
- C.伪随机生成器← 正确答案
- D.可信执行环境芯片
答案:ABC。IKNP 的原料是基础 OT + 相关鲁棒哈希 + PRG,公钥运算只做 κ 次,其余全是对称密码操作。可信硬件(TEE)是另一条独立的技术路线,不属于 IKNP 的密码组件,两者可以并行发展,但方案内部不应混淆。