MD5・SHA-1・SHA-256、ダウンロードにはどれを使うべきか
ダウンロードしたファイルを確認するときは、発行元が提供していれば必ずSHA-256またはSHA-512を使いましょう。MD5とSHA-1は、ダウンロードが途中で切れたといった偶発的な破損の検出には今も役立ちます。しかし研究者により、異なる2つのファイルを同じMD5またはSHA-1のハッシュ値にできることが示されています。そのため、これらのアルゴリズムで一致しても、ファイルが発行元の作成したものだと証明することはできません。ハッシュは指紋であり、暗号化ではありません。信頼できる提供元から得たときにだけ意味を持ちます。
ハッシュ生成ダウンロードしたファイルは正しい?無料で使うハッシュとは何をして、何をしないのか
ハッシュ関数は、どれだけ大きなデータでも固定長の指紋に変換します。同じ入力からは必ず同じ指紋が得られ、1バイトでも変えると全く別の指紋になります。このため、比較に便利です。手元のファイルの指紋が公開されているものと一致すれば、2つのファイルはほぼ確実に同一です。
ハッシュは暗号化ではありません。元のファイルに戻すことはできず、鍵も使いません。何かを隠すものでもなく、それ自体ではファイルを誰が作ったかを証明できません。チェックサムとは、発行元がダウンロードの横に載せて比較できるようにしたハッシュのことです。
よく使われる4つの選択肢
| アルゴリズム | 出力の長さ | 用途 |
|---|---|---|
| MD5 | 128ビット、16進数32文字 | 偶発的な破損の検出のみ |
| SHA-1 | 160ビット、16進数40文字 | 従来の確認用。セキュリティ目的では避ける |
| SHA-256 | 256ビット、16進数64文字 | ダウンロードの一般的な選択肢 |
| SHA-512 | 512ビット、16進数128文字 | 同じ系統で、出力がより長い |
MD5とSHA-1では不十分な理由
衝突とは、異なる2つの入力が同じハッシュ値になることです。MD5の衝突は2004年から知られています。2017年には、同じハッシュ値を持つ2つの異なるPDFファイルを作れることが実証されたSHA-1の衝突が公表されました。
ダウンロードの場合、これは重要です。ファイルを改ざんできる攻撃者は、正規のファイルと同じMD5またはSHA-1のハッシュ値を持つ悪意のあるファイルを作れるからです。発行元がMD5またはSHA-1しか掲載していない場合、一致しても正規のファイルだとは言えません。ハッシュ生成ツールのFAQにも同じことが書かれています。セキュリティに関わる確認にはSHA-256またはSHA-512を使いましょう。
執筆時点で、実用的なSHA-256の衝突は知られていません。そのため、SHA-256が一般的な選択肢となっています。手順はSHA-256チェックサムの確認ガイドで解説しています。
適切なアルゴリズムの選び方
- 発行元がSHA-256またはSHA-512を提供している場合は、それを使いましょう。セキュリティ目的ではMD5とSHA-1は使わないでください。
- MD5またはSHA-1しか提供されていない場合でも、ハッシュ生成で確認しましょう。破損や不完全なダウンロードは検出できます。一致した場合は「破損していない」と考え、「正規のファイルである」とは考えないでください。
- ハッシュ値が提供されていない場合、この方法では整合性を確認できません。公式ページからHTTPSで入手しましょう。プロジェクトが署名付きのチェックサムファイルを公開している場合は、その署名を確認してください。
ハッシュ生成は、テキストまたは1つのファイルについて、MD5、SHA-1、SHA-256、SHA-384、SHA-512を一度に計算します。ファイルはブラウザー内で読み込まれ、どこにもアップロードされません。発行元のハッシュ値を「期待するハッシュ値」に貼り付けてください。ツールは比較する前に空白を取り除き、大文字と小文字を区別しません。そのため、大文字で書かれていたり、区切られて表記されていたりしても一致と判定されます。非常に大きなファイルではブラウザーのメモリが不足することがあります。その場合は、Linuxならsha256sum、Macならshasum -a 256といったコマンドラインツールを使いましょう。
一致が示すこと
ハッシュ値が一致すれば、手元のファイルはハッシュ化されたファイルとほぼ確実に同一です。ただし、誰がハッシュ化したのか、またハッシュ化されたファイルが発行元が配布しようとしたものかどうかまでは示しません。そのためには、アルゴリズムよりも提供元が重要です。ハッシュ値が発行元の公式リリースページから得たもので、メッセージ内のリンクを経由せず直接そのページにアクセスしたなら、一致は強い根拠になります。ハッシュ値がコメント、ミラーサイト、フォーラムから得たものなら、信頼できるページで見つけるまでは未確認として扱ってください。
チェックサムには信頼できる提供元が必要
ファイルと同じサーバーに置かれたチェックサムが示すのは、そのサーバーが保持しているものと一致しているという事実だけです。攻撃者がファイルを差し替えれば、その横にあるチェックサムも差し替えられてしまいます。チェックサムが役立つのは、プロジェクトの署名付きリリースノートや、ダウンロードリンクとは別に独自にたどり着いたページなど、別の場所から提供されている場合です。
パスワードのハッシュ化は別の考え方
パスワードの保存にもハッシュ化は使われますが、パスワード専用に設計された低速なハッシュを使い、各パスワードごとに固有のソルトを付ける必要があります。SHA-256のような高速なハッシュは、この用途には適しません。ダウンロードの確認の目的は比較であり、その用途ではSHA-256が十分に役立ちます。
注意すべきケース
- 大文字と小文字。 16進数の文字AからFは大文字でも小文字でも同じ意味なので、大文字と小文字の違いを気にせず比較してください。
- 途中で切り詰められたハッシュ値。 一部のサイトではハッシュ値の先頭部分だけを掲載しています。短い一致はほとんど根拠になりません。必ず全体を比較してください。
- 複数のファイル。 リリース全体に対して1つのチェックサムファイルを公開しているプロジェクトもあります。正確なファイル名の行を探してください。別のファイルの行と一致しても、何も証明されません。
英語原文をもとに、AIの支援を受けて翻訳しています。
コメント
まだコメントはありません。最初のコメントを書いてみましょう。


