2026年版 ToolShare Lab / Guide

ハッシュ化とは?
SHA-256・MD5の違いと
セキュリティの基本

「パスワードはハッシュ化して保存する」とよく聞くけれど、具体的に何をしているのか。MD5とSHA-256はどう違うのか。この記事ではハッシュ化の仕組みから、MD5が非推奨な理由、bcrypt・argon2の使い分け、ファイルのチェックサム、ブロックチェーンとの関係まで、セキュリティの基本知識を一通りまとめた。

読了時間: 約10分 更新日: 2026年3月10日

ハッシュ化とは(一方向関数・暗号化との違い)

ハッシュ化(Hashing)とは、任意の長さのデータを固定長の文字列(ハッシュ値・ダイジェスト)に変換する処理だ。ハッシュ化を行う関数をハッシュ関数、その出力をハッシュ値と呼ぶ。

最も重要な特性は一方向性。ハッシュ値から元のデータを復元することは理論上できない(不可逆)。これがパスワード管理にハッシュ化が使われる理由だ。

ハッシュ値の例

試しに文字列「hello」をSHA-256でハッシュ化すると、次の64文字の16進数になる。

入力: hello SHA-256: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

「hello!」に感嘆符1文字を加えただけで、まったく異なるハッシュ値になる(雪崩効果)。たった1文字の差で出力が激変する——これがハッシュ関数のポイントだ。

入力: hello! SHA-256: ce06092fb948d9af814d2df165c80f6a578aebc4aab14b2fe4f9b38f4a6a36c1

ハッシュ化と暗号化の違い

「ハッシュ化」と「暗号化」は混同されがちだが、根本的に異なる技術だ。

比較項目 ハッシュ化 暗号化
可逆性 不可逆(復元不可) 可逆(復号できる)
鍵の使用 不要 必要(共通鍵・公開鍵)
出力長 固定長 入力に依存する可変長
主な用途 パスワード保存・整合性確認 通信の秘密保護・ファイル暗号化

Point

パスワードを「暗号化」して保存するのは誤り。暗号化は復号できるため、鍵が漏れればパスワードが復元される。パスワードは必ずハッシュ化して保存し、ログイン時は入力値を再ハッシュして比較する。

主要なハッシュアルゴリズム比較

主要なハッシュアルゴリズムを用途ごとに整理した。一覧で見ると「どれを使うべきか」の判断が明確になる。

アルゴリズム 出力ビット長 速度 安全性 推奨用途
MD5 128bit 非常に高速 危険(非推奨) 使用禁止(レガシー確認のみ)
SHA-1 160bit 高速 危険(非推奨) 使用禁止(Git内部のみ)
SHA-256 256bit 高速 安全 ファイル整合性・デジタル署名
SHA-512 512bit 高速(64bitCPU) 非常に安全 高セキュリティ要件のデータ保護
bcrypt 184bit 意図的に低速 非常に安全 パスワードハッシュ(第一推奨)
argon2 可変 意図的に低速 最高レベル パスワードハッシュ(最新推奨)

SHA-256はデータ整合性確認に向いているが、パスワード保存には適さない。パスワードには処理が意図的に遅いbcryptやargon2を使うのが現代のベストプラクティスだ。理由は後述する。

MD5が非推奨な理由

MD5(Message Digest Algorithm 5)は1991年設計のアルゴリズムで、かつては広く使われていた。しかし現在ではセキュリティ用途に絶対に使ってはいけないアルゴリズムだ。

衝突攻撃(Collision Attack)

ハッシュ関数の理想は「異なる入力からは必ず異なるハッシュ値が生成される」こと。しかしMD5はこの性質が2004年に破られている。衝突攻撃とは、異なるデータでも同じハッシュ値を生成できる(衝突を起こせる)ことだ。

現代のPCではMD5の衝突を数秒以内に発見できる。「ハッシュ値が一致 = 同じデータ」という前提が完全に崩れており、ファイルの改ざん検証すら信頼できない。

実害が出た事例

2008年、研究者たちがMD5の衝突を利用して不正なSSL証明書を作成し、認証局を騙す攻撃を実証した。これを受けて主要ブラウザはMD5署名の証明書を無効化。MD5の脆弱性は理論上の話ではなく、実際の攻撃に悪用されている。

レインボーテーブル攻撃

MD5のもう一つの致命的な弱点が速度だ。処理が速すぎるためレインボーテーブル攻撃に対して特に無防備になる。レインボーテーブルとは、よく使われるパスワードとそのMD5ハッシュ値を対応させた巨大なデータベースのことだ。

  1. テーブルを事前計算

    攻撃者は数億〜数十億件のパスワード候補のMD5ハッシュを事前に計算してDB化しておく。現代のGPUなら1秒間に数百億回のMD5計算が可能だ。

  2. 漏洩したハッシュと照合

    DBが漏洩した際、ハッシュ値をレインボーテーブルと照合するだけで元のパスワードを瞬時に逆引きできる。「password」「123456」などのよく使われるパスワードはほぼ100%解読される。

  3. アカウント乗っ取り

    解読したパスワードで他のサービスに不正ログイン(パスワードリスト攻撃)が行われる。パスワードを使い回していると被害が連鎖する。

SHA-256の特徴と安全性

SHA-256(Secure Hash Algorithm 256-bit)は、NSAが設計しNISTが標準化したアルゴリズムだ。SHA-2ファミリーの一員で、現在のWebインフラに最も広く組み込まれている安全なハッシュ関数といえる。

SHA-256の主な特性

SHA-256が使われている場面

用途 詳細
TLS/HTTPS証明書 SSL/TLS証明書の署名アルゴリズムとして標準採用
ビットコイン マイニングのProof of Work、トランザクションIDの生成
ファイルチェックサム ダウンロードファイルの改ざん検証
Gitコミット コミット・ブロブ・ツリーの識別子(SHA-1からSHA-256へ移行中)
JWT署名 HMAC-SHA256としてJSONウェブトークンの署名に使用

Point

SHA-256は「ファイル整合性確認」や「デジタル署名」には最適だが、パスワード保存には使ってはいけない。高速すぎるためGPU攻撃に対して脆弱だ。パスワードには意図的に低速なbcryptまたはargon2を使うこと。

パスワードのハッシュ化(ソルト・ストレッチング)

パスワードをDBに保存するとき、単純なハッシュ化だけでは不十分だ。2012年のLinkedIn漏洩事件では650万件以上のSHA-1ハッシュが流出し、大半が短期間で解読されている。現代のベストプラクティスは「ソルト + ストレッチング」の組み合わせだ。

ソルト(Salt)とは

ソルトとは、パスワードをハッシュ化する前に付加するランダムな文字列だ。ユーザーごとに異なるソルトを生成して使う。

# ソルトなし(危険) password → 5f4dcc3b5aa765d61d8327deb882cf99 # ソルトあり(安全) password + "xK9mP2qZ" → 全く異なるハッシュ値 password + "rL7nW4sY" → また別のハッシュ値(同じパスワードでも毎回異なる)

ソルトを使うとレインボーテーブルを無効化できる。攻撃者は全ユーザーのソルトに対してテーブルを再計算しなければならず、計算量が爆発的に増える。同じパスワードを使っている2人のユーザーもソルトが違えばハッシュ値が異なるため、1人の解読が他に波及しない。

ストレッチング(Key Stretching)とは

ストレッチングとは、ハッシュ計算を何千〜何万回も繰り返して処理時間を意図的に増やす手法だ。

  1. 正規ユーザーへの影響は小さい

    ログイン時に1回だけ実行するため、0.1〜0.5秒程度の遅延が生じるだけ。ユーザー体験への影響はほぼない。

  2. 攻撃者への影響は甚大

    攻撃者は数百億のパスワード候補を試す必要がある。1回の計算が0.1秒かかる場合、100億回の試行に10億秒(約32年)。GPUを駆使してもコストが現実的でなくなる。

bcryptとargon2の選び方

アルゴリズム 設計年 コスト調整 メモリ使用 推奨度
bcrypt 1999年 コストファクター(2のべき乗) 固定(4KB) 十分安全・実績豊富
argon2id 2015年 時間・メモリ・並列度 可変(大量使用可) 最新推奨(PHC優勝)

OWASPは新規開発ではargon2idの使用を第一推奨としている。既存システムでbcryptが正しく設定されているなら、わざわざ移行する必要はない。

# PHP 8の例(password_hash関数) $hash = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]); // または $hash = password_hash($password, PASSWORD_ARGON2ID); # Node.jsの例(bcrypt) const hash = await bcrypt.hash(password, 12); // 12はコストファクター # Python の例(argon2-cffi) from argon2 import PasswordHasher ph = PasswordHasher() hash = ph.hash(password)

絶対にやってはいけないこと

MD5またはSHA-1でパスワードをハッシュ化して保存。平文保存。自作の暗号化アルゴリズムを使う。ソルトなしのSHA-256。これらはすべて重大な脆弱性だ。既存システムで心当たりがあるなら、早急にbcryptまたはargon2へ移行してほしい。

ファイルの整合性チェック(チェックサム)

ハッシュ化のもう一つの重要な用途がファイルの改ざん検出だ。ダウンロードしたファイルが途中で破損していないか、あるいは悪意ある第三者に差し替えられていないかを確認できる。

チェックサムの仕組み

  1. 配布元がハッシュ値を公開

    ソフトウェアの配布元は、公式ファイルのSHA-256ハッシュ値をダウンロードページやREADMEに掲載している。LinuxのISOファイルには必ずSHA256SUMSファイルが添付されている。

  2. ダウンロード後に自分で計算

    ダウンロードしたファイルのSHA-256値を自分のPCで計算する。OSの標準ツールか、当サイトのハッシュ生成ツールで簡単にできる。

  3. 2つの値を比較

    公式サイトの値と自分が計算した値が完全に一致すれば、ファイルは改ざんされておらず正しく転送されたことが確認できる。1文字でも違えば、破損か改ざんの疑いがある。

OSコマンドでのチェックサム確認方法

# macOS / Linux sha256sum downloaded-file.iso # または shasum -a 256 downloaded-file.iso # Windows(PowerShell) Get-FileHash downloaded-file.iso -Algorithm SHA256 # 出力例(64文字の16進数) a3b4c5d6e7f8... downloaded-file.iso

コマンドラインに慣れていなければ、当サイトのハッシュ生成ツールでドラッグ&ドロップするだけでいい。SHA-256、SHA-512などのハッシュ値がブラウザ上で計算できる。サーバーにデータを送信しないため、機密ファイルを扱う場面でも使いやすい。

ブロックチェーンとハッシュの関係

ビットコインをはじめとするブロックチェーン技術は、ハッシュ化の性質を巧妙に活用している。ブロックチェーンの「なぜ改ざんできないのか」を理解するには、ハッシュの仕組みが核心になる。

ブロックチェーンの基本構造

ブロックチェーンは名前の通り、「ブロック」と呼ばれるデータのかたまりが「チェーン(鎖)」状につながった構造だ。各ブロックに含まれるのは以下の4つ。

なぜ改ざんが困難なのか

ブロックAのデータを改ざんすると、ブロックAのハッシュ値が変わる。すると、ブロックBが持っている「前のブロック(A)のハッシュ値」と一致しなくなる。これを修正するにはブロックBも変更が必要で、するとブロックCも変更が必要になり……という連鎖が起きる。

さらに、新しいブロックを追加するにはProof of Work(PoW)と呼ばれる膨大な計算(マイニング)が必要になる。ビットコインでは「ハッシュ値の先頭に0が一定数並ぶ」条件を満たすナンスを見つけるために、世界中のマシンが平均10分かけて計算している。

ハッシュが保証する信頼性

ブロックチェーンは「中央の管理者なし」で取引の正当性を証明できる仕組みだ。これを可能にしているのがSHA-256の衝突耐性と一方向性。改ざんには理論上ネットワーク全体の51%以上の計算力が必要で、経済的に引き合わない設計になっている。

ハッシュ生成ツールの使い方

当サイトのハッシュ生成ツールを使えば、テキストやファイルのハッシュ値をブラウザ上で計算できる。すべての処理はブラウザ内で完結し、サーバーにデータは送信しない。機密情報を含むファイルでも安心して使える理由がここにある。

テキストのハッシュ化

  1. テキストを入力

    ハッシュ化したいテキストを入力欄に貼り付ける。パスワード確認、APIキーの照合、文字列の同一性チェックなどに使える。

  2. アルゴリズムを選択

    MD5、SHA-1、SHA-256、SHA-512から選択。セキュリティ用途ならSHA-256がおすすめだ。

  3. ハッシュ値をコピー

    生成されたハッシュ値をワンクリックでコピーできる。リアルタイム計算なので、文字を入力するたびにハッシュ値が更新される。

ファイルのハッシュ確認

ファイルをドラッグ&ドロップするだけで、ファイル全体のSHA-256ハッシュ値を計算できる。ダウンロードしたソフトウェアの公式ハッシュ値と比較するのに便利だ。ファイルサイズを問わず処理できるが、大きなファイルは計算に数秒かかる点だけ注意。

# 実用的な使い方の例 1. パスワードポリシーの確認 → 「パスワードは平文で保存されていないか?」 → DBに保存されているハッシュの先頭文字を確認 → "$2b$" から始まる → bcrypt(OK) → 32文字の16進数 → MD5(要移行!) → 64文字の16進数 → SHA-256(パスワード用途は不適切) 2. ファイル整合性チェック(配布前) → ファイルをツールにドロップ → SHA-256値を記録 → 配布先が確認できるよう公開

ハッシュ生成ツールを今すぐ使う

テキストやファイルのハッシュ値(MD5・SHA-256・SHA-512)をブラウザ上で即座に計算できる。サーバー送信なし・登録不要。パスワード確認やファイルの整合性チェックに。

よくある質問

ハッシュ化されたパスワードは絶対に解読できない?
「絶対に解読できない」は正確ではない。bcryptやargon2などを正しく使えば、現実的な時間と計算コストでは解読できないほど安全だ。一方、MD5やSHA-256のみでハッシュ化されたパスワードはレインボーテーブルや辞書攻撃で短時間に解読される可能性がある。ソルト付きのbcryptまたはargon2を使い、コストファクターを適切に設定することが鍵になる。
MD5はどんな用途なら今でも使える?
セキュリティ目的(パスワード保存・デジタル署名・整合性確認)でのMD5使用は論外だ。唯一許容できる用途は、セキュリティと無関係な「非一意性が許容されるチェックサム」——キャッシュの識別子生成や開発環境のデバッグ程度。ただし混乱を避けるためSHA-256に統一するのが無難だ。
SHA-256とSHA-512、どちらを選ぶべき?
ファイル整合性確認やデジタル署名には、どちらも現在安全だ。実用上はSHA-256が最も普及しており、ツールや実装の互換性でも選びやすい。SHA-512は64bit CPUではSHA-256より高速なケースもある。パスワード保存にはどちらも使わないこと——bcryptかargon2が正解だ。
bcryptのコストファクターはいくつに設定すればいい?
OWASPは2026年現在、最低10を推奨している。実用的には12〜14が設定の目安だ。コストファクターが1増えるごとに計算時間は約2倍になる。「1回のログインに許容できる遅延(0.1〜0.5秒)」に収まるコストファクターを選ぶといい。ハードウェアの性能向上に合わせて定期的に見直すことも忘れずに。
量子コンピュータでSHA-256は破られる?
理論上、量子コンピュータ(Groverのアルゴリズム)はSHA-256の解読コストを従来の平方根レベルに下げられる可能性がある。つまりSHA-256の実効安全性が128bitレベルに下がりうる。ただしこれを実行できる規模の量子コンピュータは現時点では存在しない。長期対策としてSHA-384やSHA-512への移行が議論されているが、今すぐ対応が必要な話ではない。
ハッシュ化とエンコード(Base64など)の違いは?
Base64エンコードはデータを別の表現形式に変換するだけ——デコードすれば元のデータを完全に復元できる。暗号化でも圧縮でもなく、単なる形式変換だ。一方ハッシュ化は不可逆な変換で、元のデータを復元することはできない。Base64でパスワードを「保護」しているシステムは実質的に平文保存と変わらない。実際にそういうシステムは存在するので、レビュー時には確認してみるといい。