4. Exporter Definition (エクスポーター定義)
4. Exporter Definition (エクスポーター定義)
エクスポーターの出力は, TLS セッション, ラベル, およびコンテキスト値に関連付けられた単一のスコープで使用されることを意図しています。
エクスポーターは 3 つの入力値を受け取ります:
-
曖昧さ回避ラベル文字列,
-
エクスポーターを使用するアプリケーションによって提供される関連ごとのコンテキスト値, および
-
長さの値。
コンテキストが提供されない場合, 次のように計算します:
PRF(SecurityParameters.master_secret, label,
SecurityParameters.client_random +
SecurityParameters.server_random
)[length]
コンテキストが提供される場合, 次のように計算します:
PRF(SecurityParameters.master_secret, label,
SecurityParameters.client_random +
SecurityParameters.server_random +
context_value_length + context_value
)[length]
ここで, PRF はセッションで使用される TLS 疑似ランダム関数 (Pseudorandom Function) です。出力は, master_secret から生成された length バイトの疑似ランダムビット文字列です。(この構造により, コンテキスト値を使用しない古いエクスポータータイプの構造との相互運用性が可能になります。例えば [RFC5281])。
ここでのラベルは TLS と同じ定義を持ち, つまり終端 NULL のない ASCII 文字列です。"EXPERIMENTAL" で始まるラベル値は, 登録なしで私的使用に使用してもかまいません。他のすべてのラベル値は, RFC 5226 [RFC5226] で説明されている仕様要求 (Specification Required) を介して登録する必要があります。エクスポーターラベルは既存の PRF ラベルと衝突する可能性があることに注意してください。これを防ぐために, ラベルは "EXPORTER" で始めるべきです。これはすべきである (SHOULD) であり, 必須 (MUST) ではありません。なぜなら, このプレフィックスで始まらないラベルを持つ既存の使用があるためです。
コンテキスト値により, エクスポーターを使用するアプリケーションは, エクスポーター出力のために独自のデータを TLS PRF と混合できます。これが有用となる例の 1 つは, クライアント資格情報が複数の ID に対して有効である認証設定です。コンテキスト値を使用して, 予想される ID を鍵マテリアルに混合し, 置換攻撃を防ぐことができます。コンテキスト値の長さは, コンテキスト値の長さを表す符号なし 16 ビット数量 (uint16; [RFC5246] のセクション 4.4 を参照) としてエンコードされます。コンテキストは長さゼロでもかまいません。コンテキスト値は PRF を介して master_secret と混合されるため, 攻撃者が master_secret を知らない限り, 機密情報をエクスポーターに混合することは安全です。