チェックサムでダウンロードとファイルの完全性を検証する
暗号ハッシュが実際に証明するもの、MD5 と SHA-1 が今日では完全性専用である理由、インストーラーの段階的検証、そして機密テキストをアップロードせずにハッシュする方法。
真正性ではなく完全性
暗号学的ハッシュは入力から固定長の指紋を作ります。1 ビットの変更でもダイジェストが変わる可能性は極めて高く、信頼できる新しい方式での一致は、二つのファイルのバイト列が同じである強い証拠です。
- 完全性の証拠信頼できる SHA-256 ダイジェストの一致は、手元のコピーと公開ファイルのバイト列が同じである強い証拠ですが、誰が公開したかは証明しません。
- 真正性は別問題真正性は証明されません。ダウンロードの横に印刷されたチェックサムは、そのファイルを誰が書いたかについて何も語りません。ダウンロードを差し替えられる攻撃者は、印刷されたチェックサムも差し替えられます。
- 署名は別の道具真正性には別の仕組みが必要です。すでに信頼している鍵で検証する署名か、ダウンロード自体より信頼できる経路で届けられるチェックサムです。
MD5 と SHA-1 は今や完全性専用
MD5 は 128 ビットのダイジェストを 32 桁の十六進文字として出力し、SHA-1 は 160 ビットを 40 桁で出力します。どちらも高速で、偶発的な破損の発見には問題なく使えますが、どちらも公的に実演された衝突があるため、一致するダイジェストを持つ悪意のファイルを意図的に作る攻撃者には抵抗できません。
実務ルール:MD5 や SHA-1 の一致は、切断されたダウンロードや故障しつつあるディスクを今でも捕らえます。事故は衝突を計算しないからです。これらのアルゴリズムにもはやできないのは、疑う理由のあるファイルを清白とすることです。その判断は今や SHA-256 以上のものです。
- MD5 は破られているMD5 衝突は長年実用的です。同じ MD5 ダイジェストを持つ二つの異なるファイルを故意に作れるため、MD5 は事故と攻撃をもはや区別できません。
- SHA-1 は破られているSHA-1 も同じ道をたどりました。実演された衝突がセキュリティプリミティブとしての寿命を終わらせ、ブラウザー、認証局、コードホストはすべて離脱しています。
- SHA-2 が基線SHA-2 ファミリーが現在の基線です。SHA-256(64 桁の十六進)が公開ダウンロードチェックサムのデフォルトで、SHA-224、SHA-384、SHA-512(56、96、128 桁)が制約の異なる兄弟です。
インストーラーを段階的に検証する
検査全体は 1 分もかからず、マシンにすでにあるツールを使います。順序が大事です。発行者の公式ページから期待値のダイジェストを取得し、ローカルのコピーをハッシュし、全文字を比較します。
不一致が常に悪意とは限りません。切断されたダウンロードやキャッシュプロキシは日常的にファイルを壊します。ただし対応は同じです。そのファイルは検証に失敗したのであり、唯一正しい次の一手はソースからの新しいコピーです。
- 期待値を取得公開されたチェックサムはベンダーの公式ダウンロードまたはリリースページで探します。できれば自分でたどり着いたドメイン上の HTTPS で、ミラーや検索結果のスニペットではなく。
- ローカルでハッシュダウンロードしたファイルをローカルでハッシュします。macOS や Linux では shasum -a 256、Windows では PowerShell の Get-FileHash。どちらもディスク上で動き、アップロードはありません。
- 厳密に比較ダイジェスト全体を大文字小文字を無視して一字ずつ比較します。一文字でも違えばファイルを破棄し、ソースから新しいコピーを取得します。インストールして祈るのはやめましょう。
機密テキストをアップロードせずにハッシュする
実際の検査対象の多くはファイルではなくテキストです。設定の断片、ライセンスキー、トークンの断片、同僚が電話で読み上げた値。それらを適当なウェブサイトに貼り付けることは、他人のログに渡すことを意味するので、ハッシュはローカルで起きる必要があります。
SHA-256 ハッシュ生成・検証は、公開チェックサムの現在標準である 64 桁をカバーします。そこでの検証は復号ではなく比較です。あなたのテキストがハッシュされ、二つの値がブラウザー内で比較されます。
- ローカル設計文字は正規化せず UTF-8 として計算します(上限 1 MiB)。ファイルは元のバイト列を 1 MiB ずつ処理し、上限は 256 MiB、空ファイルにも対応します。ダイジェストの一致は出所の認証ではありません。MD5 と SHA-1 は悪意ある改ざんへの対策には不適切です。キャンセル可能なローカル Worker の実行上限は 15 秒です。
- 明示的な比較検証モードは明示的な比較です。期待値のダイジェストを貼ると、作業領域は一致・不一致を報告し、不正な値を事前に拒否します。MD5 はちょうど 32 桁、SHA-256 はちょうど 64 桁の十六進文字です。
- 一方向の構造ダイジェストは復号できませんが、短い、または予測しやすい入力は推測して再ハッシュできます。パスワードや低エントロピーの秘密を、ソルトなしの汎用ハッシュで保護しないでください。
比較をルーティンに組み込む
チェックサムは、比較が後付けではなく習慣になって初めて機能します。いくつかの小さな規律が、毎回の検査を確実にします。
UTF-8 テキストまたはファイルの元のバイト列から 16 進ダイジェストを作成・比較します。 検証は選んだ入力のダイジェストをローカルで比較します。復号や出所の認証は行いません。
- 全体を比較ダイジェストは全文字を比較します。一部だけでは検証が弱まり、MD5 や SHA-1 は全文字を比べてもダイジェスト衝突が起こり得ます。
- アルゴリズムを明記アルゴリズム名をダイジェストと一緒に保管します。64 桁の十六進文字は複数のアルゴリズムから来得るもので、ラベルのないチェックサムは推測を誘います。
- ホップごとに再計算USB ドライブ、同期クライアント、メールを経てファイルを移すたびにハッシュし直します。各ホップは新しい破損の機会であり、ダイジェストの同行は無料です。
自分のファイルにチェックサムを公開する
ファイルを配布しているなら——リリースバイナリ、データセット、社内ツール——チェックサムを一緒に公開しましょう。成果物ごとに 1 コマンドのコストで、受け取る全員があなたに連絡せず完全性を検証できるようになります。
より長い形式が必要なとき、SHA-512 ハッシュ生成・検証は 128 桁のダイジェストをローカルで生成し、SHA-224 と SHA-384 の兄弟が SHA-2 ファミリーの残りをカバーします。同じエンジン、同じタブ、同じ境界です。
- SHA-256 は最低限最低限 SHA-256 を公開します。利用者が SHA-512 の方が速いプラットフォームで検証する場合はそれも併記し、各ダイジェストにアルゴリズムを明記します。
- 同じ信頼レベルチェックサムはダウンロード自体と同じ信頼レベルから配信します。理想的には、ユーザーがすでに権威と認めているページやリポジトリから。
- MD5 はレガシーラベルMD5 の行はレガシー互換ラベルとしてのみ残し、偶発的破損に対する完全性チェックであると明記します。セキュリティ検証としては決して使いません。
よくある質問
SHA-256 のチェックサムは実際に何を証明しますか?
MD5 と SHA-1 は今でも安全ですか?
ダウンロードしたインストーラーを自分のマシンで検証するには?
検証はツールを信頼するための一部です。
ファイルを渡す前に、あらゆるオンラインツールのデータ経路を確かめる方法を学びましょう。チェックサムが報いるのは、そうした健全な懐疑心です。