ハッシュ関数:SHA-256とその先
衝突耐性、原像計算困難性、用途など、暗号学的ハッシュの特性を学びます。
「ハッシュ関数:SHA-256とその先」はCoddyKit上の無料Cyber Security Academyレッスンです。 これはレッスン3/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはCyber Security Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Cyber Security Academyコースには全4レッスンが含まれています。
暗号学的ハッシュ関数とは
暗号学的ハッシュ関数は、任意長の入力を受け取り、固定長の出力(ダイジェスト)を生成します。決定性があり、高速に計算でき、前像耐性(逆算できない)、衝突耐性(同じハッシュになる 2 つの入力を見つけられない)、雪崩効果(小さな変更で完全に異なるハッシュになる)を備えている必要があります。
SHA-2 ファミリー
SHA-2 ファミリー(NSA が設計し、NIST が標準化)には次のものがあります:
- SHA-256 — 256 ビットの出力で、広く使用されています
- SHA-384 — 384 ビットの出力です
- SHA-512 — 512 ビットの出力で、64 ビット CPU ではより高速です
SHA-256 は、Bitcoin、TLS 証明書、Git のコミット ID で使用されています。
SHA-3 ファミリー
SHA-3 は、SHA-2 とはまったく異なる設計(Keccak スポンジ構造)を使用します。SHA-2 に弱点が見つかった場合に備えた代替として標準化されました。SHA-3 は広く普及しているわけではありませんが、一部の暗号プロトコルやハードウェアで使用されています。
MD5 と SHA-1:破られている
セキュリティ目的では、MD5 や SHA-1 を決して使用しないでください:
- MD5:一般的なハードウェアで数秒以内に衝突を発見できます
- SHA-1:2017 年に初めて実用的な衝突が実証されました(SHAttered)
これらはセキュリティを目的としないチェックサム(ファイルの重複排除)には引き続き役立ちますが、完全性の保証には使用しないでください。
ハッシュの用途:ファイルの完全性
ダウンロードの検証:
sha256sum ubuntu-24.04.iso
# Compare with the hash published on the official site
# If hashes match, file is unmodifiedハッシュの用途:デジタル署名
ドキュメントに署名する際、ドキュメント全体を秘密鍵で暗号化することはありません(遅すぎるため)。代わりに、次の処理を行います:
- ドキュメントをハッシュ化します(高速)
- 秘密鍵でハッシュを暗号化します(小さく、高速)
- 受信者は公開鍵で復号し、自分で計算したハッシュと比較します
HMAC:完全性のための鍵付きハッシュ
HMAC(Hash-based Message Authentication Code)は、ハッシュ関数と秘密鍵を組み合わせて認証タグを生成します。データの完全性と真正性の両方を検証するために使用されます。JWT、API 認証、TLS で使用されています。
import hmac, hashlib
mac = hmac.new(key, message, hashlib.sha256).hexdigest()ハッシュ長拡張攻撃
SHA-2(Merkle-Damgård 構造)は長さ拡張攻撃に対して脆弱です。H(secret+message) を知っていれば、秘密を知らなくても H(secret+message+extension) を計算できます。HMAC はこれを防ぎます。SHA-3 にはこの脆弱性はありません。
レインボーテーブルとソルト
レインボーテーブルは、ハッシュから入力への対応関係を事前計算し、高速な検索を可能にします。ソルトを使うとこれを防げます。入力ごとに一意のランダム値を追加することで各ハッシュが一意になり、対応表を検索するのではなく、エントリごとに総当たり計算が必要になります。
Merkle ツリー
Merkle ツリーは、各親ノードが子ノードのハッシュになっているハッシュの木構造です。Bitcoin ブロックチェーン、Git、Certificate Transparency ログで使用され、大規模なデータセット全体をダウンロードせずに効率的に検証できます。
適切なハッシュの選択
選択の指針:
- 一般的な完全性チェック/チェックサム:SHA-256
- パスワードの保存:Argon2id、bcrypt(SHA-256 を直接使用しない)
- メッセージ認証:HMAC-SHA-256
- デジタル署名:基盤となるハッシュとして SHA-256 または SHA-384
- 避けるべきもの:セキュリティ用途での MD5、SHA-1
クイックチェック:ハッシュ関数
秘密鍵も必要としながら、長さ拡張攻撃を防ぐ構造はどれですか。
レッスンのまとめ
ハッシュ関数は、任意の入力から固定長のダイジェストを生成します。SHA-256 と SHA-512 は現在の標準です。MD5 と SHA-1 はセキュリティ用途では破られています。HMAC は秘密鍵を追加して認証付きの完全性を実現します。パスワードには Argon2/bcrypt を使用してください。Merkle ツリーを使うと、ハッシュを拡張して大規模なデータセットを効率的に検証できます。
よくある質問
「ハッシュ関数:SHA-256とその先」レッスンは無料ですか?
はい。「ハッシュ関数:SHA-256とその先」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Cyber Security Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Cyber Security Academyコースには全4レッスンが含まれています。
「ハッシュ関数:SHA-256とその先」で何を学びますか?
衝突耐性、原像計算困難性、用途など、暗号学的ハッシュの特性を学びます。 ブラウザで直接実行するハンズオンコードでCyber Security Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Cyber Security Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのCyber Security Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン3/4です。
「ハッシュ関数:SHA-256とその先」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このCyber Security Academyレッスンでコードを書いて実行できますか?
はい。すべてのCyber Security Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。
このコースのすべてのレッスン
- 共通鍵暗号:AESとストリーム暗号
- 公開鍵暗号:RSAと楕円曲線
- ハッシュ関数:SHA-256とその先
- デジタル署名と証明書