Skip to content

模型Model

不经意伪随机函数

Oblivious pseudorandom function · OPRF

客户端以新鲜非零标量盲化群元素,服务器在盲点上求值,客户端去盲得到PRF输出,并分开证明输入隐藏与假设性的伪随机性。

形式陈述 ​

普通伪随机函数由一方同时拿到密钥和输入后求值。不经意伪随机函数把这两份信息分给不同参与者:服务器持有钥匙 k,客户端持有输入 x,交互结束时客户端得到 Fk(x),服务器不从协议消息学到 x。仅“输出很难猜”不够,还必须规定哪一方得到什么、允许怎样调用服务器。

本页使用RFC9497的P256-SHA256、OPRF模式0,并将代数正确性、输入隐藏和计算安全分开陈述。[1] 群为素数阶 q 的加法循环群 G=⟨G⟩,单位元记为 O。标量模 q 运算;点坐标模另一个素数 p 运算,常量见哈希到曲线。P256余因子1,合法非单位曲线点都在预定素数阶群中。

输入、编码和域分离 ​

固定

text
context = ASCII("OPRFV1-") || 00 || ASCII("-P256-SHA256")
DST     = ASCII("HashToGroup-") || context

模式 00 是一个零字节,不是ASCII字符 0。令 H1(x) 为使用上述DST的P256哈希到曲线。输入 x 是字节串;本接口遵循RFC §5.1较严格的长度文字,要求 |x|<65535,并要求 H1(x)≠O。§1.2写的是不大于65535,本页明确选用至多65534的子集。

传输点统一用33字节压缩编码:首字节为 02/03,其余32字节为大端横坐标。接收端检查长度、前缀、0≤X<p、曲线方程和非单位元。标量的规范编码为32字节大端且数值小于 q;不会把越界整数默默模约简,也不把Python的 True 当成标量1。

私钥 k 和每次独立盲因子 r 都取自 Fq×。RFC原§4误印的含零随机标量区间已由Verified Erratum8392纠正;哈希到标量的结果仍允许零,二者不能混淆。[2]

两条消息完成求值 ​

客户端保留 (x,r),发送 U=rH1(x)。服务器验证 U 后返回 V=kU。客户端验证 V,计算

N=r−1V,Fk(x)=SHA256(fr(x)‖fr(enc(N))‖Finalize),

其中 fr(b)=I2OSP(|b|,2)‖b。Finalize为八个ASCII字节。诚实执行满足

N=r−1krH1(x)=kH1(x),

故结果与同时知道 k,x 的直接求值相同。这份基本协议没有证据让客户端检查服务器是否用了预期钥匙;可验证OPRF将增加这项接口。

直觉

可以把 H1(x) 看成群上的一个位置。客户端先用秘密非零倍数把它移到均匀的非单位位置,服务器在那里乘自己的钥匙,客户端再撤去第一次倍乘。两次倍乘可交换,使最终值不含 r;但服务器看到的请求仍被 r 隐藏。

“请求被隐藏”和“拿不到更多函数值”是不同问题。前者由一个均匀双射证明;后者面对会任意提交群元素的恶意客户端,必须限制服务器查询次数并采用相应困难假设。一个代数正确、请求也均匀的错误构造,仍可能让一次查询提供所有输入的求值能力。

盲化、求值与去盲的不同持有信息
例子与边界

复现一条公开P256记录 ​

RFC Appendix A.3.1.1取输入单字节 00,公开教学私钥与盲因子为

text
k = 159749d750713afe245d2d39ccfaae8381c53ce92d098a9375ee70739c7ac0bf
r = 3338fa65ec36e0290022b48eb562889d89dbfa691d1cde91517fa222ed7ad364

私钥与盲因子都按规范32字节表示。请求、响应和输出分别是

text
U = 03723a1e5c09b8b9c18d1dcbca29e8007e95f14f4732d9346d490ffc195110368d
V = 030de02ffec47a1fd53efcdd1c6faf5bdc270912b8749e783c7ca75bb412958832
F = a0b34de5fa4c5b6da07e72af73cc507cceeb48981b97b7285fc375345fe495dd

参考程序还从公开种子 a3 重复32次及ASCII信息 test key 导出这把钥匙,再逐层核对结果。这些值用于离线复算;使用公开种子无法生成秘密密钥,Python参考运算也不提供常时保证。

换一个新鲜非零 r′,请求与响应都改变,去盲后的 N 和输出保持不变。对于同一非单位 H1(x),不同 r 产生不同 U,所以这是可逐点检查的代数结论,而不是“通常不同”的经验判断。

一个看似简化、实际破坏查询限制的替换 ​

假设把 H1(x) 错换成 h(x)G,而公开函数 h 的非零值人人能算。客户端用输入 x0 完成一次求值,去盲后拿到 N0=kh(x0)G,于是可以算出

K=h(x0)−1N0=kG.

此后对任何新输入 x1,直接算 h(x1)K=kh(x1)G,即可离线构造Finalize值,无需服务器。若服务器公钥本来就公开,连第一次查询也省掉了。失败原因是输入点的离散对数已知;点合法、盲点均匀和去盲等式都仍成立。

协议也不是数字签名。客户端最终持有的是32字节函数值,普通旁观者没有一项仅凭公开钥匙就验证 (x,Fk(x)) 的签名接口。把某些盲签名用作OPRF构造部件,需要额外编码和安全论证。[3]

哪些观察会改变隐藏结论 ​

同一个 r 不得复用。两次相同输入会产生完全相同的请求,直接暴露重复;独立均匀盲化下,两次请求碰巧相同的概率仅为 1/(q−1)。服务器若还看到请求者主动公布的输出、输入相关错误、日志或用时,完整观察已超出下节的消息模型。

服务器可以拒绝响应,也可以在基本OPRF中换一把钥匙。输入隐藏不保证可用性,更不保证响应属于既定公钥。对低熵输入,拥有服务器钥匙的一方能够枚举候选并计算其输出;消息盲性不会把公开输出变成信息论秘密。

推论与应用

服务器视图的精确模拟 ​

固定任何合法 x,H1(x)≠O 在素数阶群中也是生成元。因此

r⟼rH1(x)

是从 Fq× 到 G∖{O} 的双射。每个可能请求的概率都是 1/(q−1),与 x 无关。这个结论不需要离散对数困难。

完整本地视图还包括服务器的钥匙、辅助信息、随机币和它生成的响应。固定这些输入的同一条件分布,模拟器先独立抽一个均匀非单位点 U,再运行服务器原有程序,记录它的全部本地动作。由于它收到的 U 分布与真实执行完全相同,后续视图也完全相同;即使服务器计算无界,结论仍成立。对按以往视图选择输入的新会话,只要使用新鲜独立盲因子且输入有效,可以逐次条件化应用同一论证。

这个模拟器不接收也不模拟客户端后来对外公布的输出;若应用增加该消息,需要重新证明。它也不证明客户端只学到一次授权结果。

伪随机性需要什么附加假设 ​

理想目标把每个新输入分配一个一致的随机输出,重复输入返回同一个值。恶意客户端可任意形成请求,安全论证还要把它获得的新输入求值数量与服务器实际参与次数联系起来。基础CDH只给一个计算挑战,没有这类查询预算。

One-More Gap DH的一种原论文形式给攻击者 G,kG 和 N 个独立随机挑战点,允许至多 Q 次 X↦kX 查询,并另给DH关系判定接口;攻击者须输出 Q+1 个不同挑战点的正确求值。假设要求任意经典多项式时间攻击者成功概率可忽略。这里的“one more”与“gap”分别对应多完成一次和额外判定接口,不能省略后只写“基于CDH”。[3]

JKK14的具体2HashDH-NIZK协议在随机预言机模型中把这类假设接到理想功能。RFC9497的编码、上下文和组合证明与原协议有差别,§7.2.1明确提示其多钥匙/批处理分析边界。本页执行单钥匙基本求值,给出了去盲和输入视图的证明;完整恶意客户端伪随机性使用相应论文/RFC模型,不能由上述双射推出,也不把固定SHA-256当成无条件随机函数。

代价与终点任务 ​

一次诚实在线求值需要客户端盲化、服务器求值、客户端去盲三次标量乘法,另有哈希到曲线、一次标量求逆和一次Finalize。线上各发一个33字节点,客户端存输入和盲因子。参考程序以二进制倍加做一次标量乘法,至多 O(log⁡q) 次点加;仿射点加还包含模 p 求逆,不能漏算。固定套件下,输入字节处理及拼接空间为 O(|x|+1),其余群/域操作单列。

终点任务:用同一 k,x 和两个不同盲因子复算请求、响应、相同输出;让服务器改用 k+1(modq),解释基本客户端为何仍能结束。随后在错误 h(x)G 版本里只查询一次,输出另一条从未查询消息的正确函数值。共同终点练习给出完整运行入口。

参考资料
  1. Alex Davidson等,RFC9497: Oblivious Pseudorandom Functions Using Prime-Order Groups,2023-12,IRTF Informational;§§2.1、3.1–3.3.1、4.3、5.1、7.1–7.4、Appendix A.3.1:协议、P256编码、输入与安全边界。它不是IETF Standards Track标准。
  2. RFC Editor,RFC9497 Erratum8392,2026-01-27 Verified:RandomScalar排除零;完整勘误表中8393为Held,8720是向量字段名的编辑修正。
  3. Stanislaw Jarecki、Aggelos Kiayias、Hugo Krawczyk,Round-Optimal Password-Protected Secret Sharing and T-PAKE in the Password-Only Model,ASIACRYPT2014扩展版,§3.1、Figure3与Theorem1,PDF pp.9–10:双哈希协议、One-More Gap DH接口与原协议安全定理;原论文的sid、公钥输入与理想功能不能直接删掉后照搬其结论。
关系图谱10 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

  1. 前置三跳
  2. 前置二跳
  3. 前置一跳
  4. 当前条目
  5. 后续一跳
  6. 后续二跳
  7. 后续三跳
文字版关系按与当前条目的最短距离分组
类型化关系