http://en.wikipedia.org/wiki/CMAC
http://www.rfc-archive.org/getrfc.php?rfc=4493
K1 と K2 の 2 つのキーがあります。メッセージ 1 が 10^127 (1 と 127 のゼロ) と異なる以外に、他の理由はありますか?
メッセージが長さを運ぶ場合 (そして長さも CMAC で処理されたメッセージの場合)、ランダムに生成された K を 1 つだけ使用するセキュリティ上の弱点はありますか?
http://en.wikipedia.org/wiki/CMAC
http://www.rfc-archive.org/getrfc.php?rfc=4493
K1 と K2 の 2 つのキーがあります。メッセージ 1 が 10^127 (1 と 127 のゼロ) と異なる以外に、他の理由はありますか?
メッセージが長さを運ぶ場合 (そして長さも CMAC で処理されたメッセージの場合)、ランダムに生成された K を 1 つだけ使用するセキュリティ上の弱点はありますか?
まず第一に、AES-CMAC には実際にはキーKが 1 つしかありません。最後の質問に対処するために生成する必要があるのはこれだけであり、それは仕様で明示的に述べられています。
サブキー生成アルゴリズムである Generate_Subkey() は、AES-128 のキーである秘密キー K を取ります。
あなたの他の質問 - なぜ K から K1 と K2 を生成する必要があるのですか -答えるのは少し難しいですが、実際には非常に簡単な説明があります.メッセージ認証のあいまいさを排除するためです.
説明のために、ウィキの記事からバイナリ キーを取得するとします: K1 = 0101 およびK2 = 0111. 次に、メッセージM = 0101 011で遊んでみましょう. Mは完全なブロック (4 ビットではなく 3 ビット) で構成されていないため、私たちはそれを埋めなければなりません。これで、M' = 0101 0111 になりました。
このメッセージの MAC を生成するには、以下のキーを XOR するだけです。
M' = 0101 0111
K1 = 0101
K2 = 0111
MAC = 0000 0000
両方のケースでK1を使用した場合、次の手順になります。
M' = 0101 0111
K1 = 0101
K1 = 0101
MAC = 0000 0010
これで問題ありませんが、 M'' = 0101 0111 (つまり、パディングされたメッセージ M 'と同じ、パディングされていないメッセージM'' )の MAC を生成しようとするとどうなるかを見てください。
M'' = 0101 0111
K1 = 0101
K1 = 0101
MAC = 0000 0010
2 つの異なるメッセージから同じ MAC を生成しました! 2 番目のキー (これには、 K1に問題が「似ている」ことを防ぐいくつかの数論的特性があります) を使用すると、そのようなあいまいさが防止されます。
私はそれが既知の平文攻撃と関係があるとは思わないし、対称暗号がそれらの影響を受けやすいことに同意しない. 暗号が安全である条件の 1 つは、KPA、CPA (選択平文攻撃)、および CCA (選択暗号文攻撃) の下で安全であることです。
私があなたの質問を理解していない限り、はい、両方のサブキーが必要です。K2 は、ブロックが完全なブロックでない場合に使用されます。. K1 と K2 はランダムに生成されたものではなく、K から派生したものです。これらのサブキーを生成したくない理由はありますか?
連鎖モードに基づく認証コードには多くの弱点があります。CBC-MAC は、固定サイズのメッセージに対してのみ安全であることが証明されています。最後のブロックが埋め込まれている可変長メッセージのセキュリティは完全に失敗します。
XCBC の論文を読んで、攻撃がどのように機能するかを確認できます。
「簡単な例として、1 ブロック メッセージ X の CBC MAC が与えられた場合、T = CBCEK(X) と言うことに注意してください。またTです。」
対称暗号は既知平文攻撃の影響を受けやすいと思いますが、少なくとも過去にはそうだったと思います。また、プレーンテキスト(パディングパターン)の一部を実行するため、キーに関する情報を漏らしたくありません。その方法でキーの一部を抽出できれば、最後のブロックをブルートフォース攻撃できますが、他のすべてのブロックはK1を介して暗号化されているため、(少なくともこのKP攻撃では)安全なままです。
まったく同じ問題を克服するために、ブロックベースの暗号は通常、さまざまなモードで動作します。http: //en.wikipedia.org/wiki/Block_cipher_modes_of_operationを参照してください。この明らかな解決策がCMACの設計で考慮されていない理由がわかりません。