1. Introduction (序論)
1. Introduction (序論)
メッセージ完全性 (message integrity) と真正性 (authenticity) は, 多くの HTTP アプリケーションの安全な動作にとって重要なセキュリティ特性である. アプリケーション開発者は通常, アプリケーションを TLS [TLS] 上で動作させることでトランスポート層 (transport layer) にこれらの特性を委ねる. しかし, TLS は単一の TLS 接続にわたってのみこれらを保証し, クライアントとアプリケーションの間の経路は複数の独立した TLS 接続で構成されることがある (例: アプリケーションが TLS 終端ゲートウェイ (TLS-terminating gateway) の背後にある場合, またはクライアントが TLS 検査 (TLS Inspection) アプライアンスの背後にある場合). そのような場合, TLS はクライアントとアプリケーション間のエンドツーエンドのメッセージ完全性または真正性を保証できない. また, 一部の実行環境では TLS の利用 (ブラウザからのクライアント証明書の提示など) や, メッセージ真正性の提供に必要な機能の利用が実務上困難である. さらに, 一部のアプリケーションでは, 使用中の TLS 証明書とは別に, より上位のアプリケーション固有の鍵を HTTP メッセージに束縛する必要がある. したがって, TLS は多くの HTTP ベースのアプリケーションのメッセージ完全性および真正性のニーズを満たし得るが, 普遍的な解決策ではない.
また, ライブラリ, プロキシ, アプリケーションフレームワークが署名または検証の時点でメッセージの一部を改変または隠すため, ワイヤ上で見える HTTP メッセージの知識が不完全なままでも署名を生成し検証できる必要があるアプリケーションが多い. これらのアプリケーションは, レイヤリング (layering) と抽象化を破らずに, アプリケーションにとって最も関連のあるメッセージ部分を保護する手段を必要とする.
最後に, JSON Web Signature (JWS) [JWS] のようなオブジェクトベースの署名の仕組みは, 署名された正確な情報が無改変で伝達されることを要する. そのような技術を HTTP メッセージに適用するとき, HTTP メッセージの要素をハッシュの含有を通じて直接または間接的にオブジェクトペイロードに複製する必要がある. この慣行は複雑さを招き, 署名検証時に繰り返し情報の一貫性を慎重に確認する必要がある.
本書は, HTTP メッセージにデタッチ署名 (detached signature) を用いることで, HTTP メッセージの構成要素に対するエンドツーエンドの完全性と真正性を提供する仕組みを定義する. 本仕組みにより, アプリケーションはメッセージのうちアプリケーションにとって意味があり適切な構成要素だけに, 電子署名 (digital signature) またはメッセージ認証コード (message authentication code, MAC) をかけられる. 厳密な正規化 (canonicalization) 規則により, メッセージが HTTP で許容される多くの方法で変換された後でも検証者は署名を検証できる.
本書で記述する署名の仕組みは次の 3 部からなる.
-
署名ベース (signature base) の作成に用いる, HTTP メッセージのさまざまなプロトコル要素およびその他の構成要素に対する共通の用語と正規化規則の集合 (セクション 2).
-
この署名ベースを通じて暗号プリミティブを適用し, HTTP メッセージ構成要素に対する署名の生成と検証を行うアルゴリズム (セクション 3).
-
HTTP メッセージに署名と関連メタデータを付与し, HTTP メッセージから付与された署名とメタデータをパースするための仕組み. これを容易にするため, 本書は
Signature-InputおよびSignatureフィールドを定義する (セクション 4).
本書はまた, Accept-Signature フィールド (セクション 5) により, 1 つ以上の後続メッセージでの署名利用を交渉する手段を提供する. この任意の交渉の仕組みは, 当事者いずれかによる機会主義的またはアプリケーション駆動のメッセージ署名と併用してよい.
本書で定義する仕組みは, アプリケーションの全体的なセキュリティ機構を構築するうえで重要な道具である. 本キットは強力な能力を提供するが, それだけで全体的なセキュリティ上の物語を完成させるには十分ではない. 特に, セクション 1.4 に列挙する要件とセクション 7 で論じるセキュリティに関する考慮事項は, 本仕様のすべての実装者にとって極めて重要である. 例えば, 本仕様は HTTP メッセージコンテンツ (message content) ([HTTP] のセクション 6.4 で定義) を直接被覆する手段は定義しない, その代わり, セクション 7.2.8 で論じるとおり, メッセージコンテンツのハッシュを提供する Digest 仕様 [DIGEST] に依存する.