ワンキーMAC(OMAC )は、 CBC-MACアルゴリズムによく似たブロック暗号から構成されるメッセージ認証コードのファミリーです。データの真正性、ひいては完全性を保証するために使用できます。2つのバージョンが定義されています。
- 2003年2月のオリジナルOMACは、ほとんど使用されていません。[ 1 ]現在推奨されている名称は「OMAC2」です。[ 2 ]
- OMAC1の改良版[ 2 ]は、2005年5月にCMACという名称でNISTの勧告となった[ 3 ]。
OMACはあらゆる用途で無料で使用できます。特許で保護されていません。[ 4 ]
歴史
CMACアルゴリズムの中核は、BlackとRogawayが「 XCBC」 [ 5 ]という名前で提案および分析し、NISTに提出したCBC-MACの変種である[ 6 ]。XCBCアルゴリズムはCBC-MACのセキュリティ上の欠陥に効率的に対処しているが、3つの鍵が必要である。
岩田と黒澤は、より少ない鍵材料(鍵は1つだけ)を必要とするXCBCの改良版を提案し、その結果得られたアルゴリズムを論文でOne-Key CBC-MAC (OMAC)と名付けた。 [ 1 ]彼らは後にOMACの改良版であるOMAC1(= CMAC)[ 2 ]と追加のセキュリティ分析を提出した。[ 7 ]
アルゴリズム

bビットのブロック暗号 ( E ) と秘密鍵 ( k ) を使用してメッセージ ( m )のℓビット CMAC タグ ( t )を生成するには、まず次のアルゴリズムを使用して 2 つのbビットのサブキー ( k 1とk 2 ) を生成します (これは有限体GF(2 b )におけるxとx 2による乗算に相当します)。≪ は標準の左シフト演算子を表し、⊕ はビットごとの排他的論理和を表します。
- 一時的な値k 0 = E k (0) を計算します。
- msb( k 0 ) = 0 の場合、k 1 = k 0 ≪ 1 となり、そうでない場合はk 1 = ( k 0 ≪ 1) ⊕ Cとなります。ここで、 Cはbのみに依存する定数です。(具体的には、Cは、1 の数が最小となる、辞書式順序で最初の既約次数bのバイナリ多項式の非主係数です。64 ビットの場合は0x1B、128 ビットの場合は0x87、256ビットの場合は0x425となります。)
- msb( k 1 ) = 0の場合、k 2 = k 1 ≪ 1、そうでない場合、k 2 = ( k 1 ≪ 1) ⊕ C。
- MAC生成プロセス用の戻りキー(k 1、k 2 )を返します。
簡単な例として、b = 4、C = 0011 2、k 0 = E k (0) = 0101 2とします。すると、k 1 = 1010 2およびk 2 = 0100 ⊕ 0011 = 0111 2となります。
CMACタグの生成プロセスは以下のとおりです。
- メッセージをbビットのブロックm = m 1 ∥ ... ∥ m n −1 ∥ m nに分割します。ここで、m 1、 ...、m n −1は完全なブロックです。(空のメッセージは1つの不完全なブロックとして扱われます。)
- m n が完全ブロックである場合、 m n ′ = k 1 ⊕ m nであり、そうでない場合はm n ′ = k 2 ⊕ ( m n ∥ 10...0 2 )となります。
- c 0 = 00...0 2とする。
- i = 1, ..., n − 1に対してc i = E k ( c i −1 ⊕ m i )を計算します。
- c n = E k ( c n −1 ⊕ m n ′)
- 出力t = msb ℓ ( c n )。
検証プロセスは以下のとおりです。
- 上記のアルゴリズムを使用してタグを生成してください。
- 生成されたタグが受信したタグと一致することを確認してください。
実装
- Python の
AES_CMAC()実装: " impacket/blob/master/tests/misc/test_crypto.py " での関数の使用法と " impacket/blob/master/impacket/crypto.py "での定義を参照してください[ 9 ] - Rubyによる実装[ 10 ]
参考文献
- 1 2岩田哲、黒澤薫 (2003-02-24)。「OMAC: One-Key CBC MAC」。高速ソフトウェア暗号化。コンピュータサイエンス講義ノート。第2887巻。Springer 、ベルリン、 ハイデルベルク。pp. 129–153。doi : 10.1007 /978-3-540-39887-5_11。ISBN 978-3-540-20449-7。
- 1 2 3岩田哲、黒澤薫 (2003)。「OMAC: One-Key CBC MAC – Addendum」(PDF)。
このノートでは、OMACファミリーのパラメータの新しい選択肢であるOMAC1を提案します(詳細は[4]を参照)。テストベクトルも提示します。したがって、以前のOMACをOMAC2と改名します。(つまり、OMAC2のテストベクトルは既に[3]で示されています。)OMAC1とOMAC2の総称としてOMACを使用します。
- ↑ Dworkin, Morris (2016). "ブロック暗号の動作モードに関する推奨事項: 認証のための CMAC モード" (PDF) . doi : 10.6028/nist.sp.800-38b .
- ↑ロガウェイ、フィリップ。「CMAC:非ライセンス」 。 2020年5月27日取得。
フィリップ・ロガウェイによるCMACの知的財産権に関する声明。
- ↑ Black, John; Rogaway, Phillip (2000年8月20日). Advances in Cryptology – CRYPTO 2000. Springer, Berlin, Heidelberg. pp. 197–215 . doi : 10.1007/3-540-44598-6_12 . ISBN 978-3540445982。
- ↑ Black, J; Rogaway, P. 「CBC MAC を使用した任意長メッセージの処理に関する提案」(PDF)。
- ↑岩田、テツ。黒沢 薫 (2003-12-08)。 「OMAC、TMAC、XCBC のセキュリティ境界の強化」。ヨハンソンでは、トーマス。マイトラ、サブハモイ(編)。暗号学の進歩 - INDOCRYPT 2003。コンピューターサイエンスの講義ノート。 Vol. 2904. シュプリンガー ベルリン ハイデルベルク。402 –415ページ。CiteSeerX 10.1.1.13.8229。土井: 10.1007/978-3-540-24582-7_30。ISBN 9783540206095。
- ↑バウミク、リタム。チャクラボルティ、ビシュワジット。チェ・ウォンソク。ダッタ、アビジット。ゴビンデン、ジェローム。沈耀斌(2024)。「汎用構成へのアプリケーションを使用した MAC のセキュリティのコミット」。レオニードのレイジンにて。ステビラ、ダグラス (編)。暗号学の進歩 – CRYPTO 2024。コンピューターサイエンスの講義ノート。 Vol. 14923. チャム: Springer Nature スイス。 pp. 425–462。土井: 10.1007/978-3-031-68385-5_14。ISBN 978-3-031-68385-5。
- ↑ "Impacket は、ネットワーク プロトコルを操作するための Python クラスのコレクションです。: SecureAuthCorp/impacket"。2018 年 12 月 15 日– GitHub 経由。
- ↑ "AES-CMACキー付きハッシュ関数(RFC 4493)用のRuby C拡張機能:louismullie/cmac-rb"。2016年5月4日– GitHub経由。
外部リンク
- RFC 4493 AES-CMACアルゴリズム
- RFC 4494 AES-CMAC-96アルゴリズムとIPsecにおけるその使用法
- RFC 4615高度暗号化標準 - 暗号ベースメッセージ認証コード - 擬似乱数関数 - 128 (AES-CMAC-PRF-128)
- OMACオンラインテスト
- OMACに関する詳細情報
- Rustによる実装