ハッシュ関数の「元に戻せない」とは — MD5・SHAの安全性を区別する
DDEVELOPER
開発(更新: 2026-09-10)5 分で読める

ハッシュ関数の「元に戻せない」とは — MD5・SHAの安全性を区別する

ハッシュは入力を固定長の値に変換します。暗号化と異なり復号鍵はありません。しかし「ハッシュなら元データを推測できない」という保証でもありません。攻撃者が何を与えられ、何を探すのかを分けて考える必要があります。

#ハッシュ関数#MD5#SHA-256#SHA-3#暗号学#セキュリティ

3つの安全性要件を区別する

原像耐性は、与えられたハッシュ値に一致する入力を探す困難さです。第二原像耐性は、与えられた入力と同じハッシュになる別の入力を探す困難さです。衝突耐性は、攻撃者が両方を選べる異なる入力の組を探す困難さです。

衝突攻撃は入力の自由度が大きく、理想的なnビットのハッシュでも、およそ2^(n/2)の試行で衝突が期待されます。衝突耐性では、攻撃者が両方の入力を自由に選んで衝突を探す攻撃にも耐えることが要求されます。実際の強度は方式や入力長、攻撃モデルに依存します。

圧縮や雪崩効果だけでは秘密を守れない

出力より大きな入力の集合を扱うため、異なる入力が同じ出力になる衝突は避けられません。ただしこの事実だけでは、あるハッシュに対応する入力を探す難しさを証明できません。入力の小さな変化で出力が大きく変わる雪崩効果も、それだけで一方向性を証明するものではありません。

4桁の暗証番号なら候補は10,000通りです。候補を同じ方式で計算して照合すれば、ハッシュが破られていなくても推測できます。パスワード保存にはソルトとコスト設定を持つ専用の方式を使い、単純なMD5やSHAの値をそのまま保存しないでください。

MD5・SHA-1の衝突とSHA-2・SHA-3

MD5の衝突が報告され、RFC 6151は署名など衝突耐性が必要な用途でMD5を使用できないと説明しています。SHA-1でもSHAtteredにより異なるPDFの衝突が実証されました。これらは、任意のハッシュから元データを復元した実験ではありません。また、原像攻撃が難しいことだけを理由に古い署名を安全と判断することもできません。

SHA-256・SHA-384・SHA-512はSHA-2ファミリーです。SHA-384とSHA-512は初期値と出力の取り方が異なるため、SHA-384はSHA-512の出力を単に切り取ったものではありません。SHA-3はFIPS 202で定義される別設計の方式です。このサイトのハッシュ生成ツールはSHA-3を扱いません。方式は数字の大小だけで選ばず、用途の仕様に合わせます。

テキストの計算値を正しく比較する

ハッシュの入力はバイト列です。ハッシュ生成ツールは入力欄の文字をUTF-8で計算します。空白を削除せず、Unicode正規化もしません。入力欄の改行はLFです。ファイル全体のチェックサムを求める機能とは異なります。

SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

この例には引用符と末尾改行を含めません。Hex小文字・大文字・Base64は同じハッシュの別表記です。同じ値だったとしても送信元の真正性が証明されるわけではありません。悪意ある変更に備える場合は、信頼できる経路で得た期待値や署名、用途に適した認証方式が必要です。

参考文献・ソース

記事作成に関する注記

本記事は AI(大規模言語モデル)を編集補助として活用して作成しています。 公開前に編集者が内容を確認していますが、事実誤認・仕様の解釈ミス・最新情報との齟齬が含まれる可能性があります。 重要な判断を行う際は、本文中の一次ソースや公式ドキュメントを必ずご自身でご確認ください。 誤りにお気づきの場合は、お問い合わせフォームよりご連絡いただけると助かります。

🔧 関連ツール

📚 関連記事