Skip to content

方法Method

会话中的AEAD记录层

AEAD record layer · Context-bound session records

将方向密钥、头部关联数据、nonce分配和接收状态组成记录接口,定义交付条件与重启边界,避免把标签成功等同完整会话安全。

形式陈述 ​

记录层在一个已经建立并认证的会话内保护多条消息。本页采用可乱序传输、显式序号的教学模型,每条记录至多65535字节明文,方向 d∈{c2s,s2c}。会话上下文是最终握手摘要 t;经域分离得到两把应用密钥 Kd。

对于序号s,固定编码的公开头部

A=E(CS09-demo,1,t,d,data,u64(s)),N=032‖u64(s).

发送端从nonce分配器取一个未用过的s,调用AEAD得到 C=EncKd(N,A,M),线上记录为 (A,C)。头部受认证但不保密;序号映射对合法64位s是单射。序号、方向和会话标识参与不同接口,各自作用不因重复出现而可以随意删除。

接收端依次检查长度与格式、固定的协议/版本/会话/方向/类型、重放窗资格,然后使用自己的期望上下文验AEAD;成功后提交窗口再交付明文。解析失败、认证失败或重放拒绝,都不能向上层交付候选明文。窗口更新的并发与持久化语义必须与所声称的交付保证匹配。

直觉

一份密文有标签,只说明某个给定密钥和公开字段组合被接受。记录层还要回答:这个密钥属于哪次会话、这是哪个方向的第几条消息、同一条是否交付过、进程重启之后这些判断是否仍可靠。

这使安全义务分布在几个明确的接口上:握手负责身份与秘密来源;KDF负责用途;分配器负责nonce;AEAD负责保密与新鲜篡改检测;接收状态负责旧合法记录。任何一层都不能代替其余层。

例子与边界

本单元固定合成握手派生出c2s和s2c密钥,对 m0 使用c2s的序号0。nonce是12个零字节;它在新方向密钥下第一次使用合法,并不要求所有会话都避开零。收到后按照同一头部和密钥可解出两个ASCII字节。

攻击者把这份记录直接交给s2c接收器,期望方向检查就会失败。若再把头部方向改成s2c,AEAD所见AAD变了,接收器还采用另一把密钥,认证失败。修改版本或会话摘要同理:接收器不能只照抄攻击者头部参数来“配合”解密。

完整重放原记录没有更改任何密码字节,AEAD本身仍会成功。第二次交付必须由重放窗阻止。若删除KDF方向标签,但保留正确AAD方向检查,首先失去的是密钥域分离,不能直接说反射已经成功;实际攻击要逐门分析。

密文长度、公开头部和通信时间仍可见。记录层也不保证整个文件完整结束:攻击者可能截去最后几条有效记录。若上层需要完整对象,应认证总长度、记录位置或一个明确终止消息,并在满足完成条件后才声称文件成功。

推论与应用

把记录层正确性分成两部分更易复核。诚实路径中,双方持有相同方向密钥与上下文,nonce、AAD完全一致,因此AEAD正确性恢复M;在安全路径中,新增可接受元组由AEAD完整性约束,旧元组由状态不变量拒绝。总安全主张还依赖会话建立、密钥分布、使用限额及实现不泄漏,不能仅凭一个往返测试推出。

完整实验实际调用已安装的AESGCM,展示错角色、错版本、乱序、重复、伪造大序号与重启。它没有实现TLS;TLS1.3在可靠有序传输上使用隐式序号、不同AAD与nonce构造,本页借其规范分层而不复制线格式。

参考资料
  • RFC 5116,§§2–3:AEAD接口、关联数据编码及nonce职责
  • RFC 8446,§§5.2–5.5:TLSCiphertext、隐式序号、nonce和密钥使用界;§7.1:方向流量密钥
关系图谱11 个相邻概念 · 2 类关系

拖动节点调整位置。

显示关系

显示:依赖

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