下記の暗号化技術に関する記事の続きです。
今回はメッセージ認証コード(MAC)について説明します。
メッセージ認証コード(MAC)とは
メッセージ認証コードは、送られたデータの正真性(完全性)を保つためのもので、SWIFT、IPsec、SSL/TLSで利用されています。メッセージ認証コードはmessage authentication codeの頭文字を取って、MACとも呼ばれます。
具体的な使われ方は下記のようになります。
使い方としては一方向ハッシュ関数とよく似ていますが、メッセージ認証コードは一方向ハッシュ関数の代わりに共有鍵を使用します。ただ、共通鍵暗号の記事にも書いたように、共通鍵を使うため、鍵配送問題が発生します。
メッセージ認証コードとは、鍵に依存した一方向ハッシュ関数のようなもの、と理解すればわかりやすいかと思います。
メッセージ認証コードの実現方法
ここからは、メッセージ認証コードを実現するための方法についていくつか記します。
HMAC
共有鍵とデータから、一方向ハッシュ関数でメッセージ認証コードを算出する方法です。
使用する一方向ハッシュ関数は選ぶことができますが、SHA-2(SHA-256, SHA-384, SHA-512)を使用する場合が多いです。また、使用する一方向ハッシュ関数を付与した形で、「HMAC-SHA-256、 HMAC-SHA-384、 HMAC-SHA-512」とも呼ばれます。
メッセージ認証コードの算出方法としては、共有鍵が適切なブロック長になるように0をパディングし、一方向ハッシュ関数によって変換を行います。
AES-CMAC
AESのブロック暗号で暗号化し、最終ブロックをメッセージ認証コードとする方法です。
メッセージ認証コードへの攻撃
メッセージ認証コードに対する攻撃としては、再生攻撃が考えられます。
再生攻撃とは、一度だけ送られた正常な送信データを、繰り返して送信するような行為のことです。例えば、送金時のメッセージを何度も繰り返すことにより、実害となる危険性があります。
シーケンス番号をつけたり、タイムスタンプをつけるなどの対策や、ノンスによる一時的な鍵をつけることで対策を行う必要があります。
参考文献
- 暗号技術入門 秘密の国のアリス(書籍)
https://cr.hyuki.net/