Skip to content

方法Method

密码用途的域分离

Cryptographic domain separation · Purpose-separated key derivation

把用途、角色、版本与输出长度纳入单射标签域,证明随机函数限制在互不相交输入集上独立,并定位删除标签失去的性质。

形式陈述 ​

设 FK 是PRF,要供给用途集合 D 中的多个逻辑接口。对每个用途 d 和本地输入 x,选择无歧义编码 E(d,x),定义

FK(d)(x)=FK(E(d,x)).

要求不同用途的编码像集不相交,且每个用途内部编码单射。标签不是秘密;它的作用是使两种语义无法变成同一个底层查询。协议标识、版本、算法套件、两端身份、方向、阶段、用途及输出长度,应按接口所需写入完整上下文。

本单元的HKDF扩展info固定为

E(protocol, version, suite, client_id, server_id, direction, purpose, u16(L), transcript_hash)。

方向用 c2s、s2c,用途用 finished、application 等。字段顺序不可随本机身份交换:两端对同一c2s流都使用规范的client在前、server在后。

直觉

域分离让同一底层秘密管理几套带名称的独立工作台。它不是“先派生几次便会不同”;相同确定函数收到完全相同输入就必须返回相同结果。如果两个用途只存在于程序变量名里、没有进入实际info,两次调用仍是同一次密码查询。

方向与角色也不等同“我”和“对方”。客户端的发送是服务端的接收;若双方都写 send,他们反而会得到不同约定或错误复用。应使用协议全局可辨认的方向名称。

例子与边界

把PRF换成理想随机函数 R。对于互不相交的域 E(d,Dd),不同域上的每个新点都获得独立均匀回答;重复查询同一点仍返回旧值。因此向不同用途提供 R(E(d,⋅)),与分别创建独立随机函数在联合分布上相同。再由PRF替换论证得到对应的计算安全结论,查询预算是所有用途查询的总和。

这个证明要求输入域确实不相交。若用裸字符串拼接,标签 ab 配输入 c 与标签 a 配输入 bc 仍会相撞;标签数量再多也无济于事。若直接删掉方向字段,固定其他info与PRK之后,c2s与s2c的密钥将严格相等,不是只发生一次罕见碰撞。

反过来,即使域编码不同,有限长度随机输出仍可能偶然相同。对 q 个互异输入的 n bit理想输出,碰撞概率至多 q(q−1)/2n+1;“不同标签保证密钥数学上绝不相等”是错误说法。

会话实验比较方向和用途改变后的真实派生字节,并删除方向构造完全相同的info。该反例直接否定的是“方向密钥独立/分离”接口;若记录AAD仍核对方向,不能因此声称已经成功反射记录。攻击需要看还有哪些独立校验门保留。

推论与应用

域分离使协议组合的资源账本更清楚:相同PRK下的应用密钥、Finished密钥、导出材料各有固定接口。它不能替代密钥保密、正确随机源或独立的证明;也不能把弱源变成高熵源。

标签更新应是协议定义的一部分。改变版本却沿用旧标签,可能使跨版本字节被认可;反之,仅把接收到的版本字段照抄进KDF,而不检查本机允许的版本,也没有建立协商策略。接收者必须验证自己期望的语义,再使用对应标签。

参考资料
  • RFC 5869,§3.2:info上下文与输出长度绑定
  • RFC 8446,§7.1:HKDF-Expand-Label、Derive-Secret及不同方向和阶段的标签;本页格式不是TLS标签格式
  • Dan Boneh、Victor Shoup,作者教材v0.6,§8.10.3:理想哈希的安全调用组织;本页随机函数分域证明从PRF定义直接推出
关系图谱10 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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