4.4.2. 安全关联数据库(SAD)
在每个 IPsec 实现中,都存在一个名义上的安全关联数据库(SAD),其中每个条目定义了与一个 SA 相关联的参数。每个 SA 在 SAD 中都对应一个条目。
SAD 查找机制
出站处理
对于出站处理,SAD 中的每个条目都由 SPD 缓存中 SPD-S 部分的条目所指向。
入站处理
- 对于单播 SA:SPI 可单独用于查找 SA,也可与 IPsec 协议类型结合使用。
- 如果 IPsec 实现支持多播:则使用 SPI 加目的地址,或 SPI 加目的地址与源地址来查找 SA。
(关于将入站 IPsec 数据报映射到 SA 时必须使用的算法细节,见第 4.1 节。)
SAD 条目参数
以下参数与 SAD 中的每个条目相关联。除另有说明(例如 AH 认证算法)外,这些参数都应当存在。此描述并不声称是一个 MIB,而只是规定在 IPsec 实现中支持一个 SA 所需的最小数据项集合。
选择器填充
对于第 4.4.1.1 节定义的每个选择器,SAD 中入站 SA 的条目必须(MUST)在初始时用创建该 SA 时协商的一个或多个取值填充。(关于 SPD 变化对现存 SA 的影响,见第 4.4.1 节“系统运行时对 SPD 的更改”下的段落。)
对于接收方,这些值用于检查入站包(经过 IPsec 处理后)的头部字段是否匹配为该 SA 协商的选择器取值。因此,SAD 充当一个缓存,用于检查到达 SA 的入站流量的选择器。对接收方而言,这是验证到达某个 SA 的包是否符合该 SA 策略的一部分。(ICMP 消息的规则见第 6 节。)
这些字段可以采用具体取值、取值范围、ANY 或 OPAQUE 的形式,如第 4.4.1.1 节“选择器”所述。
没有对应 SPD 条目的 SAD 条目
还需注意,在以下几种情形下,SAD 可能包含没有对应 SPD 条目的 SA 条目:
- 由于本文档不强制要求 SPD 改变时选择性地清空 SAD,当创建 SAD 条目的那些 SPD 条目被更改或删除时,SAD 条目可能仍然保留。
- 如果创建了一个手动配置密钥的 SA,则可能存在一个不对应任何 SPD 条目的 SAD 条目。
多播 SA 支持
注意:如果经过手动配置,SAD 可以支持多播 SA。
出站多播 SA
出站多播 SA 与单播 SA 具有相同的结构。源地址是发送方的地址,目的地址是多播组地址。
入站多播 SA
入站多播 SA 必须配置为包含被授权向相关多播 SA 传输的每个对等端的源地址。多播 SA 的 SPI 取值由多播组控制器提供,而不像单播 SA 那样由接收方提供。
由于一个 SAD 条目可能需要容纳 SPD 条目中的多个独立 IP 源地址(对于单播 SA 而言),因此入站多播 SA 所需的设施已经是 IPsec 实现中现成的功能。然而,由于 SPD 没有容纳多播条目的规定,本文档不规定为入站多播 SA 创建 SAD 条目的自动化方式。只能创建手动配置的 SAD 条目来容纳入站多播流量。
实现指导:SPD-S 到 SAD 的链接
本文档不规定 SPD-S 条目如何引用对应的 SAD 条目,因为这是一个实现相关的细节。但是,已知某些实现(基于 RFC 2401 的经验)在这方面存在问题。
问题:仅在 SPD 缓存中存储(远端隧道头 IP 地址,远端 SPI)这对值是不足的,因为该对值并不总能唯一标识一个 SAD 条目。
非唯一性示例:
- 同一 NAT 后方的两台主机可能选择了相同的 SPI 取值。
- 某台主机被分配了一个先前由其他主机使用的 IP 地址(例如通过 DHCP),而与旧主机关联的 SA 尚未通过死亡对等端检测机制删除。
后果:这可能导致包通过错误的 SA 发送;或者,如果密钥管理确保该对值唯一,则会拒绝创建原本有效的 SA。
建议:实现者应当以不会产生此类问题的方式来实现 SPD 缓存与 SAD 之间的链接。