ハッシュ値の生成とチェックサムの照合方法
- 入力をテキストのままにして入力または貼り付けるか、ファイルに切り替えて端末内のファイルを選びます。
- MD5、SHA-1、SHA-256、SHA-384、SHA-512の値が表にまとめて表示され、行ごとにコピーボタンがあります。貼り付け先が大文字の16進数を求めるなら大文字をオンにします。
- ダウンロードしたファイルを検証するには、配布元が公開しているチェックサムをチェックサムを照合の欄に貼り付けます。アルゴリズムを指定する必要はありません。一致する行が緑色になり、メッセージにアルゴリズム名が表示されます。大文字・小文字の違いと前後の空白は無視されます。
ファイルはサーバーに送られず、ブラウザ自身が読み込んでハッシュを計算します。そのため大きなインストーラーや機密文書を確認してもアップロードの時間はかからず、内容が外に出ることもありません。ただし大きなファイルは丸ごとメモリに読み込むため、数GBのディスクイメージはスマートフォンでは遅くなることがあります。
ハッシュとは
暗号学的ハッシュ関数は、単語ひとつでも契約書でも4GBの動画でも、どんな入力も決まった長さの「指紋」に変換します。同じ入力からは常に同じ値が得られ、少しでも変わればまったく違う値になり、ハッシュ値から元の入力を逆算する現実的な方法はありません。つまりハッシュは暗号化ではなく、鍵もなければ復号するものもありません。
| アルゴリズム | 長さ | 16進数の文字数 | 現在の位置づけ |
|---|---|---|---|
| MD5 | 128ビット | 32 | セキュリティ用途では破られている。偶発的な破損の検出には十分 |
| SHA-1 | 160ビット | 40 | セキュリティ用途では破られている。古いツールやGitでまだ使われる |
| SHA-256 | 256ビット | 64 | チェックサムや署名の現在の標準 |
| SHA-384 | 384ビット | 96 | SHA-2ファミリー、安全 |
| SHA-512 | 512ビット | 128 | SHA-2ファミリー、安全 |
公開されているチェックサムの長さでアルゴリズムがわかります。16進数32文字ならMD5、64文字ならSHA-256です。
計算例
hello→ SHA-2562cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824、MD55d41402abc4b2a76b9719d911017c592。- 先頭だけ大文字の
Hello→ SHA-256185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969。1文字違うだけで、まったく無関係な結果になります。 The quick brown fox jumps over the lazy dog→ MD59e107d9d372bb6826bd81d3542a419d6。末尾にピリオドを付けるとe4d909c290d0fb1ca068ffaddf22cbd0になります。- 空の入力にもハッシュ値はあり、SHA-256は
e3b0c442…b855です。このページは入力するまで表を空欄にしますが、この値が自分のログやデータベースに現れたら、どこかで空文字列をハッシュしています。
コマンドラインの結果と一致しないとき
テキストは入力したとおりのUTF-8のバイト列としてハッシュされます。結果が違うのは、ほぼ必ず目に見えないバイトのせいです。
- 末尾の改行。
echo hello | sha256sumはhelloの後の改行まで含めてハッシュし、5891b5b5…6be03を出力します。このページと同じ値にするにはprintf %s helloかecho -n helloを使います。 - 改行コード。Windowsで保存したファイルの改行はCR LFですが、ブラウザの入力欄に貼り付けたテキストはLFだけになります。ファイルを確認するときは中身をコピーせず、ファイルモードでファイルそのものをハッシュしてください。
- 文字コード。
caféをUTF-8でエンコードするとMD5は07117fe4a1ebd544965dc19573183da2ですが、古いLatin-1では961f50f6282239d09e48f812c1ca7276になります。Shift_JISで保存した日本語のテキストも、同様にUTF-8とは別の値になります。
ファイルの結果は、Linuxの sha256sum ファイル、macOSの shasum -a 256 ファイル、Windows PowerShellの Get-FileHash ファイル(既定はSHA-256)と同じです。
MD5とSHA-1はセキュリティには使えません
安全なハッシュでは、同じ値になる異なる2つの入力(衝突)を見つけることが事実上不可能でなければなりません。MD5は2004年、SHA-1は2017年に実際の衝突が公表されており、攻撃者はチェックサムが同じ2つのファイルを用意できます。ダウンロードの途中切れのような偶発的な破損の検出にはまだ使えますが、誰かに改ざんされうるものにはSHA-256以上を使ってください。
これらの関数はどれも、パスワードの保存に使ってはいけません。高速に計算できるよう設計されているため、流出したパスワードハッシュの一覧は、一般的なグラフィックスカードで毎秒数十億通りの候補と照合されてしまいます。パスワードの保存には、Argon2id、scrypt、bcryptのような、低速でソルトを使う専用のアルゴリズムが必要です。そもそも強いパスワードが必要なら、パスワード生成をお試しください。
よくある質問
ハッシュは復号したり元に戻したりできますか?
できません。「MD5を復号」とうたうサイトは、よく使われる語をあらかじめハッシュした巨大な表から値を探しているだけです。hello なら見つかりますが、ランダムな20文字の文字列は見つかりません。
自分で配布するファイルのチェックサムにはどれを使うべきですか?
SHA-256です。どこでもサポートされ、貼り付けやすい長さで、実用的な攻撃は知られていません。値の横にアルゴリズム名も書いておきましょう。
チェックサムが一致すればファイルは安全ですか?
手元のファイルが、チェックサムの元になったファイルと1バイト残らず同じだということは証明されます。ただし攻撃者がWebサイト自体を乗っ取っていれば、ファイルとチェックサムを両方差し替えられます。別の信頼できる経路で得たチェックサムや、署名付きのリリースを優先してください。
「安全な(https)ページでのみ利用できます」と表示されるのはなぜですか?
SHAの各アルゴリズムはブラウザのWeb Crypto APIで計算しており、このAPIは安全な接続でしか動作しません。MD5はページ自身のコードで計算するため、その場合でも表示されます。