6.7.4 密钥SHA1和严格密钥SHA1认证 (Keyed SHA1 and Meticulous Keyed SHA1 Authentication)
密钥SHA1和严格密钥SHA1认证 (Keyed SHA1 and Meticulous Keyed SHA1 Authentication) 机制与其他协议中使用的机制非常相似。在这些认证方法中,在每个系统中配置一个或多个密钥(带有相应的密钥ID)。其中一个密钥包含在对发出的BFD控制报文计算的SHA1 [SHA1] 哈希中,但密钥本身不在报文中携带。为了帮助避免重放攻击,每个报文中还携带一个序列号。对于密钥SHA1,序列号偶尔递增。对于严格密钥SHA1,序列号在每个报文上递增。
如果密钥ID与配置的密钥之一匹配,包含所选密钥的SHA1哈希与报文中携带的哈希匹配,并且序列号大于或等于最后接收的序列号(对于密钥SHA1),或者严格大于最后接收的序列号(对于严格密钥SHA1),则接收系统接受该报文。
使用密钥SHA1和严格密钥SHA1认证的发送 (Transmission Using Keyed SHA1 and Meticulous Keyed SHA1 Authentication)
Auth Type字段必须 (MUST) 设置为4(密钥SHA1)或5(严格密钥SHA1)。Auth Len字段必须 (MUST) 设置为28。Auth Key ID字段必须 (MUST) 设置为当前认证密钥的ID。Sequence Number字段必须 (MUST) 设置为bfd.XmitAuthSeq。
认证密钥值是一个最多20字节的二进制字符串,必须 (MUST) 放置到Auth Key/Hash字段中,必要时用尾随的零字节填充。为了互操作性,配置密钥的管理接口必须 (MUST) 接受ASCII字符串,并且应该 (SHOULD) 还允许以十六进制形式配置任意二进制字符串。可以 (MAY) 支持其他配置方法。
必须 (MUST) 对整个BFD控制报文计算SHA1哈希。生成的哈希必须 (MUST) 在传输之前存储在Auth Key/Hash字段中(替换密钥,密钥不得 (MUST NOT) 在报文中携带)。
对于密钥SHA1,bfd.XmitAuthSeq可以 (MAY) 以循环方式递增(当作为无符号32位值处理时)。当会话状态改变时,或者当传输的BFD控制报文携带与先前传输的报文不同的内容时,应该 (SHOULD) 递增bfd.XmitAuthSeq。何时递增bfd.XmitAuthSeq的决定不在本规范的范围内。有关讨论,请参见下面标题为"安全考虑"的部分。
对于严格密钥SHA1,bfd.XmitAuthSeq必须 (MUST) 以循环方式递增(当作为无符号32位值处理时)。
使用密钥SHA1和严格密钥SHA1认证的接收 (Receipt Using Keyed SHA1 and Meticulous Keyed SHA1 Authentication)
如果接收到的BFD控制报文不包含认证段,或者Auth Type不正确(密钥SHA1为4或严格密钥SHA1为5),则必须 (MUST) 丢弃接收到的报文。
如果Auth Key ID字段与配置的认证密钥的ID不匹配,则必须 (MUST) 丢弃接收到的报文。
如果Auth Len字段不等于28,则必须 (MUST) 丢弃该报文。
如果bfd.AuthSeqKnown为1,则检查Sequence Number字段。对于密钥SHA1,如果序列号位于bfd.RcvAuthSeq到bfd.RcvAuthSeq+(3Detect Mult) 的范围之外(包含,当作为无符号32位循环数字空间处理时),则必须 (MUST) 丢弃接收到的报文。对于严格密钥SHA1,如果序列号位于bfd.RcvAuthSeq+1到bfd.RcvAuthSeq+(3Detect Mult) 的范围之外(包含,当作为无符号32位循环数字空间处理时),则必须 (MUST) 丢弃接收到的报文。
否则(bfd.AuthSeqKnown为0),bfd.AuthSeqKnown必须 (MUST) 设置为1,bfd.RcvAuthSeq必须 (MUST) 设置为接收到的Sequence Number字段的值,并且必须 (MUST) 接受接收到的报文。
用接收到的Auth Key ID字段选择的认证密钥替换Auth Key/Hash字段的内容。如果整个BFD控制报文的SHA1哈希等于接收到的Auth Key/Hash字段的值,则必须 (MUST) 接受接收到的报文。否则(哈希与Auth Key/Hash字段不匹配),必须 (MUST) 丢弃接收到的报文。