ファイルハッシュ検証ツール
ファイルのSHA-256、SHA-512、またはSHA-1チェックサムをブラウザ内で直接計算し、開発者が公開しているハッシュ値と比較します — ダウンロードしたファイルが破損や改変なく届いたことを確認でき、何もサーバーにアップロードされません。
223回閲覧
ここにファイルをドラッグ&ドロップ、またはクリックして選択してください
計算中…
ファイルを読み込めませんでした。
ソフトウェア配布元がチェックサムを公開する理由
LinuxのISOイメージ、オープンソースのバイナリ、あるいは署名付きインストーラーをダウンロードすると、ダウンロードページには通常、ファイルの横にa94a8fe5ccb19ba61c4c0873d391e987982fbbdのような短い文字列 — チェックサムが記載されています。この文字列は、ファイルのすべてのバイトに対して暗号学的ハッシュ関数を実行した結果です。ファイル内のたった1ビットでも変化すれば、ハッシュはまったく異なるものになります。配布元がこの値を公開しているのは、ファイルをダウンロードしたあとに、あなた自身が同じハッシュ関数を実行し、その結果を公開されている値と比較できるようにするためです。2つの文字列が完全に一致すれば、ディスク上のコピーが配布元がビルドしてアップロードしたバイトとまったく同じであると確信できます — 何も追加されず、何も欠けておらず、何も変更されていません。
チェックサムは、まったく性質の異なる2種類の問題を検出します。1つ目はありふれたものです。ネットワーク接続は転送の途中で切断されることがあり、プロキシは大きなファイルを途中で打ち切ることがあり、ディスクは時折不良セクタに書き込みます — これらのいずれによっても、見た目には完全(サイズは正しく、明らかなエラーもなく開ける)なのに、実際には元のファイルとわずかに異なる破損したバイトを含むファイルが手元に残ることがあり、それだけでインストーラーがクラッシュしたり、後になってデータが静かに壊れたりするのに十分な場合があります。2つ目は悪意によるものです。攻撃者がミラーサーバーを侵害したり、転送中のダウンロードを傍受してマルウェアを仕込んだ改変済みバイナリにすり替えたりした場合、公式で信頼できるページに公開されている値とチェックサムを比較することは、それを実際に検出できる数少ない手段の1つです — ファイル名やファイルサイズを偽装するのは簡単ですが、正確に一致するハッシュを再現するには、まったく同じ元のバイト列を持っている必要があります。
チェックサムは暗号化ではない
用語が混同されがちなので、チェックサムが正確に何を検証しているのかを明確にしておく価値があります。ハッシュ化は一方向で不可逆な処理です。SHA-256はファイルを固定長64文字の16進数文字列に変換しますが、その文字列を元のファイルに戻す処理は存在しません。この一点だけでも、これが暗号化ではないことが分かります — 暗号化は正しい鍵があれば元に戻せるように設計されているのに対し、ハッシュ化はそもそも決して元に戻せないように設計されています。チェックサムが検証するのは完全性であって、機密性ではありません。手元にあるバイト列が、ハッシュ化されたバイト列と同じであることを確認するだけです。ファイルにアクセスできる人は誰でも、その内容をそのまま読むことができます。ハッシュ化は内容を隠すものではまったくありません。ハッシュ化が保証するのは、たとえ意図的であれ偶発的であれ1バイトでも変更されれば、計算したハッシュはもはや公開されている値と一致しなくなり、何かが異なることをすぐに知ることができる、という点です。
この区別はアルゴリズムの選択においても重要です。SHA-1は2017年、GoogleとCWIアムステルダムの研究者が「SHAttered」攻撃を発表したことで、暗号学的な安全性という観点で正式に破られたとされました。これは、同一のSHA-1ハッシュを生成するように意図的に作られた2つの異なるPDFファイルによるもので、十分な動機を持つ攻撃者であれば、正規のファイルと同じチェックサムを持つ悪意あるファイルを作成できることを証明しました。この結果を受けて、SHA-1はTLS証明書、デジタル署名、意図的に衝突を作り出そうとする敵対的な攻撃者への防御など、セキュリティ上重要な用途からは引退することになりました。しかし、このツールが対象とするはるかに一般的なケース — 不安定な接続によってダウンロードが破損していないかを確認する用途 — においては、SHA-1は今でも実用上問題なく機能します。なぜなら、誰もあなたの特定の破損したダウンロードを狙ったハッシュに一致するように意図的に作り込んでいるわけではなく、偶発的な破損はランダムなビット反転であって、意図的な衝突の構築ではないからです。とはいえ、配布元が選択肢を用意している場合、SHA-256は計算コストが余分にかかることなくこの懸念を完全に解消するため、より安全なデフォルトの選択肢と言えます。
よくある質問
チェックサムは正確に何を検証するのですか?
チェックサムは、暗号学的ハッシュ関数(SHA-256、SHA-512、またはSHA-1)をファイルのすべてのバイトに対して実行した結果です。完全性を確認するものです。つまり、手元にあるファイルが、公開されているハッシュを生成したファイルとバイト単位で完全に一致していることを示します。内容の意味や安全性、出所については何も語りません — ハッシュが生成されて以降、1バイトも追加・削除・変更されていないことを示すだけです。
ダウンロードしたファイルのハッシュがウェブサイトのものと一致しないのはなぜですか?
圧倒的に多い原因は、ダウンロードが不完全または破損していることです — 再開に対応したダウンロードマネージャーを使って再度試してみてください。ほかの原因としては、同じページ内の別バージョンや別ファイルのハッシュと比較してしまった、あるいは期待されるハッシュをコピーする際に誤って余分な空白や文字が混入した、といったことが考えられます。悪意ある改ざんを疑う前に、公式ソースから再ダウンロードして再確認してください。実際の改ざんはまれですが、それこそがチェックサムが検出するために存在するシナリオです。
SHA-1はダウンロードの検証に使ってもまだ安全ですか?
接続の切断やディスクの不良セクタといった偶発的な破損を確認する用途であれば、はい、SHA-1は今でも実用上問題なく機能します。しかし、動機を持つ攻撃者が特定のハッシュに一致する悪意あるファイルを意図的に作り込む可能性がある用途では、いいえ、安全ではありません。SHA-1は、2017年にGoogleとCWIアムステルダムによる「SHAttered」衝突攻撃によって破られ、2つの異なるファイルが同じSHA-1ハッシュを共有し得ることが証明されました。選択できる場合は、SHA-256を使えば追加コストなしでこの懸念を完全に回避できます。
この用途において、SHA-256とSHA-512の違いは何ですか?
どちらもSHA-2ファミリーに属しており、実用上知られている暗号学的な弱点はありません。SHA-512は内部でSHA-256の32ビットワードではなく64ビットワードを扱うため、128文字とより長いダイジェストを生成するにもかかわらず、64ビットハードウェア上では同程度、あるいはそれ以上の速度で計算できます。日常的なチェックサム検証であればどちらでも問題ありません — 配布元が実際に公開しているものを使ってください。それが比較対象となる唯一の値だからです。
チェックサムが一致すれば、ファイルが安全であること、あるいは誰が公開したかが証明されますか?
いいえ。一致が証明するのは、手元のバイト列が特定の期待されるハッシュを生成したバイト列であるということだけです — その期待されるハッシュ自体が信頼できる情報源から来たものかどうかについては、何も語りません。攻撃者が期待されるチェックサムを掲載している同じページを侵害すれば、自分の悪意あるファイルに一致するハッシュを公開することができ、検証は「一致」と報告してしまいます。チェックサムが答えるのは「ファイルは無傷で届いたか」であって、「主張どおりの人物によって公開されたか」ではありません — 後者の問いにはハッシュだけでなく、PGP/GPGのような暗号学的署名が必要です。
関連ツール
問題を報告
ファイルハッシュ検証ツール
コメント
まだコメントはありません — 最初のコメントを書いてみましょう!