跳到主要内容

Appendix E. 分配 Link State ID 的算法 (Algorithm for Assigning Link State IDs)

    0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| 0 | Key ID | Auth Data Len |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Cryptographic sequence number |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+

Figure 18: 使用 Cryptographic Authentication 时
OSPF 报文头部中 Authentication 字段的用法

每当邻居状态转换为 "Down" 时执行. 每当 OSPF 报文被接受为真实时, cryptographic sequence number 会设置为收到报文的 sequence number.

本规范不为 cryptographic sequence number 提供回绕过程. 当路由器正在发送的 cryptographic sequence number 达到最大值时, 路由器应把它正在发送的 cryptographic sequence number 重置为 0. 完成后, 路由器的邻居将在 RouterDeadInterval 期间拒绝该路由器的 OSPF 报文, 随后该路由器将被迫在该接口上重新建立所有邻接关系. 不过, 预计许多实现会使用 "seconds since reboot" (或 "seconds since 1960" 等) 作为 cryptographic sequence number. 这样的选择基本上会防止回绕, 因为 cryptographic sequence number 字段长度为 32 位.

OSPF Cryptographic authentication 选项不提供保密性.

使用 cryptographic authentication 时, 标准 OSPF 报文头部中的 64 位 Authentication 字段按 Figure 18 所示重新定义. 新字段定义如下:


Key ID
此字段标识用于创建附加到 OSPF 报文的 message digest 的算法和 secret key. Key Identifiers 在每个接口内唯一, 或等价地说, 在每个子网内唯一.

Auth Data Len
附加到 OSPF 报文的 message digest 的字节长度.

Cryptographic sequence number
一个无符号 32 位非递减序列号. 用于防范 replay attacks.

附加到 OSPF 报文的 message digest 实际上不被视为 OSPF 协议报文的一部分: message digest 不包含在 OSPF 头部的 packet length 中, 但包含在报文的 IP header length 字段中.

每个密钥由 interface 和 Key ID 的组合标识. 一个接口在任意时刻可以有多个活动密钥. 这使从一个密钥平滑过渡到另一个密钥成为可能. 每个密钥有四个与之关联的时间常量. 这些时间常量可以用一天中的时间时钟表示, 也可以用路由器本地时钟表示, 例如自上次重启以来的秒数:

KeyStartAccept
路由器开始接受使用给定密钥创建的报文的时间.

KeyStartGenerate
路由器开始使用该密钥生成报文的时间.

KeyStopGenerate
路由器停止使用该密钥生成报文的时间.

KeyStopAccept
路由器停止接受使用给定密钥创建的报文的时间.


为了实现平滑密钥过渡, KeyStartAccept 应小于 KeyStartGenerate, 且 KeyStopGenerate 应小于 KeyStopAccept. 如果 KeyStopGenerate 和 KeyStopAccept 未指定, 则密钥生命周期为无限. 当新密钥替换旧密钥时, 新密钥的 KeyStartGenerate 时间必须小于或等于旧密钥的 KeyStopGenerate 时间.

密钥存储应在系统重启后保持, 无论是 warm restart 还是 cold restart, 以避免操作问题. 如果与接口关联的最后一个密钥过期, 回退到未认证状态是不可接受的, 中断路由也不建议. 因此, 路由器应向网络管理员发送 "last authentication key expiration" 通知, 并将该密钥视为具有无限生命周期, 直到生命周期被延长、密钥被网络管理删除, 或配置了新密钥.

D.4 报文生成 (Message generation)

构建 OSPF 报文内容后, 在发送报文之前, 会调用发送接口 Autype 值所指示的认证过程. 认证过程按如下方式修改 OSPF 报文.

D.4.1 生成 Null authentication

使用 Null authentication 时, 报文按如下方式修改:

(1) 标准 OSPF 头部中的 Autype 字段设置为 0.

(2) 标准 OSPF 头部中的 checksum 字段设置为整个报文内容的标准 IP checksum, 从 OSPF 报文头部开始, 但排除 64 位 authentication 字段. 该 checksum 计算为报文中除 authentication 字段外所有 16 位字的反码和的 16 位反码. 如果报文长度不是 16 位字的整数倍, 则在校验和计算前用一个零字节填充报文.

D.4.2 生成 Simple password authentication

使用 Simple password authentication 时, 报文按如下方式修改:

(1) 标准 OSPF 头部中的 Autype 字段设置为 1.

(2) 标准 OSPF 头部中的 checksum 字段设置为整个报文内容的标准 IP checksum, 从 OSPF 报文头部开始, 但排除 64 位 authentication 字段. 该 checksum 计算为报文中除 authentication 字段外所有 16 位字的反码和的 16 位反码. 如果报文长度不是 16 位字的整数倍, 则在校验和计算前用一个零字节填充报文.

(3) OSPF 报文头部中的 64 位 authentication 字段设置为为该接口配置的 64 位 password, 即 authentication key.

D.4.3 生成 Cryptographic authentication

使用 Cryptographic authentication 时, 接口可能配置了多个密钥. 在这种情况下, 在对报文生成有效的密钥中, 即 KeyStartGenerate <= current time < KeyStopGenerate, 选择 KeyStartGenerate 时间最新的密钥. 使用该密钥, 按如下方式修改报文:

(1) 标准 OSPF 头部中的 Autype 字段设置为 2.