Skip to main content

4.4.2. 安全关联数据库 (Security Association Database, SAD)

在每个 IPsec 实现中,都有一个名义上的安全关联数据库 (Security Association Database, SAD),其中每个条目定义与一个 SA 关联的参数。每个 SA 在 SAD 中都有一个条目。

SAD 查找机制

出站处理 (Outbound Processing)

对于出站处理,每个 SAD 条目由 SPD 缓存的 SPD-S 部分中的条目指向。

入站处理 (Inbound Processing)

  • 对于单播 SA:SPI 单独使用以查找 SA,或与 IPsec 协议类型结合使用。
  • 如果 IPsec 实现支持多播:使用 SPI 加目标地址,或 SPI 加目标地址和源地址来查找 SA。

(有关映射入站 IPsec 数据报到 SA 必须使用的算法的详细信息,请参见第 4.1 节。)

SAD 条目参数

以下参数与 SAD 中的每个条目相关联。除非另有说明(例如,AH 认证算法),否则它们都应该存在。此描述并非旨在成为 MIB,仅是支持 IPsec 实现中 SA 所需的最小数据项的规范。

选择器填充 (Selector Population)

对于第 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,因此当创建它们的 SPD 条目被更改或删除时,SAD 条目可以保留。
  2. 如果创建了手动密钥 SA,则可能存在与此 SA 对应的 SAD 条目,但不对应任何 SPD 条目。

多播 SA 支持

注意:如果手动配置,SAD 可以支持多播 SA。

出站多播 SA (Outbound Multicast SA)

出站多播 SA 与单播 SA 具有相同的结构。源地址是发送方的地址,目标地址是多播组地址。

入站多播 SA (Inbound Multicast 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 之间的链接。