要約

  • RFC 1309 は1992年3月に刊行された FYI 14/Informational の技術概説であり、インターネット標準ではない。X.500 が各参加サイトに局所情報の管理を委ねながら、利用者には均質な世界規模の名前空間を示す仕組みを説明した。
  • 問い合わせは DUA から DSA に渡り、必要に応じてチェイニングまたは紹介を経る。別名解決やローカルの複製が加われば、同じ表示結果にも異なる到達経路と保管履歴があり得る。
  • エントリーは人、組織、ネットワークなどのオブジェクトについて属性を記すもので、オブジェクトそのものではない。DN は DIT 上の経路であり、本人性、所有権、法的権限を保証する識別証ではない。
  • 認証と ACL は操作の境界を定め、検索件数の制限は返却範囲を狭める。許可された検索が成功しても、内容の真実性、複製の鮮度、検索の網羅性、現実世界の結果までは確定しない。

問い合わせを一通、投函してみる

RFC 1309 が描く世界を理解するには、画面に出た最終行からではなく、利用者が問い合わせを出すところから始めるとよい。利用者のために動くのが Directory User Agent、DUA である。DUA は Directory System Agent、DSA のアクセス点へ操作を渡す。DSA は Directory Information Base、DIB の全体ではなく、その一部分を保持する。

最初の DSA が必要な情報を持っていれば、話は短い。しかし情報が遠隔にある場合、二つの進み方がある。チェイニングでは、受け取った DSA が別の DSA に処理をつなぎ、利用者側からは連続した一つのサービスに見せる。紹介では、次に問い合わせるべきアクセス点が返され、DUA が新たな相手へ進む。どちらも分散を利用者から遠ざける技法だが、誰が次の操作を発行したか、どこに失敗が記録されるかは同じではない。

この中継によって、世界中のディレクトリが机上に置かれたかのような経験が生まれる。けれども、机上に現れたのは DIB の物理的な集合ではなく、一連の処理が組み立てた眺めである。最初の窓口が全情報を保有していたわけではなく、最後に属性を返した場所が唯一の正規入口だったとも限らない。

X.500 が狙ったのは、この構成を欠点として消すことではなかった。各サイトが自分の局所部分に責任を持つことで、中央のプロセッサ、ストレージ、更新作業をボトルネックにしない。その一方で利用者は共通の名前空間と、属性を使った豊かな検索を利用できる。分散した保守と統一した閲覧を両立させることこそ、設計の中心だった。

名簿の行と、名簿に載るもの

検索の旅を追う前に、到着先の意味を限定しておく必要がある。X.500 の基本単位はエントリーであり、一つのオブジェクトについての情報を属性として保持する。オブジェクトの例には人、組織、ネットワークが挙げられる。エントリーはそれらを記述するが、それらと同一ではない。

人について書かれた一行は、人間そのものではない。組織の属性群は、組織の法的存在でも意思でもない。ネットワークを記述する値は、パケットが通ったという観測ではない。この区別があるから、エントリーの存在、現実のオブジェクトの存在、属性値の正しさ、値の新しさを別々に検討できる。

各エントリーには一つ以上の objectClass が宣言され、クラス定義が必須属性と任意属性を定め、継承も可能にする。これによって受け手はレコードの形を解釈できる。だが、形が正しいことと、記載内容が事実であることは別だ。必須欄がすべて埋まった人物エントリーでも、その連絡先が現在有効か、本人が値を承認したかはクラス定義から分からない。

RFC はデータベースのレコードにたとえて説明する一方、X.500 は汎用データベースでも DBMS でもないと明言した。当時、理想的な DIT やオブジェクト木の形には明確な合意がなく、新しい属性や型の配布は手作業で、標準化された出力形式もレポート生成器もなかった。整った検索面は、情報管理全般が解決済みであることを意味しなかった。

DN は身分証ではなく、木の中の道順である

Directory Information Tree、DIT では、各エントリーが木のどこかに置かれる。同じ階層でその項目を区別するのが Relative Distinguished Name、RDN であり、根から目的のエントリーまでの RDN を順に連ねたものが Distinguished Name、DN になる。

DN が記録するのは、ある名前付けの木における位置と文脈である。階層が国、組織、部門、人物のように読めると、それ自体が公的な本人確認に見えやすい。しかし RFC 1309 は、DN を生体識別子、認証資格、法的身分、資源の所有証明として定義していない。道順が正式に見えることと、到着先が現実の主体によって権威付けられていることは同じではない。

さらに、X.500 には別名エントリーがある。一つの DN に置かれた別名が、別の DN のエントリーを指すことができる。これは、玄関が二つあっても建物が二棟になるわけではない、という構造である。別名のエントリー、別名が指す DN、実際の対象エントリーは、それぞれ記録して初めて関係が分かる。

別名から同じ対象に着いたからといって、どちらの経路が唯一の権威を持つとは限らない。反対に、別名の参照先が変われば、同じ入口から違う対象へ着く可能性もある。画面に最後の名称だけを残すと、検索者がどの入口を使い、別名がどこへ解決され、どの時点の対象を見たのかが失われる。

一つの答えに複数の経路がある

DUA と DSA の分離、チェイニングと紹介、DN と別名を合わせると、検索結果は単独の事実ではなく、経路を持つ観測になる。ある DUA が DSA A に出した要求を A が DSA B へつなぐ場合と、A の紹介を受けた DUA が B に出し直す場合では、最終表示が似ていても操作の系列が異なる。

別の入口から始めれば、DSA が知っている命名文脈や次のアクセス点も変わり得る。別名を使うか正規 DN を使うかでも、途中の記録は変わる。一度成功した経路は、その経路がその時点で結果を返せたことを示すにとどまる。ほかの入口が同じ結果を返すこと、経路が一意であること、理論上可能なすべての DSA が実際に使われたことは示さない。

したがって、監査可能な検索には、DUA の要求、受信 DSA、チェイニング先または紹介先、別名の解決、最後に参照したエントリーを別々に残す必要がある。経路を記録していないのに、後から「このサーバーが答えた」「この順序で照会された」と断定すれば、アーキテクチャ上の可能性を実際の観測にすり替えることになる。

RFC 1309 が挙げた国家規模のパイロット、WHOIS や資源探索に関する作業、ミシガン大学のキャンパス・ディレクトリとメール転送、Sprint の X.400 アドレス管理も同じ読み方を要する。これらは1992年の概説が用途として報告した歴史的事実であり、現在の稼働、個別要求の成功、完全な普及を証明する現況報告ではない。

近くにあるコピーは、遠くの原本ではない

分散保守では、組織がローカル DSA を運用し、自組織の情報をマスターできる。誰が日常的に更新するかがデータの近くに置かれ、世界規模の中央管理者を必要としない。これは X.500 の自治性を支える重要な保管関係である。

一方、QUIPU の複製では、頻繁に参照する外部情報をローカル DSA にスレーブとして置き、遠隔 DSA のマスターデータから自動更新できる。利用者は遠隔通信の一部を避けて素早く読めるが、読んだ場所がマスターになったわけではない。

この場面では、同じ属性値に少なくとも二つの時刻が重なる。マスター側で値が成立した時刻と、複製側がその値を受け取った時刻である。自動更新という設計説明だけでは、特定の読み出し時に同期が完了していたことは分からない。マスターの所在、複製の更新履歴、最後の成功時刻、問い合わせが実際に利用したコピーを結んで初めて鮮度を評価できる。

複製は可用性を高めるが、可用性は鮮度の別名ではない。遠隔のマスターに届かなくてもローカルコピーが答えることはあり得るし、答えが返ったまま更新が遅れていることもあり得る。「検索成功」という一語では、この二つの状態を分けられない。そしてマスターと一致していたとしても、その一致は現実世界のオブジェクトが真にその状態であることまで保証しない。

鍵が開いたことは、記述が真実であることではない

1988年の標準について、RFC 1309 は利用者またはプロセスが DUA を通じて操作を試みる際の単純なパスワード認証と、強い暗号学的認証を説明した。QUIPU はさらに、属性ごとに detect、compare、read、modify の権限を与える ACL を備えていた。

認証結果が支えるのは、ある資格情報が操作の入口でどう扱われたかである。ACL 決定が支えるのは、ある主体に特定操作が許可または拒否されたことだ。読める属性が正しいとは限らず、変更できる人物が現実の組織や資源を所有しているとも限らない。鍵が本物でも、部屋に置かれた文書の内容まで自動的に真実にはならない。

また、アクセス権は結果の見え方を変える。detect はできても read はできない、compare はできても値そのものは受け取れない、といった境界があれば、二人の利用者が同じ検索式を使っても同じ視野を持つとは限らない。見えないことを不存在と読み替える前に、認証結果と属性単位の ACL 決定を検索結果から分離すべきである。

千件の一致と、二十件の表示

RFC 1309 は分散検索の魅力だけでなく、遅さと不完全さの条件も記している。ネットワーク遅延、部分結果のキャッシュ、実装性能が検索時間に影響し、大量収集を防ぐため管理上の返却件数制限を設ける実装もあり得た。例では、一千件が一致しても二十件しか表示されず、利用者は検索条件を狭めるよう求められる。

ここで二十件は一千件の要約ではない。ある管理限界の内側で返された部分である。結果が一件でも得られたことは、検索が完走した証拠にならない。ゼロ件であっても、世界に対象が存在しないと直ちに言えない。問い合わせ範囲、到達できた DSA、アクセス権、キャッシュ、時間や件数の制限を確認しなければ、表示件数を母集団の大きさに変換できない。

この限定は、世界ディレクトリという言葉を弱めるのではなく、正確にする。X.500 が提供したのは、分散した情報を一つの名前空間から探索する能力である。あらゆる要求が全 DIB を走査し、最新の完全な真実を返すという約束ではない。

答えを、答えの履歴へ戻す

一行の検索結果を根拠として使うなら、その一行を生成履歴へ戻さなければならない。記述対象のオブジェクト、エントリー、属性と構文、objectClass、RDN と DN、別名と対象、DUA の操作、受信 DSA、チェイニングまたは紹介、マスターか複製か、複製更新の状態、認証結果、ACL 決定、返却集合と制限表示を分けて保存する。

各記録には固有の動詞がある。エントリーは「記述する」。DN は「位置を示す」。別名は「指す」。DSA は「保持し、処理する」。複製は「ある時点のマスターを写す」。認証は「資格情報を検査する」。ACL は「操作を許可する」。検索結果は「今回見えたものを返す」。これらの動詞を「本人である」「所有する」「すべてである」「成功した」に置き換えるには、別種の証拠が必要だ。

一つに見えることは、分散設計の失敗ではなく成果だった。だからこそ、その成果を証拠の短絡に使ってはならない。RFC 1309 が示した世界ディレクトリは、一台の機械に世界を閉じ込める構想ではない。異なる保管者の記録を、経路と制約を介して同じ机に届ける構想である。見事な一冊に見えたときほど、どの書架から、どの版が、どの許可で届いたかを尋ねる必要がある。

情報源と証拠の限界

本稿が用いる公式情報源は、RFC Editor の RFC 1309 のみである。同文書は1992年3月の FYI 14/Informational の概説で、X.500 のエントリー、属性、オブジェクトクラス、DIT、RDN/DN、別名、DUA/DSA、チェイニング、紹介、ローカル・マスター、QUIPU の複製と ACL、検索制限、非 DBMS 境界、当時の用途を裏付ける。現在の導入、特定の照会経路、複製の鮮度、完全検索、本人性、所有権、権威、メール配送その他の結果は裏付けない。本稿の論点は RFC 1274 のスキーマ、RFC 1292 の実装一覧、RFC 1295 の公共ディレクトリに関する権利とは区別している。