3. MAC アルゴリズム
- メッセージ認証コード (MAC) アルゴリズム
[RFC9052] のセクション 8.2 には、MAC アルゴリズムの一般的な説明が含まれています。本セクションでは、2つの MAC アルゴリズムの規約を定義します。
3.1. ハッシュベースのメッセージ認証コード (HMACs)
HMAC [RFC2104] [RFC4231] は、伸長攻撃に対処するために設計されました。HMAC アルゴリズムは、ハッシュ関数自体を変更することなく、新しいハッシュ関数を直接組み込めるようにも設計されています。HMAC の設計プロセスは堅牢であることが示されています。MD5 などのハッシュ関数の安全性は時間の経過とともに低下していますが、MD5 と組み合わせた HMAC の安全性はまだ侵害されていないことが示されています [RFC6151]。
HMAC アルゴリズムは、内部および外部パディング、ハッシュ関数 (h)、および認証タグ値の長さによってパラメータ化されます。この仕様では、内部および外部パディングは [RFC2104] で設定された値に固定されます。認証タグの長さは、偽造を作成する難易度に対応します。制約のある環境で使用するために、切り詰められた1つの HMAC アルゴリズムを定義します。現在、切り詰めに関する既知の問題はありませんが、メッセージタグのセキュリティ強度はそれに応じて低下します。切り詰めるときは、左端のタグ長のビットが保持され、送信されます。
このドキュメントで定義されているアルゴリズムは表 3 にあります。
+=============+=======+=========+============+======================+ | 名前 | 値 | ハッシュ| タグ長 | 説明 | +=============+=======+=========+============+======================+ | HMAC | 4 | SHA-256 | 64 | SHA-256 を使用した | | 256/64 | | | | HMAC (64bit切詰) | +-------------+-------+---------+------------+----------------------+ | HMAC | 5 | SHA-256 | 256 | SHA-256 を使用した | | 256/256 | | | | HMAC | +-------------+-------+---------+------------+----------------------+ | HMAC | 6 | SHA-384 | 384 | SHA-384 を使用した | | 384/384 | | | | HMAC | +-------------+-------+---------+------------+----------------------+ | HMAC | 7 | SHA-512 | 512 | SHA-512 を使用した | | 512/512 | | | | HMAC | +-------------+-------+---------+------------+----------------------+
表 3: HMAC アルゴリズム値
一部の受信者アルゴリズムは鍵を転送しますが、他のアルゴリズムは秘密データから鍵を導出します。鍵を転送するアルゴリズム(AES Key Wrap など)の場合、HMAC 鍵のサイズは、基になるハッシュ関数の出力と同じサイズである必要があります (SHOULD)。鍵を導出するアルゴリズム(ECDH など)の場合、導出された鍵は、基になるハッシュ関数の出力と同じサイズでなければなりません (MUST)。
このアルゴリズムに COSE 鍵を使用する場合、以下のチェックが行われます。
-
"kty" フィールドが存在しなければならず (MUST)、"Symmetric" でなければなりません (MUST)。
-
"alg" フィールドが存在する場合、使用されている HMAC アルゴリズムと一致しなければなりません (MUST)。
-
"key_ops" フィールドが存在する場合、HMAC 認証タグを作成するときに "MAC create" を含める必要があります (MUST)。
-
"key_ops" フィールドが存在する場合、HMAC 認証タグを検証するときに "MAC verify" を含める必要があります (MUST)。
MAC 値を作成および検証する実装は、鍵の種類、鍵の長さ、およびアルゴリズムが、関与するエンティティにとって正しく適切であることを検証しなければなりません (MUST)。
3.1.1. HMAC のセキュリティに関する考慮事項
HMAC は、弱体化したハッシュアルゴリズムと一緒に使用された場合でも、攻撃に耐性があることが証明されています。現在知られている最良の攻撃は、鍵に対するブルートフォース攻撃です。これは、鍵のサイズが HMAC 操作のセキュリティに直接関係することを意味します。
3.2. AES メッセージ認証コード (AES-CBC-MAC)
AES-CBC-MAC は、ブロック暗号として AES を使用した CBC-MAC 構成([MAC] で定義)のインスタンス化です。簡潔にするために、AES-CBC-MAC を "AES-MAC" とも呼びます。(これは、AES 暗号ベースのメッセージ認証コード (AES-CMAC) [RFC4493] と同じアルゴリズムではないことに注意してください。)
AES-CBC-MAC は、鍵の長さ、認証タグの長さ、および使用される初期化ベクトル (IV) によってパラメータ化されます。これらすべてのアルゴリズムについて、IV はすべてゼロに固定されています。さまざまな鍵とタグの長さのアルゴリズムの配列を提供します。このドキュメントで定義されているアルゴリズムは表 4 にあります。
+=========+=======+============+============+==================+
| 名前 | 値 | 鍵の長さ | タグ長 | 説明 |
+=========+=======+============+============+==================+
| AES-MAC | 14 | 128 | 64 | AES-MAC 128ビット|
| 128/64 | | | | 鍵、64ビットタグ |
+---------+-------+------------+------------+------------------+
| AES-MAC | 15 | 256 | 64 | AES-MAC 256ビット|
| 256/64 | | | | 鍵、64ビットタグ |
+---------+-------+------------+------------+------------------+
| AES-MAC | 25 | 128 | 128 | AES-MAC 128ビット|
| 128/128 | | | | 鍵、128ビットタグ|
+---------+-------+------------+------------+------------------+
| AES-MAC | 26 | 256 | 128 | AES-MAC 256ビット|
| 256/128 | | | | 鍵、128ビットタグ|
+---------+-------+------------+------------+------------------+
表 4: AES-MAC アルゴリズム値
鍵は、鍵構造または受信者構造のいずれかから取得できます。MAC 値を作成および検証する実装は、鍵の種類、鍵の長さ、およびアルゴリズムが、関与するエンティティにとって正しく適切であることを検証しなければなりません (MUST)。
このアルゴリズムに COSE 鍵を使用する場合、以下のチェックが行われます。
-
"kty" フィールドが存在しなければならず (MUST)、"Symmetric" でなければなりません (MUST)。
-
"alg" フィールドが存在する場合、使用されている AES-MAC アルゴリズムと一致しなければなりません (MUST)。
-
"key_ops" フィールドが存在する場合、AES-MAC 認証タグを作成するときに "MAC create" を含める必要があります (MUST)。
-
"key_ops" フィールドが存在する場合、AES-MAC 認証タグを検証するときに "MAC verify" を含める必要があります (MUST)。
3.2.1. AES-CBC-MAC のセキュリティに関する考慮事項
暗号ブロック連鎖メッセージ認証コード (CBC-MAC) に対して、考慮する必要がある多くの攻撃が存在します。
-
単一の鍵は、固定または既知の長さのメッセージにのみ使用する必要があります。そうでない場合、攻撃者は2つのメッセージとタグのペアを与えられたときに、有効なタグを持つメッセージを生成できます。これは、異なる長さのメッセージに異なる鍵を使用することで対処できます。現在の構造は、長さを含む特定のエンコーディング構造が構築され署名されるため、この問題を軽減します。(CMAC もこの問題に対処します。)
-
暗号ブロック連鎖 (CBC) モードでは、暗号化操作と認証操作の両方に同じ鍵が使用される場合、攻撃者は有効な認証コードを持つメッセージを生成できます。
-
IV が変更可能な場合、メッセージを偽造できます。これは、IV をすべてゼロに固定することで対処されます。