0Pricing
Cryptology Academy · レッスン

HMACの構成と安全性証明

ipad/opad構成と、その安全性の性質を順に確認します。

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

ようこそ

HMACは、標準的な鍵付きMAC構成です。二重ハッシュ設計により長さ拡張攻撃を防ぎ、HMACの安全性を基盤となるハッシュ関数の安全性に帰着させる形式的な安全性証明があります。

HMACの構成

HMAC(K, M) = H((K' ⊕ opad) || H((K' ⊕ ipad) || M)) 次のとおりです: - K' = ブロックサイズBまでKをゼロパディングしたもの(または|K|>Bの場合はH(K)) - ipad = 0x36をB回繰り返したもの - opad = 0x5CをB回繰り返したもの

ipadとopadはなぜ必要か

ipad(0x36)とopad(0x5C)は異なる定数であり、K' ⊕ ipad ≠ K' ⊕ opadとなることを保証します。これらは実質的に、Kから内部ハッシュ用と外部ハッシュ用の2つの異なる擬似ランダム鍵を作成します。

HMACをステップごとに確認

K=secret、M=message、H=SHA256の場合: 1. K' = Kを64バイトにパディングしたもの 2. inner_key = K' XOR ipad 3. inner_hash = SHA256(inner_key || M) 4. outer_key = K' XOR opad 5. result = SHA256(outer_key || inner_hash)

PythonでのHMAC

import hmac, hashlib key = b'my_secret_key' message = b'Hello, World!' mac = hmac.new(key, message, hashlib.sha256) print(mac.hexdigest()) # 64-char hex string (256 bits)

HMACで長さ拡張が失敗する理由

HMAC(K,M) = SHA256(outer_key || SHA256(inner_key || M))の場合を考えます。 攻撃者はSHA256(inner_key || M) = inner_hashを知っています。しかし、これを拡張することはできません。外側のハッシュはinner_hashだけではなく、(outer_key || inner_hash)を入力として受け取るためです。攻撃者はouter_keyを知りません。

HMACの安全性証明(Bellare)

Bellare(1996)は、ハッシュ関数Hが擬似ランダム関数(PRF)であれば、HMACもPRFになることを証明しました。実際には、HMAC-SHA256は、意図された安全性特性に関してSHA-256と同等に安全です。

HMACの鍵長

HMACの鍵は次の条件を満たす必要があります: - 少なくともLバイト(ハッシュ出力長) - 推奨:ランダムデータを正確にLバイト - key > block_sizeの場合:keyはblock_sizeまで事前にハッシュ化されます - HMAC-SHA256の鍵にはos.urandom(32)を使用します

HMACの切り詰め

HMACの出力は、重大な安全性の低下なしに出力長の半分まで切り詰めることができます。TOTP/HOTPでは4バイトに切り詰めます。TLSのMACも切り詰められます。80ビット(10バイト)未満には決して切り詰めないでください。

さまざまなコンテキストでのHMAC

HMAC-SHA256の用途は次のとおりです: - TOTP:認証コード(6桁に切り詰めます) - TLS 1.2:セッションMAC(AEADを使用するTLS 1.3では不要です) - JWT:HS256署名(対称鍵) - APIリクエストの署名:GitHub Webhook、AWS SigV4

HKDF:HMACベースの鍵導出

HKDF(IKM, salt, info, L)はHMACを2回使用します: 1. Extract:PRK = HMAC-SHA256(salt, IKM) 2. Expand:OKM = HMAC-SHA256(PRK, info || counter) TLS 1.3の鍵スケジュール、Signal、WireGuardでの鍵導出に使用されます。

確認問題

HMACにおいて、opad(0x5Cを繰り返したもの)は何のために使用しますか?

まとめ

HMACの構成と証明を理解しました。次はHMACをAPIリクエストの署名に適用し、リプレイ攻撃を防ぐ方法を確認します。

よくある質問

「HMACの構成と安全性証明」レッスンは無料ですか?

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

「HMACの構成と安全性証明」で何を学びますか?

ipad/opad構成と、その安全性の性質を順に確認します。 ブラウザで直接実行するハンズオンコードでCryptology Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

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

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

「HMACの構成と安全性証明」レッスンにはどのくらい時間がかかりますか?

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

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

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

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

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