6.7.3. Keyed MD5 and Meticulous Keyed MD5 Authentication
6.7.3. Keyed MD5 and Meticulous Keyed MD5 Authentication (Keyed MD5 および Meticulous Keyed MD5 認証)
Keyed MD5 および Meticulous Keyed MD5 認証メカニズムは, 他のプロトコルで使用されているものと非常に似ています。これらの認証方法では, 1つ以上の秘密鍵 (対応するキー ID を持つ) が各システムで設定されます。鍵の1つは, 送信 BFD 制御パケット上で計算される MD5 [MD5] ダイジェストに含まれますが, 鍵自体はパケットで運ばれません。リプレイ攻撃を回避するために, シーケンス番号も各パケットで運ばれます。Keyed MD5 の場合, シーケンス番号は時折インクリメントされます。Meticulous Keyed MD5 の場合, シーケンス番号はすべてのパケットでインクリメントされます。
受信システムは, キー ID が設定されている鍵の1つと一致し, 選択された鍵を含む MD5 ダイジェストがパケットで運ばれているものと一致し, シーケンス番号が最後に受信したシーケンス番号以上である (Keyed MD5 の場合), または最後に受信したシーケンス番号より厳密に大きい (Meticulous Keyed MD5 の場合) 場合, パケットを受け入れます。
Keyed MD5 および Meticulous Keyed MD5 認証を使用した送信 (Transmission Using Keyed MD5 and Meticulous Keyed MD5 Authentication)
Auth Type フィールドは 2 (Keyed MD5) または 3 (Meticulous Keyed MD5) に設定されなければなりません (MUST)。Auth Len フィールドは 24 に設定されなければなりません (MUST)。Auth Key ID フィールドは現在の認証鍵の ID に設定されなければなりません (MUST)。Sequence Number フィールドは bfd.XmitAuthSeq に設定されなければなりません (MUST)。
認証鍵値は最大 16 バイトのバイナリ文字列であり, 必要に応じて末尾のゼロバイトでパディングして, Auth Key/Digest フィールドに配置されなければなりません (MUST)。相互運用性のために, 鍵が設定される管理インターフェースは ASCII 文字列を受け入れなければならず (MUST), 任意のバイナリ文字列を16進形式で設定できるようにもすべきです (SHOULD)。他の設定方法がサポートされてもよいです (MAY)。
MD5 ダイジェストは BFD 制御パケット全体に対して計算されなければなりません (MUST)。結果のダイジェストは, 送信前に Auth Key/Digest フィールドに格納されなければなりません (MUST) (パケットで運ばれてはならない (MUST NOT) 秘密鍵を置き換える)。
Keyed MD5 の場合, bfd.XmitAuthSeq は循環的にインクリメントされてもよいです (MAY) (符号なし 32 ビット値として扱われる場合)。bfd.XmitAuthSeq は, セッション状態が変更されたとき, または送信された BFD 制御パケットが以前に送信されたパケットと異なる内容を運ぶときにインクリメントされるべきです (SHOULD)。bfd.XmitAuthSeq をいつインクリメントするかの決定は, この仕様の範囲外です。議論については, 以下の "Security Considerations" というタイトルのセクションを参照してください。
Meticulous Keyed MD5 の場合, bfd.XmitAuthSeq は循環的にインクリメントされなければなりません (MUST) (符号なし 32 ビット値として扱われる場合)。
Keyed MD5 および Meticulous Keyed MD5 認証を使用した受信 (Receipt Using Keyed MD5 and Meticulous Keyed MD5 Authentication)
受信した BFD 制御パケットに認証セクションが含まれていない場合, または Auth Type が正しくない (Keyed MD5 の場合は 2, Meticulous Keyed MD5 の場合は 3) 場合, 受信したパケットは破棄されなければなりません (MUST)。
Auth Key ID フィールドが設定されている認証鍵の ID と一致しない場合, 受信したパケットは破棄されなければなりません (MUST)。
Auth Len フィールドが 24 と等しくない場合, パケットは破棄されなければなりません (MUST)。
bfd.AuthSeqKnown が 1 の場合, Sequence Number フィールドを検査します。Keyed MD5 の場合, シーケンス番号が bfd.RcvAuthSeq から bfd.RcvAuthSeq+(3*Detect Mult) までの範囲 (符号なし 32 ビット循環数空間として扱われる場合, 両端を含む) の外にある場合, 受信したパケットは破棄されなければなりません (MUST)。Meticulous Keyed MD5 の場合, シーケンス番号が bfd.RcvAuthSeq+1 から bfd.RcvAuthSeq+(3*Detect Mult) までの範囲 (符号なし 32 ビット循環数空間として扱われる場合, 両端を含む) の外にある場合, 受信したパケットは破棄されなければなりません (MUST)。
それ以外の場合 (bfd.AuthSeqKnown が 0), bfd.AuthSeqKnown は 1 に設定されなければならず (MUST), bfd.RcvAuthSeq は受信した Sequence Number フィールドの値に設定されなければなりません (MUST)。
Auth Key/Digest フィールドの内容を, 受信した Auth Key ID フィールドによって選択された認証鍵で置き換えます。BFD 制御パケット全体の MD5 ダイジェストが Auth Key/Digest フィールドの受信値と等しい場合, 受信したパケットは受け入れられなければなりません (MUST)。それ以外の場合 (ダイジェストが Auth Key/Digest フィールドと一致しない), 受信したパケットは破棄されなければなりません (MUST)。