本文へ移動
ZEKILO Dev
生成

MD5・SHA-1・SHA-256の違いとパスワード保存

2026.10.03 更新 · 6分で読めます

MD5・SHA-1・SHA-256はハッシュ値の長さと衝突への強さが違います。チェックサムや署名にはどれを使うのか、パスワードの保存にはなぜSHA-256も不向きでbcryptやArgon2が必要なのかを解説します。

ハッシュ生成をすぐに使う

MD5・SHA-1・SHA-256はどれも入力を短い固定長の値に変えますが、互いに置き換えられるわけではありません。MD5・SHA-1は衝突が知られているため、署名やパスワードの保存には使いません。パスワードの保存にはbcrypt・scrypt・Argon2などの専用関数を使います。チェックサムや署名にはSHA-256が無難な選択です。ハッシュ値はハッシュ生成にテキストを貼り付けるかファイルを開くと、並べて確認できます。

ひと目でわかる比較

項目 MD5 SHA-1 SHA-256 SHA-512
仕様 RFC 1321 FIPS 180-4 FIPS 180-4 FIPS 180-4
ハッシュ値の長さ 128ビット 160ビット 256ビット 512ビット
16進数表記 32文字 40文字 64文字 128文字
衝突 発見済み、短時間で作れる 発見済み 全ラウンドでは公開例なし 全ラウンドでは公開例なし
現在の位置づけ 署名には使わない(RFC 6151) 2030年末までに段階的に廃止 SHA-2系 SHA-2系

同じ6文字を3つのアルゴリズムに通した結果です。

入力: ZEKILO

MD5      f36f86467ce6ba1a1063f6e7019d5e6d
SHA-1    42d40f3480e77ccf59395369cc957ec5a2bf7c4b
SHA-256  f1dfccaf4a395154a1b494c0f0e068765a099f596f3e79934dcc98a2fda67f26

同じバイト列からは必ず同じハッシュ値が得られ、少しでも違えばまったく別の値になります。小文字のzekiloのSHA-256はfef1d7d382d3b5d9f0c91e96273a8e4c7f446805b4a08bbb625dc2f742b4177bです。入力の末尾の改行もハッシュに含まれるので、「同じ文章」なのに値が違うときはまず改行を確認してください。

ハッシュが保証しようとすること

RFC 6151は、メッセージダイジェストアルゴリズムが備えるべき性質を3つ挙げています。

  • 衝突耐性: 同じハッシュ値になる異なる2つの入力を見つけるのが困難であること。
  • 原像耐性: ハッシュ値だけから、その値になる入力を見つけるのが困難であること。
  • 第2原像耐性: ある入力に対して、同じハッシュ値になる別の入力を見つけるのが困難であること。

ハッシュは暗号化ではありません。鍵がなく、OWASPの文書が述べるとおり一方向の関数です。できるのは、候補となる入力のハッシュ値と比べることだけです。

MD5とSHA-1で崩れたもの

MD5。 2011年3月のRFC 6151は、2006年に発表された手法なら一般的なノートPCで約1分でMD5の衝突を見つけられること、衝突攻撃がX.509証明書にも適用されたことをまとめています。結論は、電子署名のように衝突耐性が必要な用途でMD5はもはや使えない、というものです。同じ文書は、知られている原像攻撃の計算量が2^123.4と依然として大きいとも書いており、問題はハッシュ値から元の入力を求める側ではなく衝突の側にあります。

SHA-1。 NISTは2022年12月15日、SHA-1を2030年12月31日までに段階的に廃止し、SHA-2・SHA-3へ移行するよう発表しました。近年、衝突攻撃がSHA-1の安全性を損なうために使われてきたとも説明しています。

衝突が問題になるのは署名があるからです。同じハッシュ値を持つ2つの文書をあらかじめ用意できれば、一方への署名がもう一方にもそのまま有効になります。そのため署名や証明書には、衝突が知られていないSHA-256などのSHA-2・SHA-3系を使います。

パスワードの保存にどれも使えない理由

これは衝突とは別の問題で、SHA-256にも同じように当てはまります。汎用のハッシュ関数は速く計算できるように作られています。OWASPは、SHA-256のような高速なハッシュは攻撃者が短時間に大量の推測を試せるため、パスワードの保存に適さないと明記しています。さらにソルトなしで保存すると、同じパスワードは同じハッシュ値になります。

パスワード保存専用の関数は、この点を逆に設計しています。

  • わざと計算を遅くし、ハードウェアの進歩に合わせて計算コスト(work factor)を上げられます。Argon2idとscryptは、指定した量のメモリも必要とします。
  • パスワードごとに異なるランダムな値(ソルト)を混ぜるので、同じパスワードでも結果が変わり、事前に計算した対応表が使えません。OWASPによると、広く使われているライブラリの多くはソルトを自動で生成・管理します。

2026年10月時点でOWASPが推奨している最小設定は次のとおりです。

関数 OWASPが推奨する最小設定
Argon2id メモリ19 MiB、反復回数2、並列度1
scrypt コストパラメーター2^17、ブロックサイズ8、並列化1
bcrypt work factor 10以上、パスワードは72バイトまで
PBKDF2-HMAC-SHA-256 60万回以上の反復(FIPS-140への準拠が必要なシステム)

実務では、SHA-256を自分で繰り返す実装は書かず、使っている言語やフレームワークのパスワードハッシュAPIを呼び出してください。OWASPの優先順位は、まずArgon2id、使えなければscrypt、既存システムならbcryptです。

利用者の側では、長くてランダムなパスワードが推測の余地を大きく減らします。パスワード生成の初期設定(94種類の文字、16文字)はエントロピーが約104.9ビットです。生成したパスワードは記録しません。すぐにパスワードマネージャーに保存してください。

用途別の選び方

用途 使うもの
ダウンロードしたファイルのチェックサム照合 SHA-256
電子署名・証明書 SHA-256などSHA-2・SHA-3系
共有した秘密鍵によるメッセージ認証 HMAC-SHA-256
パスワードの保存 Argon2id・scrypt・bcrypt
悪意のある相手がいない単純な変更検出 どれでも可、SHA-256を推奨

自分で確かめられる基準値もあります。内容がabcの3バイトだけで改行のないファイルのSHA-256はba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad、ZEKILOを鍵zekilo-secretで計算したHMAC-SHA-256は685de252cb7c60a51aedb9b4c14903d26efb4bb2a11c31531f4388f0badc270fです。HMACは鍵を一緒に混ぜるため、鍵を知っている側だけが同じ値を作れます。

チェックサムでわかるのは、手元のファイルが比べた値と一致することだけです。チェックサムをファイルと同じ場所から入手した場合、転送中の破損は検出できても、意図的に差し替えられたケースは見分けられません。

ZEKILO Devで確認する

  1. ハッシュ生成にテキストを入力または貼り付けるか、ファイルを開きます。
  2. MD5・SHA-1・SHA-256・SHA-384・SHA-512がまとめて表示されます。出力は16進数の小文字・大文字・Base64から選べ、HMACをオンにすると鍵を入力できます。
  3. ダウンロードしたファイルを検証するときは、比較タブに期待するハッシュ値を貼り付けます。大文字と小文字は区別しません。

テキストとファイルはブラウザ内で計算し、サーバーには送信しません。

まとめ

  • MD5(128ビット)とSHA-1(160ビット)は衝突が知られています。署名や証明書には使わないでください。
  • チェックサム・署名・HMACにはSHA-256が無難な選択です。
  • SHA-256を含む汎用ハッシュは高速に計算できるため、パスワードの保存には適しません。ソルトを含むArgon2id・scrypt・bcryptを使います。
  • ハッシュは一方向の計算で暗号化とは異なり、改行1つ違うだけで値が変わります。

この記事に関連するツール

出典と基準

ほかのガイド