Toolyard

ハッシュとは? MD5、SHA-1、SHA-256をわかりやすく

データの指紋

ハッシュ関数は、どんな入力(1語、1つの文書、4 GBの動画)でも、決まった長さの短い文字列に変えます。これをハッシュ、ダイジェスト、チェックサムと呼びます。同じ入力からはいつも同じハッシュができ、ほんの少しでも変えるとまったく違うハッシュになります。

入力SHA-256ハッシュ
hello2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
Hello185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
hello!ce06092fb948d9ffac7d1a376e404b26b7575bcc11ee05a4615fef4fec3a308b

大文字1つや感嘆符1つで、結果の文字がすべて変わります。ハッシュ生成で試してみてください。

よいハッシュ関数の条件

  • 決定的: 同じ入力なら、どのコンピューターでも同じハッシュになります。
  • 一方向: ハッシュから入力に戻ることはできません。
  • 衝突しにくい: 同じハッシュになる2つの異なる入力を見つけることが、事実上不可能であるべきです。
  • 計算が速い: チェックサムには便利ですが、それが速いハッシュをパスワードに使ってはいけない理由でもあります(後述)。

ハッシュは暗号化ではない

暗号化は双方向で、鍵があれば元に戻せます。ハッシュには鍵がなく、元に戻せません。わかるのは一致するかどうかだけです。Base64はさらに別物で、誰でもデコードできる単なるエンコードです。

よく使われるアルゴリズム

アルゴリズム長さ状況
MD5128ビット(16進数32文字)2004年から破られている。偶然の破損の確認にだけ
SHA-1160ビット(16進数40文字)破られている。2017年に最初の実際の衝突が公開
SHA-256256ビット(16進数64文字)安全。現在の標準
SHA-512512ビット(16進数128文字)安全。64ビットのコンピューターではSHA-256より速いことが多い

それぞれでhelloをハッシュにすると:

  • MD5: 5d41402abc4b2a76b9719d911017c592
  • SHA-1: aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
  • SHA-256: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824

MD5とSHA-1が「破られている」とは

MD5とSHA-1では、研究者が同じハッシュになる2つの異なるファイルを意図的に作れます。攻撃者は無害なファイルを、チェックサムが一致する有害なファイルにすり替えたり、署名された文書を偽造したりできるわけです。どちらも元に戻すことはできず、偶然の破損ならハッシュは変わるので、MD5のチェックサムでもダウンロードの失敗は見つけられます。ただ、誰もファイルを改ざんしていないことの証明にはなりません。

SHA-256とSHA-512は2001年に公開されたSHA-2ファミリーの一員で、実用的な攻撃は知られていません。2015年に標準化されたSHA-3は別の設計で、予備として用意されています。

ハッシュの使い道

  • ダウンロードの確認: 開発元がファイルのSHA-256を公開し、手元のものと一致すれば同一のファイルです。チェックサムを確認する方法をご覧ください。
  • 電子署名とHTTPSの証明書: 文書や証明書のハッシュを取り、そのハッシュに署名します。
  • Git: コミットやファイルはハッシュで識別されます。Gitは長くSHA-1を使ってきましたが、今はSHA-256にも対応しています。
  • ビットコインなどのブロックチェーン: ブロックはSHA-256でつながっています。
  • 重複ファイルの発見: SHA-256が同じ2つのファイルは同じファイルです。

ハッシュとパスワード

サイトはパスワードそのものではなく、そのハッシュだけを保存すべきです。ログイン時には入力されたものをハッシュにして比べます。ただしSHA-256はこの用途には向きません。速すぎて、漏えいしたデータベースを持つ攻撃者が毎秒何十億回も推測できてしまうからです。パスワードには、bcrypt、scrypt、Argon2のような、そのために作られたソルト付きの遅いハッシュが必要です。ソルトとは、ハッシュにする前に各パスワードに加えるランダムな値で、同じパスワードの2人でもハッシュが違うものになります。

試してみる

ハッシュ生成なら、テキストやファイルのMD5、SHA-1、SHA-256、SHA-384、SHA-512をブラウザの中で一度に計算し、公開されているチェックサムと照合できます。

このガイドで使うツール

その他のガイド