4 <- index ->6


5. HMAC およびその擬似乱数関数 English

TLS record 層は、keyed MAC(Message Authentication Code)を、メッセージ integrity を防護するために使う。本書中に定義された cipher suites は、ハッシュ関数に基づく HMAC(described in [HMAC])として知られる construction を使う。他の cipher suites が、それら自体の MAC construction を(必要に応じて)定義する可能性がある(MAY)

さらに、construction には、データのブロックに対して、鍵生成 あるいは検証目的用に secrets の expansion を行うことが要求される。この PRF(pseudorandom function)は、input として、secret、種、および、識別するためのラベルを要し、任意の長さの output を作り出す。

本章において、我々は、HMAC に基づく、ひとつの PRF を定義する。この SHA-256 ハッシュ関数を伴う PRF は、本書および本書以前に発行された TLS 文書において定義された、すべての cipher suites について、TLS 1.2 が交渉されるとき、使われる。新しい cipher suites は、明示的に PRF を規定しなければならない(MUST)。そして、一般に、TLS PRF を SHA-256 もしくは、より強い標準ハッシュ関数と共に使う必要がある(SHOULD)

まず、我々は、単一のハッシュ関数を、secret と seed を任意の品質(quantity)の output に拡張するために使うデータ expansion 関数として P_hash(secret, data) を定義する。:

 
P_hash(secret, seed) = HMAC_hash(secret, A(1) + seed) +
                       HMAC_hash(secret, A(2) + seed) +
                       HMAC_hash(secret, A(3) + seed) + ...

where + は、連結(concatenation)を示す。

A() は、下記のように定義される。:

P_hash は、要求された品質のデータを作り出すのに必要不可欠な数だけ繰り返される可能性がある。例えば、P_SHA256 が 80 byte のデータを作り出すために使われている場合、これは、3 回(A(3) を通じて)繰り返されて、96 byte の output データを作る必要がある。; 最後の繰り返しの最後に 16 byte は、そのとき、80 byte の output データを残して捨てられる。

TLS の PRF は、P_hash を下記のような secret に適用することによって創られた。:

そのラベルは、ASCII 文字列である。これは、length byte もしくは trailing null 文字無しに、これが与えられたところから抽出されるものの中に含められる必要がある。例えば、"slithy toves" というラベルは、下記の byte をハッシュすることによって処理される。:

 


4 <- index -> 6