摘要
- RFC 2406 逐字段规定 ESP 的保护范围。传输模式不保护原始 IP 头;隧道模式加密完整的内层 IP 数据报,却仍需一个可见的外层 IP 头。SPI 与序列号在两种模式中都明文传送。
- 机密性、完整性和防重放不是同一个结果。认证可以不选,加密也可以选 NULL;即使序列号必定存在,接收方仍可关闭重放窗口。因此“载荷已加密”不证明流量关系已隐藏、防重放已执行或应用已经接受。
路由器必须知道下一跳,所以总要有一个可路由的外壳。接收方必须先知道该查哪一条安全关联,所以 SPI 不能先被它尚未找到的密钥藏起来。RFC 2406 的设计从这种现实开始:有些信息必须留在外面,才能把里面的内容送到正确的处理上下文。
1998 年 11 月发布的 RFC 2406 是 ESP 的第二代基础规范。1995 年的 RFC 1827 更像一个外壳,只有 SPI 是独立于具体变换的必备字段,其他字段与算法由不同变换文档补足。RFC 2406 直言,变换组合不断膨胀,迫使基础规范纳入序列号、填充、Next Header、可选认证数据和完整的收发顺序。
纳入同一格式不等于合并成一个安全开关。ESP 可以只提供机密性而不启用自身认证,也可以用 NULL 加密只提供认证。两者至少选择一个。防重放只有在认证存在时才能选择,而且是否启用由接收方决定。
线上格式首先是外层 IPv4 或 IPv6 头,其中协议号指向 50。随后是 32 位 SPI 和 32 位 Sequence Number,再后面才是 Payload Data、Padding、Pad Length、Next Header 与可选 Authentication Data。
在加密与认证使用独立算法的典型情形中,加密覆盖 Payload Data、Padding、Pad Length 和 Next Header。外层 IP 头、SPI、序列号以及末尾的认证数据都不在加密区。若显式初始化向量位于 Payload Data 开头,RFC 还提醒:工程上常把它称作密文的一部分,但它本身通常没有被加密。
认证覆盖面又不相同。启用认证时,ICV 包括 SPI、Sequence Number、Payload Data、Padding、Pad Length 和 Next Header,却不包括承载 ICV 的 Authentication Data。发送方先加密、后认证,所以载荷字段以密文形态进入 ICV。外层 IP 头仍在 ESP 认证之外。
传输模式把这一点表现得最直接。ESP 插在原始 IP 头之后、上层协议之前。原始源址与目的址仍可见。IPv6 中,位于 ESP 之前的扩展头也不受它保护;放在 ESP 之后的目的选项则可能进入保护区。头部顺序本身就是安全边界。
隧道模式把完整原始 IP 数据报放进加密区,内层源址和目的址因此被遮住。但新生成的外层 IP 头必须写出隧道端点。旁观者不再知道最终通信者,也可能仍能识别网关、包长、节奏和总量。隧道隐藏了一层关系,同时留下另一层关系。
因此 RFC 2406 只称其为“有限的流量机密性”。要掩盖真实源宿关系,需要隧道模式,并最好由安全网关汇聚足够多的流量。额外填充可以模糊一部分载荷长度,却会消耗带宽,也无法单独隐藏时间、包数与外层端点。
序列号揭示另一种边界。发送方无论接收方是否检查,都必须写入并递增该字段。接收方可以按安全关联关闭防重放。抓包里出现一个不断上升的计数,只证明发送了计数,不证明滑动窗口作出了拒绝或接受。
若启用防重放,认证也必须启用,否则攻击者可以改写计数。接收方可以先用窗口排除明显过旧的候选,但只有 ICV 验证成功后才能推进窗口。完整证据必须同时连上正确的安全关联、经过认证的序列号和接收方的窗口判定;单份线上抓包只能看见其中一部分。
处理顺序还把策略选择留在 ESP 之外。出站时,IPsec 先按 RFC 2401 的规则确定某个报文应使用一条要求 ESP 的安全关联。之后才是封装、填充、加密与可选认证。分片发生在 ESP 处理之后。入站时先重组;若仍以分片形态交给 ESP,规范要求丢弃并把它视为可审计事件。
接收方用目的地址、ESP 协议和 SPI 查找单向安全关联。关联决定是否检查序列号、是否应有认证数据,以及使用哪些算法和密钥。找不到有效关联就丢弃。ICV 匹配只说明报文通过了这一层验证;解密之后仍有入站策略、上层协议与应用决定。
RFC 2406 甚至承认,没有认证时,错误安全关联或密文损坏可能产生一个 IPsec 无法识别的错误结果,只能交给后续协议发现。若解密与认证并行,认证完成前不得把明文交给下一步。密码学保护的是处理边界,不替应用解释所得内容。
“可审计”也不是“已经有日志”。支持审计的系统必须让 ESP 参与并允许管理员启停;但并非所有实现都被要求提供审计,粒度也主要由本地决定。无安全关联、异常分片、序列号溢出和 ICV 失败可以形成记录,是否真的留下、保留多久,仍是运营事实。
2005 年的 RFC 4303 取代 RFC 2406。它保留明文 SPI 与序列号、传输与隧道模式、机密性与完整性分离、接收方控制防重放等主干,同时加入扩展序列号、组合模式算法与明确的流量机密性填充。RFC 2406 是历史设计阶段,不是今天的算法选型建议。
按照 Lu Heng 对“运行事实高于标签”的要求,真正的问题不该止于“是否启用 ESP”。还要问:哪一种模式,哪一组服务,哪条关联,接收方是否查重,外层暴露了什么,日志留下了什么,应用最后做了什么。1998 年的字段图已经给出这些问题;后来的一句“全程加密”反而把它们抹平。
来源
会员简报
档案背景详情
使用相应会员等级登录,即可解锁完整简报与来源注释。
仅限 Strategic Circle
Strategic Circle
所有读者均可浏览。加入并登录后可解锁档案简报。
加入 Strategic Circle仅限 Leadership Alliance
Leadership Alliance
符合条件的 IP 资产所有者和管理层可登录查看 Leadership Alliance 简报。
加入 Leadership Alliance
