🌐 JA

🔐 ハッシュ生成器

テキストを様々なハッシュアルゴリズムで変換します。ファイル整合性検証、パスワードハッシング、データ検証に使用されます。

ファイルを選択するとファイル内容のハッシュを生成します
ガイド

詳しく見る

01

1. ハッシュ関数とは何か

ハッシュ関数とは、任意の長さのデータを固定長の値に変換する一方向の関数です。入力がほんの少し変わるだけで出力が全く別のものになる「雪崩効果」を持ち、同じ入力からは常に同じ出力が得られます。MD5は128ビット、SHA-1は160ビット、SHA-256は256ビットのハッシュ値を生成します。ハッシュは復号できない一方向関数であるため、元のデータを隠しながら整合性を検証するのに理想的です。ファイルダウンロードの検証、パスワードの保存、ブロックチェーン、デジタル署名など幅広い分野で利用されています。

02

2. MD5とSHAアルゴリズムの比較

MD5は1991年に開発された128ビットのハッシュで、非常に高速ですが衝突攻撃に対して脆弱です。2004年に深刻な脆弱性が発見されて以降、暗号学的用途には不適切とされ、ファイルのチェックサム程度にしか使われません。SHA-1は160ビットでMD5より安全とされていましたが、2017年にGoogleが実際の衝突事例を発表したことで使用が中止されました。SHA-256はSHA-2系列の256ビットハッシュで、現在最も広く採用されている標準です。ビットコインにもSHA-256が使われています。SHA-512は512ビットでより高いセキュリティを提供しますが処理速度は遅くなります。新しいシステムではSHA-256以上を採用するべきです。

03

3. ハッシュのセキュリティと脆弱性

ハッシュ関数に求められるセキュリティ要件は主に3つです。第一に原像計算困難性(Preimage Resistance)で、ハッシュ値から元のデータを見つけ出すのが困難であること。第二に第2原像計算困難性(Second Preimage Resistance)で、同じハッシュを生成する別の入力を見つけるのが困難であること。第三に衝突耐性(Collision Resistance)で、同じハッシュを生成する2つの異なる入力を見つけるのが困難であることです。MD5とSHA-1はすでに衝突耐性が破られており、攻撃者が意図的に同一ハッシュを作り出せます。レインボーテーブル攻撃は事前計算したハッシュ表から元データを逆引きする手法ですが、ソルトを加えることで防ぐことができます。

04

4. ファイル整合性の検証

ファイルハッシュは、ダウンロードしたファイルが改ざんされていないかを確認する最も効果的な方法です。ソフトウェア配布サイトはファイルとともに公式のハッシュ値を公開しています。利用者はダウンロード後に自分でハッシュを計算し、公式値と比較します。たった1ビットでも異なれば全く別のハッシュ値になるため、改ざんを即座に検知できます。LinuxのISOイメージ、オープンソースソフトウェア、ブロックチェーン取引などで必須の仕組みです。Gitもコミットごとにハッシュを生成してコードの整合性を保証しています。大容量ファイル転送時のネットワークエラーによる破損も、ハッシュで検出可能です。

05

5. パスワードハッシングのベストプラクティス

パスワードをデータベースに平文で保存することは絶対に避けなければなりません。ハッシュ化して保存する必要がありますが、単純なMD5やSHA-256だけでは不十分です。レインボーテーブル攻撃に弱いためです。必ずソルトを追加しましょう。ソルトはパスワードに付加するランダムな文字列で、同じパスワードでも異なるハッシュ値を生成できます。さらに、bcrypt、scrypt、Argon2のような意図的に計算を遅くしたハッシュ関数を使うべきです。これらは計算コストを高めることでブルートフォース攻撃を困難にします。OWASPはパスワードハッシングにArgon2を最優先で推奨しています。

06

6. レインボーテーブルとソルト

レインボーテーブルとは、あらかじめ計算しておいた大量のハッシュ値のデータベースです。よく使われるパスワード数百万件のハッシュを事前に保存しておき、流出したハッシュと照合して元のパスワードを割り出します。例えば「password123」のMD5は常に同じ値になるため、テーブルの中から瞬時に見つけ出せます。ソルトはこれを防ぐための仕組みです。ユーザーごとに固有のランダムな文字列を付加すれば、同じパスワードでも異なるハッシュ値になります。「password123」に「x8k2m9」を組み合わせてハッシュ化すれば、既存のレインボーテーブルには存在しない値が得られます。ソルト自体はデータベースに平文で保存しても問題ありませんが、パスワードごとに異なるソルトを使うことが効果を発揮する条件です。

よくある質問

MD5とSHA-256の違いは何ですか?
MD5は128ビットのハッシュを生成し高速ですが、衝突に対する脆弱性が発見されているためセキュリティ用途には使えません。SHA-256は256ビットのハッシュで、現在最も広く使われている安全な標準です。
ハッシュ値から元のテキストを復元できますか?
いいえ。ハッシュ関数は一方向関数であるため、ハッシュ値から元のデータを逆算することはできません。ただし、レインボーテーブル攻撃でよくある値を推測される可能性があるため、パスワードにはソルトを追加する必要があります。
HMACは通常のハッシュと何が違いますか?
HMAC(Hash-based Message Authentication Code)は秘密鍵とメッセージを組み合わせてハッシュ化することで、データの整合性だけでなく送信者の認証まで提供します。鍵がなければ同じハッシュを再現できません。
ファイルのハッシュを生成すると何が確認できますか?
ダウンロードしたファイルのハッシュを公式配布元が提供する値と比較すれば、転送中にファイルが破損したり改ざんされたりしていないかを確認できます。
パスワードの保存にMD5やSHA-256をそのまま使ってもいいですか?
おすすめしません。単純なハッシュはレインボーテーブル攻撃に弱いため、ソルトを追加するか、bcryptやArgon2のようなパスワード専用のハッシュアルゴリズムを使用する必要があります。