このツールとは?
MD5は、任意の入力を固定長の32文字の16進数フィンガープリントに変換するハッシュ関数です。同じ入力に対しては常に同じハッシュ値が生成され、たった1文字の変更でもまったく異なる結果が得られます。この特性により、ハッシュ値はチェックサム、キャッシュキー、重複排除、およびデータ整合性チェックなどに有用です。
セキュリティに関する注意:MD5は暗号学的に破綻しており(衝突を人為的に生成できるため)、パスワードや署名には絶対に使用しないでください。それらには、SHA-256(以下にも記載)またはbcryptのような専用のパスワードハッシュ関数を使用してください。チェックサムやキャッシュキーなど、セキュリティに関係のない用途では、MD5を引き続き使用しても問題ありません。
なぜこれを使うのか?
- ファイルや文字列が誤って変更されていないことを確認するために、チェックサムを生成します。
- 決定論的なキャッシュキーと重複排除IDを作成します。
- 既知のMD5値と比較して、データの整合性を確認します。
- SHA-1とSHA-256を同時に取得できます。別のツールを用意する必要はありません。
- 100% ローカル:入力データはブラウザの外に出ることはありません。
使い方
- 入力ボックスにテキストを入力するか、貼り付けてください。
- 「ハッシュを生成」をクリックしてください。
- MD5、SHA-1、およびSHA-256の結果を確認してください(お使いのシステムで大文字の入力を求められる場合は、「大文字」にチェックを入れてください)。
- 必要なハッシュの横にある「コピー」をクリックしてください。
例
入力
hello出力
MD5: 5d41402abc4b2a76b9719d911017c592
SHA-256: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824ハッシュは決定論的です。「hello」と入力すれば、どのツールでも、いつでも、まったく同じ値が生成されます。
どのハッシュを使うべきでしょうか?
これら3つはすべて一方向ハッシュですが、互いに置き換え可能というわけではありません。どちらを選ぶべきかは、セキュリティが必要なのか、それとも単なるフィンガープリントでよいのかによって、完全に異なります。
| アルゴリズム | 出力サイズ | 次のような用途にご利用ください | 以下の用途には使用しないでください |
|---|---|---|---|
| MD5 | 128ビット(32ヘキサデシマル文字) | チェックサム、キャッシュキー、重複排除、意図しないファイル変更の検出 | パスワード、デジタル署名、その他セキュリティ上重要なもの――これらすべてにおいて、衝突を人為的に作り出すことが可能です |
| SHA-1 | 160ビット(40ヘキサデシマル文字) | レガシーシステムとの互換性(例:古いGitコミットハッシュなど) | セキュリティ上の懸念がある新しい設計 — 2017年以降、実用的な衝突攻撃が存在している |
| SHA-256 | 256ビット(64 16進文字) | 改ざん耐性が重要な場面におけるデジタル署名、TLS証明書、ブロックチェーン、チェックサム | パスワードを直接保存すること――SHA-256でさえ、その用途には処理速度が速すぎます。代わりにbcrypt、scrypt、またはArgon2を使用してください。 |
一般的な利用例
- ダウンロードしたファイルを実行する前に、そのファイルのハッシュ値を算出し、その結果を発行元のチェックサムと比較することで、両者が一致しているかを確認する。
- URL やクエリ文字列から決定論的なキャッシュキーを生成し、同一のリクエストが常に同じキャッシュエントリにマッピングされるようにする。
- 大量のレコードを重複排除する際、各レコードをハッシュ化し、全文を比較する代わりにハッシュ値を比較する。
- ファイルの2つのコピーがバイト単位で同一であるかどうかを、ファイルを開いたり直接比較したりすることなく、素早く確認する。
なぜ衝突はセキュリティ上重要だが、チェックサム上では重要ではないのか
ハッシュの衝突とは、2つの異なる入力が同じハッシュ出力を生成することを指します。これは(入力が無限であり、出力が固定長であるため)どのハッシュ関数においても数学的には避けられない現象ですが、実際のリスクは使用ケースによって大きく異なります。 セキュリティ署名の場合、意図的に仕組まれた衝突により、攻撃者はハッシュ値を変えずに正当なファイルを悪意のあるファイルにすり替えることが可能になります。これはまさに、2004年以降MD5に対して、また2017年以降SHA-1に対して実証されてきたことです。 チェックサムやキャッシュキーの場合、誰も衝突を意図的に作り出そうとはしません。単に、ファイルが誤って破損したのか、あるいは2つの任意の文字列がたまたま同一であるのかを確認するだけです。したがって、MD5のセキュリティ用途を破る同じ数学的な弱点は、その非セキュリティ用途には実質的に何の影響も及ぼしません。
よくある質問
MD5ハッシュを復号して、元のテキストに戻すことはできますか?
いいえ――ハッシュは設計上、一方向性を持つため、ハッシュ値から元のデータを復元することはできません。「MD5復号」を謳うサイトは、一般的な入力値について事前に計算済みの巨大なテーブルからハッシュ値を検索しているに過ぎず、そのため固有の入力値については復元できないのです。
MD5はパスワードの保存に安全ですか?
いいえ、絶対にダメです。MD5はブルートフォース攻撃に弱く、衝突攻撃も確認されています。パスワードにはbcrypt、scrypt、またはArgon2を使用してください。MD5は、チェックサムのようなセキュリティを目的としない用途にのみ許容されます。
なぜ同じテキストなのに、別のツールとは異なるハッシュ値が算出されるのでしょうか?
通常は目に見えない違い:末尾の改行やスペース、異なる改行コード(\r\n 対 \n)、あるいは異なるテキストエンコーディングなどです。バイト単位で同一の入力であれば、常に同一のハッシュ値が得られます。
MD5、SHA-1、SHA-256の違いは何ですか?
これらは出力長とセキュリティの面で異なります。MD5(128ビット)とSHA-1(160ビット)は、セキュリティ用途としてはいずれも破られています。SHA-256(256ビット)は現在の標準であり、依然として安全です。迷った場合は、SHA-256を使用してください。
私のテキストはハッシュ処理のためにサーバーに送信されますか?
いいえ。MD5はJavaScriptで計算され、SHA-1およびSHA-256はブラウザに組み込まれたWeb Crypto APIを使用して計算されます。すべての処理は端末内で行われます。