メインコンテンツまでスキップ

1.2. Requirements (要件)

1.2. Requirements (要件)

HTTP は中間者 (intermediary) に対し, さまざまな方法でメッセージを変換することを許容し, 場合によってはそれを要求する. その結果, 受信者は送信者が当初送信したメッセージとビット単位で等価でないメッセージを受け取ることがある. そのような場合, 受信者は送信者の HTTP メッセージの生バイトに対する完全性保護を検証できない. 電子署名または MAC の検証には, 署名者と検証者がまったく同一の署名ベース (signature base) を共有することが必要だからである. メッセージの正確な生バイトは署名ベースの信頼できるソースとしては当てにできないため, 署名者と検証者は, メッセージの意味を変えない安全な変更に耐える仕組みを通じて, それぞれのバージョンのメッセージから独立して署名ベースを作成しなければならない.

さまざまな理由から, 安全な変更と危険な変更を何をもって厳密に定義するかは実務上困難である. アプリケーションは HTTP を幅広く用い, メッセージ内の特定の情報 (メッセージコンテンツ, メソッド, 特定のヘッダフィールドなど) が関連するかどうかで一致しないことがある. したがって, 汎用の解決策は, 署名者にある程度の制御を与え, どのメッセージ構成要素を署名するかを選べるようにする必要がある.

HTTP アプリケーションは, HTTP メッセージへの完全なアクセスや制御を提供しない環境 (Web ブラウザの JavaScript 環境など) で動作しているか, プロトコルの詳細を抽象化するライブラリ (Java HTTP Client (HttpClient) ライブラリ (https://openjdk.java.net/groups/net/httpclient/intro.html) など) を用いていることがある. これらのアプリケーションは, HTTP メッセージの知識が不完全でも署名を生成し検証できなければならない.