要約

  • RFC 9841 は Brotli に共有辞書、ラージウィンドウ、フレーミングを加え、圧縮側と展開側に完全に同じ辞書を要求する。
  • 辞書が変われば展開内容も変わり得る。攻撃者が入力を操作してサイズを観測できる場合、辞書とペイロードは双方向に情報を漏らし得る。
  • 実務上の単位は、ペイロード、辞書の暗号学的ハッシュ、出所、適用範囲、有効性、デコーダー版、秘密を圧縮するか否かの判断を束ねた証跡である。

圧縮ファイルのハッシュは一致していた。それでも拠点ごとに復元結果が違ったとしたら、欠けている証跡はどこにあるのか。共有辞書方式では、答えはファイルの外側にある。同じ別名が別の辞書バイトを指せば、ペイロード単体の完全性は意味の完全性を保証しない。

RFC 9841 は 2025 年 9 月に Informational RFC として公開された。公式情報、テキスト版、XML 原稿は Shared Brotli Compressed Data Format を記録する。RFC 7932 の Brotliを拡張するが、製品の採用、安全性、圧縮率を証明する文書ではない。

辞書は復元入力である

共有辞書は LZ77 の履歴バイトを供給し、組み込み静的単語表や変換を置き換え、文脈に応じて組み合わせを選べる。両端が必要とするのは「同名の辞書」ではなく、完全に同一の辞書である。可変 URL や latest という別名では過去の結果を再現できない。

最低限の証跡は、ペイロードのハッシュと辞書の暗号学的ダイジェストを結び、生成元、所有者、承認、対象トラフィック、導入時刻、廃止・ロールバック版、プロファイル、フレーミング、デコーダービルドを残す。複数資源から組み立てるなら、そのレシピも対象になる。Zstandard の RFCと比較すれば、外部辞書の管理が一つの実装だけの問題でないことが分かる。

RFC 9841 の 256 ビット HighwayHash 識別子は、信頼された既知集合の中で識別するためのものだ。敵対環境での衝突耐性は提供しないと明記されている。高速な識別と改ざん証明を混同してはいけない。供給網の境界では SHA-256のような暗号学的ハッシュと来歴が必要になる。

サイズは辞書側の秘密も語る

圧縮では、推測した文字列が秘密と一致したかどうかが出力長に現れることがある。攻撃者が入力の一部を選び、サイズを観測できれば、それがオラクルになる。RFC 7457は CRIME を既知の攻撃として整理し、CVE-2012-4929には公開記録がある。圧縮サイドチャネル研究はより広い攻撃類型を扱う。

RFC 9841 の重要な点は、辞書自身をデータ源に数えることだ。辞書から圧縮対象の情報が漏れ、圧縮対象から辞書の情報が漏れる可能性がある。認証済みページ、顧客文面、内部テンプレートから作った辞書は、「高速化資産」という名前を付けても公開情報にはならない。公開辞書であっても、秘密値と攻撃者入力を同じ文脈で圧縮すれば探索を助け得る。

最も強い対策は、攻撃者が観測できる場所で私的データを圧縮しないことだ。同一オリジン、ドメイン横断の禁止、攻撃者入力の制限、低頻度の辞書更新、文脈分離は有効な緩和策だが、無条件の安全証明ではない。ペイロード、辞書、操作可能な接頭部を先に分類し、その後にバイト削減を評価する。

HTTP は辞書名に欠ける状態を示す

関連する RFC 9842と公式情報は、HTTP 辞書ネゴシエーションと dcb、dcz content coding を定める。Available-Dictionary は SHA-256 を用いる。辞書候補は同一オリジンとレスポンス可読性の条件を満たし、新鮮であるか、明示的に stale 利用が認められていなければならない。必要条件を満たさないレスポンスは破棄される。

この運用は HTTP Semantics、HTTP Caching、stale 応答の制御の上にある。RFC 6265は状態の範囲を考える比較対象になる。RFC 9842 はさらに、辞書ハッシュが追跡トークンになり得るため、Cookie と同等以上のストレージ分割を要求する。

ブラウザーの追跡とキャッシュ分割は、重複を避けて別稿で扱うべき論点だ。本稿の結論は、辞書の同一性にオリジン、可読権限、鮮度、保存区画が含まれるという点に絞る。

IANA は HTTP パラメーターと content coding、HTTP フィールド名の登録簿を公開する。RFC 9651は構造化メタデータの規律を示す。登録は名称の調整であり、実装や安全な設定の証明ではない。

比率を測る前に関連付けを壊す

同じ名前のまま辞書だけ替える。古い版を選ばせる。正しいハッシュを異なるオリジンから提示する。デコーダーを更新する。秘密の隣に選択文字列を置く。展開上限を超え、辞書を消す。閉じて失敗するのか、明示的にフォールバックするのか、異なる内容を返すのかを記録する。

各測定にはペイロードと辞書のハッシュ、プロファイル、フレーミング、ビルド、オリジン、キャッシュ状態が必要だ。圧縮率だけでなく、決定性、メモリー上限、遅延、サイズ変動、復旧も測る。どの辞書が数字を生んだか説明できないベンチマークは運用証拠にならない。

共通標準は最小限の識別子と安全条件を調整し、トラフィック分類、秘密処理、更新周期は現場が決める。実行中のコードがその証跡を出す。中央の規則を万能化せず、同時に現場が依存物を「単なるキャッシュ」と呼んで責任を消すことも許さない構造である。

証拠の限界

本稿はブラウザー、CDN、サーバー、ライブラリー、実辞書を試験していない。圧縮率、CPU、メモリー、漏えい量、攻撃成功率も測っていない。RFC の公開から採用を推定しない。

確認できるのは構造だけだ。復元に必要な外部バイトは成果物の一部であり、サイズを介して秘密と作用する外部バイトは秘密境界の一部でもある。削減効果を採用するなら、この二つの事実を同じ証跡に残さなければならない。

出典