要約

  • RFC 3090は、アルゴリズムごとの状態と「実験的に安全」という区分を退け、グローバルに安全、ローカルに安全、非安全という三つの属性を定めた。
  • ただし実際のリゾルバーは、自身のトラストアンカー、対応アルゴリズム、親子境界の証拠、選んだ検証経路から、安全か非安全かを判断した。

ゾーンを署名しても、観測者まで一斉には変わらない

初期DNSSECは、ルートから整然と広がったわけではない。子ゾーンがレコードを署名しても、親が信頼の連鎖を提供しない場合があった。試験参加者のリゾルバーには特定ゾーンの鍵を直接設定できる。一般のリゾルバーにはその起点がない。この状況で「ゾーンは安全」とだけ記録すれば、公開側の作業と検証側の能力を混同する。

RFC 3090は四つの立場を分けた。ゾーン管理者は公開状態を決め、動的更新サーバーは更新後も署名状態を維持する。親ゾーンは子への移行を表し、リゾルバーは手元の材料で検証の成否を決める。子の署名、親の表明、ローカルな信頼設定は、互いに代用できない。

そこでゾーン状態をアルゴリズムごとに分ける考えを廃止し、一つの管理属性にした。「実験的に安全」も不要になった。試験鍵を設定したリゾルバーにはローカルに安全な島であり、それ以外には非安全である。実験という名称は、別種の安全性を生み出してはいなかった。

島を見つけるには、正しい岸から始める必要があった

非安全な親の下にも、連続して署名されたゾーン群を置けた。その最上位の鍵をトラストアンカーとして設定したリゾルバーは、DNSルートから信頼できる鎖がなくても、島の中を下向きに検証できた。

同じ権威データについて、二台の正常なリゾルバーが異なる結論を得る。アンカーを持つ側にはローカルに安全で、持たない側には非安全である。変わったのはゾーンファイルではなく、検証者の状態だった。署名の存在だけでは、任意の相手に信頼経路があるとは証明できない。

複数の起点があると、選択も重要になる。RFC 3090の「最も近いセキュリティルート」は、問い合わせ名と右端から順に最も長く一致する設定済みルートである。遠い起点から始めれば、途中のNULL鍵を見て非安全と判断し、もっと近くに設定された島を見落とし得る。島の重なりは、実装が処理すべき具体的な構成だった。

したがって検証の記録には、応答の署名だけでなく、当時のアンカー集合、起点選択、対応アルゴリズム、取得した経路、時刻、ローカル方針が要る。成功はそれらが組み合わさった一回の出来事であり、ゾーンに永続的に貼られた証明書ではない。

親は、何も置かないことで「安全」を表すことがあった

RFC 2535世代の親子境界には直感に反する規則があった。安全な親に子のKEYが存在しないことが、安全な子を示す場合がある。一方、署名されたNULL鍵は非安全な子を表した。肯定が沈黙になり、否定に署名オブジェクトが残る構造である。

RFC 3090は、この表現を直感的でなく運用上も不快だと認めた。ただし本文で新方式には置き換えず、実装が既存規則を誤読しないよう明確化した。ゆえに単なる欠落を安全の証拠にしてはならない。親が安全であること、欠落が認証された文脈にあること、当時の規則が適用されることを先に確定する必要がある。

後にRFC 3658がDSを導入し、RFC 4033、4034、4035がKEY、SIG、NXTに代わるDNSKEY、RRSIG、NSEC、DSの構成を定めた。現代の用語は進化を説明するが、2001年の記録を当時存在しなかったオブジェクトに読み替える根拠にはならない。

グローバルという名前も、安全の保証書ではなかった

グローバルに安全なゾーンには、必須アルゴリズム、ツリー上の親署名の連鎖、頂点の適切なゾーン署名KEY、NXTの配置、対象RRsetへの署名が必要だった。ローカルに安全なゾーンは、別のアルゴリズムやツリー外の設定済み経路を使えても、署名ゾーンとしての要件を保つ。それ以外が非安全となる。

しかし「グローバル」と「ローカル」は属性であって、実装の規格適合を保証しない。保守的なリゾルバーは前者だけを安全とし、追加機能や設定を持つリゾルバーは後者の一部も安全とする。利用時の出力は結局、安全か非安全かの二値だった。

さらに、規格は誤動作を禁止できても消去はできない。壊れたリゾルバーは不正なデータを受け入れ、侵害された親は運用を止められる。RFC 3090が残したのは万能なラベルではなく、子の公開、親の移行、リゾルバーの設定を別々の責任として結び直す方法だった。

出典

  1. https://www.rfc-editor.org/info/rfc3090
  2. https://www.rfc-editor.org/rfc/rfc3090.html
  3. https://www.rfc-editor.org/rfc/rfc3090.txt
  4. https://datatracker.ietf.org/doc/rfc3090/
  5. https://www.rfc-editor.org/errata/rfc3090
  6. https://www.rfc-editor.org/rfc/rfc2535.html
  7. https://www.rfc-editor.org/rfc/rfc3007.html
  8. https://www.rfc-editor.org/rfc/rfc3008.html
  9. https://www.rfc-editor.org/rfc/rfc3658.html
  10. https://www.rfc-editor.org/rfc/rfc4033.html
  11. https://www.rfc-editor.org/rfc/rfc4034.html
  12. https://www.rfc-editor.org/rfc/rfc4035.html
  13. https://www.rfc-editor.org/rfc/rfc5011.html