“连接实例、CID、stream ID、packet number、业务 request ID 各有职责。一个连接可有多个用于选路/分派的 CID;它们不是已认证身份,也不能用 CID 改变来…”
形式陈述
记录层在一个已经建立并认证的会话内保护多条消息。本页采用可乱序传输、显式序号的教学模型,每条记录至多65535字节明文,方向
对于序号s,固定编码的公开头部
发送端从nonce分配器取一个未用过的s,调用AEAD得到
接收端依次检查长度与格式、固定的协议/版本/会话/方向/类型、重放窗资格,然后使用自己的期望上下文验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构造,本页借其规范分层而不复制线格式。