要約

  • RFC 2154 は OSPF LSA ごとに持続する電子署名を付け、Public Key LSA で認証済みルータ鍵を配布し、隣接一ホップを越えて出所と対象バイトの完全性を残した。
  • 証明書は Router ID、役割、広告可能なアドレス範囲を示せても、リンクの実在、メトリックの正しさ、外部経路の承認、宛先到達性は測定しない。
  • 運用上の結論には、信頼アンカー、鍵世代、LSA の鮮度、方針承認、相互確認、SPF、FIB、実パケットの結果を別々に記録する必要がある。

正しい印鑑が、空の接続先を指す

一つの LSA が発信ルータで封印され、複数の中継ルータを通過する。どの受信側でも署名は一致し、保護された内容に改変はない。それでも現地で確認すると、広告された stub ネットワークには何も接続されていない。署名は壊れていない。誤った主張の出所を正確に示している。

1997 年 6 月に Experimental として公開された RFC 2154 は、この違いを OSPF の構造に組み込んだ。従来の暗号認証は隣接ルータ間のパケットを守る。提案は Link State Update の中にある各 LSA を発信ルータの鍵で署名し、伝播先まで同じ証拠を運んだ。Hello や Database Description などのパケット保護とは別の層である。

検証成功が示すのは、対象バイトが Advertising Router に結び付いた鍵から出され、途中で別のルータに改変されていないことだ。中継者は作者にならずに転送できる。しかし、最初から間違っていた内容を正す機能ではない。

鍵にも来歴が必要だった

公鍵を配るだけなら、誰でも任意の Router ID を名乗れる。そこで RFC 2154 は Router Public Key LSA(PKLSA)を導入した。Trusted Entity(TE)が署名する証明書には、Router ID、ルータの役割、許可されたネットワーク範囲、作成時刻、アルゴリズム、公鍵が入る。受信側は TE の認証とルータ自身による PKLSA 署名の両方を確認し、どちらか一方でも失敗すれば捨てる。

ここで信頼は一個の属性ではなく手順になる。TE 公鍵は OSPF の外で設定される。PKLSA は現在の世代でなければならない。LSA は対応するルータ鍵を指定する。鍵より先に到着した LSA は MAX_TRANSIT_DELAY の間だけ待てる。新しい証明済み鍵が旧鍵を置き換えれば、ルータは自己起源 LSA を新しい鍵で出し直し、旧鍵の情報を退場させる。

証明書のアドレス範囲は主張できる領域を制限する。しかしポート状態を見てはいない。メトリックが承認済みか、宛先が存在するかを証言するものでもない。

Age は署名の外側で動く

LSA Age は伝播中に変わるため、通常は署名対象にならない。例外は発信者が MaxAge を設定して作る LSA で、その場合だけ Age まで署名される。発信者は自分の情報を同期的に消去できる一方、中継ルータは他者の署名付き撤回を捏造できない。

発信元が停止した孤児 LSA は、各 LSDB で個別に MaxAge まで古くなり、そこで捨てられる。標準 OSPF の同期的な flush より収束は遅くなる。RFC は削除権限を守るため、その代価を明記した。

したがって「署名は有効」という表示だけでは足りない。どの TE 鍵を信頼したのか。どのルータ鍵世代か。新鍵への移行中ではないか。Age は発信者署名の MaxAge か、それともローカルな経時変化か。暗号計算には、その周辺状態が見えない。

仕様は、正しく署名する誤りを認めていた

第 9 節は残る脆弱性を率直に列挙する。内部ルータは実在するリンクに誤ったメトリックを付け、down のリンクを up と言い、存在しない stub や host route を広告できる。transit link なら相手側の対応する広告が SPF の利用条件になり得るが、stub には確認する反対端がない。

ABR は他エリアや backbone について偽の Summary LSA を生成できる。複数 ABR の照合案は処理量と通信量のため採用されなかった。ASBR の外部経路はさらに難しく、文書は AS 内に広告可能ネットワークを承認する同等の仕組みがないと述べる。

署名は矛盾が見つかった後の帰属を改善するが、矛盾を必ず発見するわけではない。RFC 2154 はデータパケット転送も対象外とした。LSDB と SPF が署名済み情報を正しく扱っても、次ホップがパケットを捨てればサービスは届かない。

一つの判定ではなく、九つの記録

TE 鍵とその導入者、ルータ証明書と許可範囲、鍵世代、LSA の識別子・sequence・対象バイト hash、鍵更新と Age、変更承認、transit の反対端や独立観測、SPF の入力世代、RIB/FIB、最後に宛先別 probe とアプリケーション結果を同じ時間軸に残すべきだ。

RFC Editor、Datatracker、履歴は Experimental 文書の系譜を示し、errataは綴り一か所だけを直す。RFC 2328は OSPFv2 の基礎である。RFC 6039は当時の運用経験がないと報告し、RFC 6863は経路データ保護と packet replay 防御を分離した。RFC 7474は再起動を越えるパケット鮮度という別問題を扱う。期限切れの個人 Internet-Draftは insider 問題を批判したが、IETF の合意ではない。

Heng Lu の Running-Code Primacy、Minimum Initial Specification、Reality Layersは、文書、検証可能な共通条件、実行結果を分けるための公開された編集上の視点であり、RFC 2154 の要求ではない。

出典