跳到主要内容

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 条目:

  1. 由于本文档不强制要求 SPD 改变时选择性地清空 SAD,当创建 SAD 条目的那些 SPD 条目被更改或删除时,SAD 条目可能仍然保留。
  2. 如果创建了一个手动配置密钥的 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 之间的链接。