← ホームへ戻る

ISO/IEC 9797-1 メッセージ認証コード(MAC)の仕組みと規格解説

🗓 2026年8月13日

データの正当性と完全性を保証するための重要な技術であるメッセージ認証コード(MAC)。その国際的な標準規格の一つが「ISO/IEC 9797-1」です。この規格は、特定の単一アルゴリズムを規定するのではなく、ブロック暗号を用いたMACを構築するための汎用的なモデルを定義しています。

共通鍵(対称鍵)を用いたブロック暗号をベースとするこのモデルにより、利用者は用途に応じて柔軟にアルゴリズムを構成できます。ただし、モデル形式であるため、実装時には計算結果に齟齬が出ないよう、使用するパラメータやオプションを厳密に指定する必要があります。

Key Facts

  • 汎用モデルの提供:特定のアルゴリズムではなく、MACを構築するためのフレームワークを定義している。
  • ブロック暗号ベース:共通鍵を用いたブロック暗号を基盤として動作する。
  • 柔軟な構成:パディング、初期変換、出力変換の各ステップで複数の選択肢が用意されている。
  • 標準アルゴリズム:実用的な組み合わせとして「MAC Algorithm 1」から「6」までが定義されている。
  • 完全な仕様定義:暗号アルゴリズム、パディング法、MACアルゴリズム、出力長、鍵派生法の指定が必須となる。

MAC生成の基本プロセス

ISO/IEC 9797-1で定義されているMACの生成は、大きく分けて以下の6つのステップで構成されます。

  1. パディング:データをブロック暗号のサイズに合わせる処理。
  2. 分割:パディング後のデータを一定のブロックサイズに切り分ける。
  3. 初期変換:最初のデータブロックに対して行う暗号操作。
  4. 反復処理:残りのブロックを順次処理し、中間値を更新する。
  5. 出力変換:最終的な計算結果に対して行う仕上げの暗号操作。
  6. 切り詰め(トランケーション):必要なビット長まで結果を短縮する。

多くのステップにおいて複数のオプションが提供されており、これらを組み合わせることで異なるセキュリティ特性を持つMACを実現します。

パディングの手法

ブロック暗号は固定長のデータを扱うため、入力データがブロックサイズの倍数でない場合にパディング(穴埋め)が必要です。本規格では以下の3つの手法を定義しています(nをブロック長とする)。

  • 手法1:データ末尾に0ビットを付け加え、nの倍数にする(既に倍数の場合は何もしない)。
  • 手法2:まず1ビットの「1」を付け加え、その後nの倍数になるまで0ビットを補完する。
  • 手法3:先頭に元のデータ長(nビットのビッグエンディアン形式)を配置し、次に元のデータを置き、最後にnの倍数になるまで0ビットを付け加える。

変換と反復のメカニズム

パディングされ分割されたデータ(D1, D2...Dq)は、まず初期変換にかけられます。ここでは、鍵Kで暗号化するシンプルな方法(変換1)や、2つの鍵を用いて二重に暗号化する方法(変換2)が選べます。

その後、2番目以降のブロックに対して反復処理が行われます。具体的には、現在のデータブロックと直前の処理結果(H)の排他的論理和(XOR)をとり、それを鍵Kで暗号化することで次の中間値を算出します。データが1ブロックのみの場合は、この工程はスキップされます。

最後に、出力変換によって最終的なブロックGが生成されます。そのまま出力する方法(変換1)、別の鍵K'で暗号化する方法(変換2)、あるいは復号後に再暗号化する方法(変換3)が定義されています。

定義済みのMACアルゴリズム

規格では、利便性のために推奨される組み合わせを「MAC Algorithm 1〜6」として定義しています。

MACアルゴリズムの構成一覧
アルゴリズム名 初期変換 出力変換 主な特徴・別名
Algorithm 1 変換1 変換1 CBC-MACとして知られる。鍵は1つ。
Algorithm 2 変換1 変換2 2つの鍵を使用(K'はKから派生可能)。
Algorithm 3 変換1 変換3 Retail MACとして知られる。独立した2つの鍵が必要。
Algorithm 4 変換2 変換2 独立した2つの鍵と、派生鍵K''を使用。
Algorithm 5 - - CMACとして知られる。Algorithm 1を2回並列実行しXOR。
Algorithm 6 - - Algorithm 4を2回並列実行しXOR。

鍵派生について

Algorithm 2, 4, 5, 6では、ベースとなる鍵から別の鍵を生成する鍵派生が必要になります。規格では特定の派生手法を強制していませんが、派生後の鍵同士が異なるものであることを求めています。例として、鍵の特定のビット列を反転させる(各バイトを0xF0でXORする)といった手法が挙げられています。

セキュリティ分析と実装上の注意

本規格の附属書Bでは、各アルゴリズムの耐性が分析されています。具体的には、鍵を特定しようとする「鍵リカバリ攻撃」、総当たりによる「ブルートフォース攻撃」、そして衝突を狙う「バースデー攻撃」などの暗号学的攻撃に対する耐性が評価されています。

実装者は、単に「ISO/IEC 9797-1準拠」とするのではなく、使用するブロック暗号の種類、パディング手法、アルゴリズム番号、出力ビット長、および鍵派生メソッドをすべて明記しなければ、受信側で正しくMACを検証することができません。

Frequently Asked Questions

ISO/IEC 9797-1は特定の暗号アルゴリズムを規定していますか?

いいえ。この規格はMACを計算するための「モデル(枠組み)」を定義したものであり、具体的なブロック暗号(AESやDESなど)の選択は利用者に委ねられています。

CBC-MACはこの規格に含まれていますか?

はい。規格内で定義されている「MAC Algorithm 1」が、一般的にCBC-MACとして知られている手法に相当します。

パディングビットを送信する必要がありますか?

いいえ。受信側が元のデータの長さと使用されたパディング手法を知っていれば、パディングビットを再生成できるため、送信や保存をする必要はありません。

CMACとはどのような仕組みですか?

規格内の「MAC Algorithm 5」に該当します。元のデータと、ガロア体での乗算を用いて生成した鍵バリアントを用いたデータの2つのインスタンスでAlgorithm 1を実行し、その結果をXORすることで算出します。

MACの長さを自由に変更できますか?

はい。最終ステップの「切り詰め(トランケーション)」により、計算結果の左側から必要なビット数だけを抽出してMACとして利用することが可能です。

References

  1. ISO/IEC 9797-1:2011 Information technology – Security techniques – Message Authentication Codes (MACs) – Part 1: Mechanisms using a block cipher
  2. "FIPS PUB 113 - Computer Data Authentication". . Archived from the original on 2011-09-27. Retrieved 2011-10-01.
  3. ISO/IEC 9797-1:2011 Information technology – Security techniques – Message Authentication Codes (MACs) – Part 1: Mechanisms using a block cipher, Introduction
  4. ISO/IEC 9797-1 Information technology – Security techniques – Message Authentication Codes (MACs) – Part 1: Mechanisms using a block cipher. International Organization for Standardization. 2011. p. 11.
  5. ISO/IEC 9797-1 Information technology – Security techniques – Message Authentication Codes (MACs) – Part 1: Mechanisms using a block cipher. International Organization for Standardization. 2011. p. 12.
  6. ISO/IEC 9797-1 Information technology – Security techniques – Message Authentication Codes (MACs) – Part 1: Mechanisms using a block cipher. International Organization for Standardization. 2011. p. 13.
  7. ISO/IEC 9797-1:1999 Information technology -- Security techniques -- Message Authentication Codes (MACs) -- Part 1: Mechanisms using a block cipher — Superseded by ISO/IEC 9797-1:2011, which (according to the latter's Foreword) has a different algorithm 6.