0Pricing
Cryptology Academy · レッスン

MACの概念と長さ拡張攻撃

秘密のプレフィックスを付加する方法が長さ拡張攻撃に対して安全でない理由を説明します。

「MACの概念と長さ拡張攻撃」はCoddyKit上の無料Cryptology Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCryptology Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cryptology Academyコースには全4レッスンが含まれています。

ようこそ

メッセージ認証コード(MAC)は、共有秘密鍵を使って完全性と真正性を提供します。このレッスンでは、MACの仕組みと特性、そして単純な鍵付きハッシュに潜む重大な脆弱性について理解します。

MACとは

MACは、メッセージと秘密鍵から計算される短い認証コードです。同じ鍵を持つ受信者がMACを再計算して検証します。鍵を知らない攻撃者による偽造を防ぎます。

MACとハッシュと署名の比較

ハッシュ:鍵を使わず公開され、完全性のみを提供します。 MAC:共有秘密を使う対称方式で、完全性と真正性を提供します。 デジタル署名:秘密鍵を使う非対称方式で、否認防止を加えます。 否認防止を提供できるのは署名だけです。

偽造不可能性

安全なMACは、選択メッセージ攻撃に対する存在的偽造不可能性(EUF-CMA)を満たす必要があります。つまり、攻撃者が任意のメッセージに対するMACを問い合わせられても、これまで問い合わせていない新しいメッセージに対して有効なMACを偽造できないことです。

単純な鍵付きハッシュ:Prefix MAC

単純な試み:MAC(K, M) = H(K || M)。安全に見えますが、Merkle-Damgård構造のハッシュ関数(SHA-256、SHA-512、MD5)に対する長さ拡張攻撃に対して脆弱です。

長さ拡張攻撃

Mをハッシュした後のSHA-256の状態は、単にH(M)です。H(K || M)が与えられると、攻撃者はKを知らなくても、任意の「extra」に対して H(K || M || padding || extra) を計算できます。つまり、メッセージを拡張して新しいデータを追加できます。

攻撃による実際の影響

Flickr(2009年):APIはH(K || params)を使用していました。攻撃者は認証済みリクエストに &api_sig=forgery を追加できました。その結果、不正なAPI呼び出しが有効なものとして受け入れられました。純粋な長さ拡張攻撃の悪用です。

Suffix MACも機能しない理由

MAC(K, M) = H(M || K):オフライン攻撃に対して脆弱です。攻撃者はKなしでH(message)を計算し、その後、birthday攻撃を使って同じハッシュを持つM'を見つけられます。衝突が見つかった後で鍵が追加されます。

HMACがこれを解決する理由

HMACは、異なる鍵パッドを使ってハッシュを2重に適用します: HMAC(K, M) = H((K⊕opad) || H((K⊕ipad) || M)) 内部ハッシュはH(ipad_key || M)を生成します。外部ハッシュはそれをopad_keyで包みます。攻撃者は外部ハッシュの初期状態を設定できないため、長さ拡張攻撃は失敗します。

SHA-3と長さ拡張

SHA-3はsponge構造を使用するため、本質的に長さ拡張攻撃の影響を受けません。H_SHA3(K || M)は有効な単純MAC構成です。一方、SHA-2はそうではないため、SHA-2では必ずHMACを使用してください。

MAC検証に対するタイミング攻撃

早期終了するMAC比較(==)は、タイミング情報を漏えいさせます。最初の1バイトが「正しい」場合は、最初の1バイトが「誤っている」場合よりわずかに時間がかかります。256回の問い合わせで1バイト目が判明し、さらに256回で2バイト目が判明します。16×256回の問い合わせでMAC全体を復元できます。

確認問題

MAC(K, M) = SHA256(K || M) が安全でないのはなぜですか?

まとめ

長さ拡張攻撃により、単純な鍵付きハッシュが機能しない理由が分かりました。次はHMACの構成と安全性の証明について学びます。

よくある質問

「MACの概念と長さ拡張攻撃」レッスンは無料ですか?

はい。「MACの概念と長さ拡張攻撃」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cryptology Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cryptology Academyコースには全4レッスンが含まれています。

「MACの概念と長さ拡張攻撃」で何を学びますか?

秘密のプレフィックスを付加する方法が長さ拡張攻撃に対して安全でない理由を説明します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

Cryptology Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのCryptology Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。

「MACの概念と長さ拡張攻撃」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このCryptology Academyレッスンでコードを書いて実行できますか?

はい。すべてのCryptology Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. MACの概念と長さ拡張攻撃
  2. HMACの構成と安全性証明
  3. APIにおけるHMAC:リクエスト署名
  4. CMACとPoly1305:ブロック暗号MAC
← Cryptology Academyに戻る