ハッシュアルゴリズム解説:MD5、SHA-1、SHA-256、SHA-512
簡単な回答
MD5 と SHA-1 は壊れているため、セキュリティを重視する目的には使用しないでください。 SHA-256 は、整合性チェック、署名、ブロックチェーンの現在のデフォルトです。 SHA-512 は 64 ビット CPU 上で高速であり、より長いダイジェストが必要な場合に使用されます。ハッシュ ジェネレーターを使用して、ブラウザーでこれらのいずれかを計算します。ファイル ハッシュを使用してファイルの整合性を確認します。
導入
暗号化ハッシュ関数は、任意のサイズの入力を受け取り、決定性があり、計算が速く、反転が不可能で、衝突に強く、雪崩の影響を受けやすい (1 ビットの変更で出力ビットの約半分が変更される) 固定サイズのダイジェストを生成します。 MD5 (128 ビット)、SHA-1 (160 ビット)、SHA-256 (256 ビット)、および SHA-512 (512 ビット) は、最も一般的に使用される 4 つのハッシュ関数ですが、それらのセキュリティ特性は大きく異なります。
ステップバイステップ
-
ハッシュ関数の性質を理解する
優れた暗号ハッシュは、決定的 (同じ入力から常に同じ出力が得られる)、固定サイズの出力、計算が速く、反転が不可能 (プリイメージ耐性)、同じ出力を持つ 2 つの入力を見つけるのが不可能 (衝突耐性)、および雪崩 (わずかな入力の変更で出力ビットの約 50% が反転する) です。
-
ダイジェストサイズを知る
MD5 は 128 ビット (32 個の 16 進文字) を生成します。 SHA-1 は 160 ビット (40 個の 16 進文字) を生成します。 SHA-256 は 256 ビット (64 個の 16 進文字) を生成します。 SHA-512 は 512 ビット (128 個の 16 進文字) を生成します。ダイジェストが長いと衝突の可能性は低くなりますが、ストレージ サイズは増加します。
-
MD5 と SHA-1 が壊れている理由を学ぶ
研究者らは、MD5 (2004 年) および SHA-1 (2017 年、SHAttered 攻撃) に対する実用的な衝突攻撃を発見しました。衝突により、攻撃者は同じハッシュを使用して 2 つの異なる入力を作成し、デジタル署名と認証局を破壊することができます。どちらもセキュリティのために使用すべきではありません。
-
適切なアルゴリズムを選択する
セキュリティよりも速度が重要なファイル整合性チェックでは、MD5 または SHA-1 が依然として一般的です。セキュリティを重視した使用 (パスワード、署名、証明書、ブロックチェーン) の場合は、SHA-256 または SHA-512 を使用してください。パスワードの保存には、bcrypt、scrypt、Argon2 などの低速 KDF を使用します。決して raw SHA-256 を使用しないでください。
-
ハッシュを計算して検証する
ハッシュ ジェネレーターを使用して任意のアルゴリズムでテキストをハッシュするか、ファイル ハッシュを使用してローカル ファイルのハッシュを計算します。結果として得られたダイジェストを既知の適切な値と比較して、整合性を検証します。1 ビットの違いは、ファイルが破損しているか改ざんされていることを意味します。
例
MD5 の「hello」 (128 ビット、32 の 16 進数文字)
入力: hello
出力: 5d41402abc4b2a76b9719d911017c592
SHA-256 の「hello」 (256 ビット、64 の 16 進数文字)
入力: hello
出力: 2cf24dba5fb0d30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
雪崩効果 - 1 つのキャラクター変更
入力: ハロー vs ハロー
出力: SHA-256('hello') は 2cf24dba... を開始しますが、SHA-256('Hello') は 185f8db3... を開始します — 1 ビットの入力変更にもかかわらず完全に異なります
よくある問題
- パスワードのハッシュ化に MD5 または SHA-1 を使用します。どちらも高速で壊れているため、ブルート フォース攻撃やレインボー テーブル攻撃が簡単になります。代わりに bcrypt、scrypt、または Argon2 を使用してください。
- ハッシュと暗号化の混同: ハッシュは一方向であり、元に戻すことはできません。暗号化は双方向です。ハッシュを「復号」することはできません。ハッシュの比較のみが可能です。
- 長さ拡張攻撃の無視: MD5、SHA-1、SHA-256、および SHA-512 はすべて、MAC として使用される場合、長さ拡張攻撃に対して脆弱です。メッセージ認証には HMAC-SHA256 を使用します。
- 定数時間比較の代わりに == を使用してハッシュを比較する: タイミング リークにより、攻撃者はハッシュをバイトごとに回復できます。セキュリティ コードで定数時間比較を使用します。
ヒント
- 新しいシステムのデフォルトは SHA-256 です。これは高速で広くサポートされており、2026 年の時点では実用的な衝突攻撃はありません。
- パスワード ストレージには、作業係数 12 以上の bcrypt (または 64 MB メモリの Argon2id) を使用します。GPU に対して速すぎる raw SHA-256 は決して使用しないでください。
- ファイルのダウンロードを検証するときは、アルゴリズム名とダイジェストの両方を比較してください。発行者が SHA-256 のみを意図している場合、SHA-1 ハッシュは無意味です。
- ファイル ハッシュ ツールを使用すると、アップロードせずにローカルで大きなファイルの SHA-256 を計算できます。このツールは、Web 暗号化 API を通じてファイルをストリーミングします。