Skip to content

方法Method

显式密钥确认与接受时机

Explicit key confirmation · Finished key confirmation

用独立确认密钥与角色化Finished证明对端持有本次派生秘密,明确单向确认、双向确认与应用接受状态的差别。

形式陈述 ​

在认证握手产生上下文 T1 和候选共享秘密后,显式密钥确认要求收到一个只有掌握对应秘密才能生成、并绑定本次会话的证据。确认消息常是用专用密钥计算的HMAC,不能直接把秘密发给对方“比一比”。

本教学协议从PRK分别派生 KCfin,KSfin,方向与用途经域分离固定;双方计算

FC=HMACKCfin(E(client-finished,H(T1))),FS=HMACKSfin(E(server-finished,H(T1))).

每端的局部状态为 await_auth → await_peer_finished → established。身份验证通过只是进入第二阶段;只有按期望角色验证对方Finished,才可进入本地established并交付应用消息。最终应用上下文固定为 Tf=E(T1,FC,FS),再派生应用方向密钥。双方都可计算两个确认值,但仍必须实际收到对端的有效确认,才能说获得显式对端持钥证据。

直觉

签名证明某个长期密钥认可了这次交换;它不必证明签名方已经正确计算出本次共享秘密。Finished让一方对完整握手结果做带密钥的确认,因而把“交换记录一致”和“候选秘密可用”接起来。

但它仍是共享密钥认证:若攻击者已经知道确认密钥,就能制造证据。一个公开的正确MAC也不能单独解决身份归属,必须承接已验证的握手上下文。

例子与边界

若双方用同一确认密钥、同一个消息 H(T1),攻击者可以把客户端发出的MAC原样反射给客户端。客户端若把“验证通过”解释成服务器确认,就接受了自己生成的证据。单独改角色消息、或独立派生角色确认密钥,都会阻断这个特定反射;本单元两处都明确绑定,便于检查各自职责。

检查器用服务器Finished去验证客户端角色的期望输入,得到失败。固定完整T1时,将一个签名字节改变也会改变确认输入;但正确实现应先拒绝无效签名,不能期待Finished代替前面的公钥认证。

双方发完确认消息后,攻击者可以只交付其中一个。客户端可能已进入established,服务端仍在等待。密码协议不能用有限消息强迫双方在同一瞬间知道“对方也知道我已确认”;应用应按各自接受条件解释状态,超时则关闭或重新开始。丢失最后一条确认不等于已经发生密钥泄漏。

本例双方Finished都覆盖同一T1,最终Tf又包含两者。TLS1.3的具体消息次序与覆盖范围不同,尤其客户端Finished的transcript包含此前服务端Finished;不能把教学式直接当作TLS复现。

推论与应用

密钥确认可发现错误的共享值、transcript分歧、身份/角色混淆和部分实现错误。它不保证对方未来保持在线、不保证对方已经持久保存状态,也不保证应用事务已执行。

在确认前发送普通应用数据,会改变协议安全模型。TLS1.3的早期数据有专门的0-RTT和重放限制,不能由普通握手确认结论顺带推出安全。终点检查应记录每个接受事件所依赖的真实接收证据,而不只检查本地能够计算标签。

参考资料
  • RFC 8446,§4.4.4:Finished计算与验证,§2及§8:握手流与0-RTT重放边界
  • Dan Boneh、Victor Shoup,作者教材v0.6,§21.11.7:显式密钥确认;§21.9:必须在所用会话安全模型中理解确认
关系图谱11 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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