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

4. 切り捨て (Truncation)

4.1 実装上の注意 (Implementation Note)​

HMAC は、基となるハッシュ関数 H をそのコードを変更せずに使用できるように定義されている。とくに、H は予め定義された初期値 IV (各反復型ハッシュ関数がその圧縮関数を初期化するために規定する固定値) を持つ関数として使用される。暗号学的ハッシュ関数の一般的な実装では、IV はハードコードされた定数として格納される。HMAC を実装するための効率的な方法の 1 つは、この IV を、K XOR opad および K XOR ipad で初期化された内部状態として事前に計算しておくことである。(ただし、この最適化は HMAC の仕様ではなく、実装の詳細である。)

4.2 切り捨て出力 (Truncated Output)​

アプリケーションによっては、HMAC 出力の n バイトのみを使用したい場合がある (n はハッシュ長 L 以下、すなわち n ≦ L とする)。このような切り捨て出力を HMAC の最初の n バイトとすることが推奨される。切り捨てられた HMAC は、元の HMAC と同じ鍵およびテキストに対して一意に決まる。切り捨てられた HMAC は、仕様上 HMAC とは区別して表記するため、HMAC の n バイト切り捨て出力は HMAC-H-t と表記される (ここで H はハッシュ関数、t は出力バイト長)。たとえば、HMAC-MD5 の最初の 8 バイトは HMAC-MD5-80 と表記される (80 はビット長)。

n バイトの切り捨て出力を使用する場合、n は少なくとも 10 バイト (80 ビット) であることが推奨される。これは、ブルートフォース攻撃に対して 80 ビットのセキュリティ強度を提供するためである。10 バイト未満の切り捨ては推奨されない。