メッセージ認証コード(MAC)とは?仕組みと役割をわかりやすく解説
メッセージ認証コード(MAC:Message Authentication Code)は、メッセージの認証に用いられる数バイト程度の小さなデータブロックです。受信者はこのブロックを検証することで、メッセージが第三者によって改ざんされていないことを確実に確認できます。
メッセージ認証コード(MAC)の基本的な仕組み
MACは、対称鍵によってパラメータ化される一連の暗号関数群です。それぞれの関数は、可変長の入力データ(「メッセージ」と呼ばれます)を受け取り、固定長の出力値を生成します。この出力値こそが、入力メッセージのMACとなります。
承認されたMACアルゴリズムには、次のような重要な性質が求められます(各セキュリティレベルごとに)。それは、「鍵を知らない者が、その鍵を使って他のメッセージのMACを計算した結果を目にしていたとしても、新たなメッセージのMACを求めることは計算量的に不可能でなければならない」というものです。この性質により、MACアルゴリズムはデータ発信元認証とデータ完全性の両方のセキュリティを実現できます。
MACを構成する3つのアルゴリズム
MACは暗号プリミティブの一種であり、その定義には以下の3つのアルゴリズムが含まれます。
1. 鍵生成アルゴリズム
入力となるセキュリティパラメータによって定義された一定の「品質」(長さ)を持つ鍵を生成します。この鍵の強度が、MAC全体の安全性を左右します。
2. タグ付けアルゴリズム
鍵とメッセージという2つの入力を受け取り、タグ(MAC値)を出力します。送信者はこのタグをメッセージに添付して送信します。
3. 検証アルゴリズム
鍵・メッセージ・タグという3つの入力を受け取り、与えられたメッセージと鍵に対してそのタグが有効かどうかを判定し、結果を1ビットで出力します。
MACとデジタル署名の違い
MACは対称型のプリミティブであるため、メッセージをやり取りする二者は同じ(共通の)鍵を使用します。これは「MACを検証できる者は、同じ秘密鍵を使ってMACを計算することもできる」というシンプルな帰結を意味します。
一方、デジタル署名は非対称型のプリミティブであり、二者は異なる(ただし数学的に関連付けられた)鍵を持ちます。つまり、秘密の署名鍵を保有する主体だけが署名を作成でき、誰もが公開されている検証鍵を使ってその署名を検証できるのです。
デジタル署名の方がより柔軟で強力なプリミティブに見えますが、その計算コストはMACの計算よりもはるかに高くなります。そのため、用途が許す限り、高速なMACが依然として広く活用されています。
データ通信におけるMACの役割
MACはデータ通信において不可欠な役割を果たします。安全でない通信路を介して共有されるメッセージは、通信路を改ざんできる侵入者によるメッセージ偽造などの攻撃を防ぐために、必ず認証される必要があります。
送信者と受信者が事前に秘密鍵を共有している場合、MACを利用することでメッセージの真正性を保証できます。具体的には、送信者がメッセージと秘密鍵の関数としてタグを生成し、それをメッセージに付加してから通信路へ送り出します。受信者は受け取ったメッセージから同様にタグを再計算し、一致するかどうかを確認することで、メッセージが途中で改ざんされていないことを検証できるのです。
-
Cプログラムはどのように実行される?コンパイルから実行までの流れを解説
この記事では、C言語のプログラムがシステム上でどのように実行されるのかを解説します。これは、いわばCプログラムのコンパイルプロセス全体の流れにあたります。Cソースコードが実行可能ファイルになるまで私たちが書いたC言語のソースコードは、そのままではコンピュータに理解できません。実行可能な形式に変換されるまでには、いくつかの段階を経る必要があります。以下の図は、Cのソースコードがどのように実行されるかを示したものです。上記の図における各ステージについて、順番に詳しく見ていきましょう。1. Cコード(ソースコード)これはプログラマが実際に記述したコードです。このコードはまず「プリプロセッサ」の段階へ
-
Snapchatの仕組みとは?基本用語から使い方まで初心者向けに徹底解説
モバイルメッセージアプリの世界に革命をもたらしたと言えば、それはSnapchat(スナップチャット)についての言葉として決して大げさではありません。Snapchatが登場する以前、友達とこんなユニークな方法でコミュニケーションができると想像した人はほとんどいませんでした。送った画像や動画が自動的に消えるという「自己消滅型メッセージ」という独自のコンセプトにより、Snapchatは従来のメッセージアプリやSNSとは一線を画す存在となっています。2011年の登場以来、Snapchatは1日あたり1億8000万人以上のアクティブユーザーを抱える、世界で最も人気のあるアプリの一つへと成長しました。また