MD5 ハッシュとは
MD5 はハッシュ関数です。1文字から大きなファイルまで、どんな入力からでも128ビットの固定長の指紋を作ります。通常は32文字の16進数で書き表します。同じ入力からは必ず同じハッシュが得られます。1文字でも変わると、まったく違うハッシュになります。
MD5 は1992年に Ron Rivest が発表しました。現在でも、ダウンロードページのチェックサム、重複ファイルの発見、キャッシュのキー、手軽な変更検知などでよく使われています。ただし、もはや安全とはみなされていません。この点については後で説明します。
MD5 ハッシュ生成ツールの使い方
テキストをハッシュ化する。 「ハッシュ化する対象」で「テキスト」を選んだまま、欄に入力するか貼り付けます。入力に合わせてハッシュが更新されます。テキストは、スペースや改行も含めて入力したとおりに UTF-8 でハッシュ化されます。
ファイルをハッシュ化する。 「ファイル」を押し、500 MB までのファイルを選びます。ファイルは端末の中で読み込まれます。ハッシュの準備ができると、ファイル名とバイト単位のサイズが表示されます。
結果を確認する。 「ハッシュ」パネルには4つの結果が表示されます。
- MD5:強調表示、16進数32文字
- SHA-1:40文字
- SHA-256:64文字
- SHA-512:128文字
それぞれに「コピー」ボタンがあります。大文字が必要な場合は「大文字」を押してください。
既知のハッシュと比較する。 ダウンロードページに載っているチェックサムをこの欄に貼り付けます。ツールが4つの結果すべてと照合し、どれと一致するかを表示します。どれとも一致しない場合は、ハッシュの長さからどのアルゴリズムらしいかを表示します。
MD5 の仕組み
MD5 は、入力を512ビットの倍数になるまで埋め、ブロックごとに処理します。各ブロックは、加算、ローテート、論理演算を組み合わせた64ラウンドのビット攪拌を通ります。最後に残った4つの32ビットワードの状態がハッシュになります。これだけ攪拌されるため、出力はランダムに見え、入力のどこか1ビットが変わるだけで全体が変わります。これを雪崩効果と呼びます。
ハッシュの例
| 入力 | MD5 |
|---|---|
| (空) | d41d8cd98f00b204e9800998ecf8427e |
abc |
900150983cd24fb0d6963f7d28e17f72 |
hello |
5d41402abc4b2a76b9719d911017c592 |
Hello |
8b1a9953c4611296a827abf8c47804d7 |
Hello, World! |
65a8e27d8879283831b664bd8b7f0ad4 |
The quick brown fox jumps over the lazy dog |
9e107d9d372bb6826bd81d3542a419d6 |
The quick brown fox jumps over the lazy dog. |
e4d909c290d0fb1ca068ffaddf22cbd0 |
最後の2行の違いはピリオド1つだけですが、ハッシュには共通点がまったくありません。日本語も UTF-8 のバイトとしてハッシュ化されます。たとえば こんにちは の MD5 は c0e89a293bd36c7a768e4e9d2c5475a8 です。
同じ入力 abc を、ほかのアルゴリズムでハッシュ化した結果です。
| アルゴリズム | abc のハッシュ |
|---|---|
| SHA-1 | a9993e364706816aba3e25717850c26c9cd0d89d |
| SHA-256 | ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad |
セキュリティ:MD5 に向いている用途と向いていない用途
向いている用途: ファイルが破損せずに届いたかの確認、重複ファイルの発見、キャッシュのキー作成、セキュリティに関係しない ID。
向いていない用途: パスワード、デジタル署名、証明書、そして悪意のある第三者がファイルを改ざんしていないことの証明。MD5 に対する実用的な衝突攻撃は2004年から公開されています。攻撃者は、同じ MD5 を持つ2つの異なるファイルを作れます。
パスワードには低速なハッシュが必要です。 SHA-256 でさえ、パスワードには速すぎます。推測を遅らせるように設計された bcrypt、scrypt、Argon2 を使ってください。5f4dcc3b5aa765d61d8327deb882cf99(「password」という単語)のような単純な MD5 のパスワードハッシュは、照合サイトに入れればすぐに判明します。
そのほかの MD5 ハッシュの求め方
Linux。 md5sum file.zip でハッシュとファイル名が表示されます。echo -n hello | md5sum でテキストをハッシュ化できます。-n を付け忘れると改行までハッシュ化されます。
macOS。 md5 file.zip、テキストなら md5 -s hello です。
Windows。 コマンドプロンプトでは certutil -hashfile file.zip MD5、PowerShell では Get-FileHash file.zip -Algorithm MD5 を使います。
Python。 hashlib.md5(b'hello').hexdigest() は 5d41402abc4b2a76b9719d911017c592 を返します。
Node.js。 require('crypto').createHash('md5').update('hello').digest('hex') でも同じ値になります。
関連ツール
ハッシュではなくパスワードが必要なら、強力なパスワード生成ツールを使ってください。一意の ID が欲しい場合は、ランダムなデータをハッシュ化するより UUID 生成ツールの方が適しています。バイナリデータをテキストとして表すには、Base64 エンコード・デコードをご覧ください。