要約

  • 2013年4月のRFC 6920は、ハッシュのアルゴリズムと値でデジタルな物を識別するNamed Information(ni)URIを定めた。名前の同一性はアルゴリズム、長さ、値で決まり、任意のホスト名は判定から外れる。
  • ni名はHTTP(S)の/.well-known/ni/へ変換できる。サーバーは候補のデータを返し、クライアントが照合する。IANAの登録簿が管理するのはアルゴリズム名と長さであり、保存済みファイルの所在ではない。
  • 名を誰から受け取ったか、どこからバイト列を取得したか、クライアントが照合したかは別々に確かめる必要がある。特定の導入を示すには、日付のある取得記録と計算結果が要る。

場所の名では、中身を固定できない

ウェブのURLは場所を教える。ホストと経路を指定すれば、そこへ問い合わせられる。同じ場所の文書を更新できるのは便利だ。ニュースや案内なら、古いリンクをすべて張り直さずに済む。一方、特定版のプログラムや報告書を渡す場面では、その柔軟さが厄介になる。今日その経路から返ったファイルは、当初指定された版と同じなのか。

ハッシュを識別子に埋め込む試みは以前からあった。しかし書式がばらばらなら、異なる実装は同じ指紋を同じ名前として読めない。RFC 6920はniという書式を示した。アルゴリズム名の後にセミコロンを置き、パディングなしのbase64urlで表したダイジェストを続ける。通常の入力は取得されるはずの物のバイト列である。別の入力を使うなら、その利用プロトコルが指定する。

こうして名前が答える問いが変わる。URLは「どこで尋ねるか」を示し、ハッシュ由来の名前は「どのバイト列を求めるか」を示す。保管先を変えても、データが同じなら名前を維持できる。サーバーが元の経路で別のファイルを出せば、そのファイルの計算値は変わる。クライアントが照合する限り、ホストは同じ場所を使って中身の同一性まで勝手に決められない。

RFC 6920の比較規則は厳密だ。二つのni名について、アルゴリズム、明示された長さ、ダイジェストの値を見る。任意のauthorityやクエリーの属性は同じ物かどうかの判定に入れない。二つのホストが同一のバイト列を届ければ、名前も同一と扱える。ホスト名は探索の手掛かりであり、物の判定者ではない。

受け取りにはホストが戻ってくる

指紋だけではネットワーク上の棚を探せない。RFC 6920はni名をHTTPまたはHTTPSの/.well-known/ni/経路へ写す方法も定めた。niにauthorityがあれば、そのホストを使う。なければアプリケーションが文脈から選べる。取得先はさらにリダイレクトを返せる。到着したデータを名前と照らし合わせて、初めて一連の操作が閉じる。

この変換先に物がある保証はない、とRFCは明記する。正しい指紋が付いた札を持って、空の棚を訪ねることはできる。サーバーが応答しない場合は配布の問題であり、返されたバイト列が一致しない場合は同一性の問題だ。両者を一括して「URLの失敗」と呼ぶと、誰の作業が欠けたのか見えなくなる。

役割は三つに分かれる。名を渡す側は期待するバイト列を選ぶ。配布する側は候補のデータを保存し、問い合わせに応える。クライアントは取得後に計算するかを決める。RFC 6920は名前とデータの結合を常に検査することまでは要求しない。規格が検査の道具を用意しても、プログラムが使わなければ結果は守られない。

文書には、短く運ぶためのバイナリー形式と、読み上げやすいnih形式もある。後者は十六進表記とチェック用の数字を使う。これらは名前の伝え方を変える仕組みであって、ファイルの保存場所を増やす装置ではない。

登録簿はアルゴリズムを載せ、ファイルを置かない

独立した実装が同じ名前を読むには、アルゴリズムの表記と値の長さを共有しなければならない。IANAのNamed Information登録簿は名前、長さ、根拠文書、内容型のct属性を記録する。RFC 6920は完全なSHA-256への対応を求め、長さを名前に表した切り詰め版も認める。短い値ほど衝突の余地が増すため、その長さを隠して扱うわけにはいかない。

登録簿が行うのは語彙の調整だ。あるハッシュ名が載っていても、その値に対応する報告書がIANAに保存されるわけではない。どのホストが持っているかも載らない。この狭い仕事だからこそ、共通の名前を作る機関が個々の内容を支配せずに済む。名前の形式と配布設備の運転は別の責任である。

さらに、計算結果の信頼は最初に受け取った名前の信頼を超えない。RFC 6920の安全性の節はそこを明確にする。攻撃者が危険なファイルと、それに正しく合うハッシュ値を一緒に渡せば、二つは完全に一致する。計算が証明するのは両者の結び付きであり、誰が期待値を選んだかではない。公表されたダイジェストは、推測しやすい内容を探す手掛かりにもなり得る。

公式のRFCとIANA登録簿が示すのは、名前の書式、比較方法、HTTPへの変換だ。特定の製品や保管庫が使った実績を示すには、日付のある名前の受け渡しと、取得・照合の記録が要る。2013年の設計は、サーバーが変わっても同じ物を同じ物として認識できる道を作った。