インターネット経由でダウンロードしたソフトウェアの検証に怠慢だったかもしれませんが、私(または私が会ったことのある人)は、ダウンロードしたコンテンツのチェックサムを検証しようとしたことがありません。そのため、ダウンロードしたアイテムの整合性を確認する方法についてはわかりません。
ダウンロードしたファイルのチェックサムを確認するにはどうすればよいですか?
通常、これは所有者側で開始し、ダウンロードするファイルのチェックサムを表示します。これは次のようになります。
md5: ba411cafee2f0f702572369da0b765e2
sha256: 2e17b6c1df874c4ef3a295889ba8dd7170bc5620606be9b7c14192c1b3c567aa
次に、使用しているオペレーティングシステムに応じて、必要なファイルをダウンロードしたら、そのハッシュを計算できます。まず、ダウンロードしたファイルのディレクトリに移動します。
CertUtil -hashfile filename MD5
/CertUtil -hashfile filename SHA256
md5sum filename
/sha256sum filename
md5 filename
/shasum -a 256 filename
Webサイトからのハッシュのチェックに伴う問題は、ファイルをダウンロードしても安全であるとは判断されず、ダウンロードしたものがバイトごとに正しいファイルであるということだけです。 Webサイトが侵害された場合、別のファイルのハッシュが表示される可能性があり、悪意のある可能性があります。
チェックサム、PGP、およびSHA=を質問のタイトルで言及していますが、これらはすべて異なるものです。
チェックサムは、破損によってコピーされたファイルが元のファイルと異なる(「高」のさまざまな定義の)ことを引き起こしていないことを高い信頼度で単純に検証します。一般に、チェックサムは意図的な変更が行われなかったことを保証するものではなく、多くの場合、同じチェックサムを保持しながらファイルを変更することは簡単です。チェックサムの例は、CRC、Adler-32、XOR(parity byte(s)))です。
暗号化ハッシュは、単純なチェックサムに追加のプロパティを提供します(すべての暗号化ハッシュをチェックサムとして使用できますが、すべてのチェックサムが暗号化ハッシュであるとは限りません)。
暗号化ハッシュ(壊れていない、または弱いハッシュではない)は、衝突とプリイメージ耐性を提供します。衝突耐性は、同じハッシュを持つ2つのファイルを作成することは不可能であることを意味し、プリイメージ耐性は、特定のターゲットファイルと同じハッシュを持つファイルを作成することが不可能であることを意味します。
MD5とSHA1は、衝突に関してはどちらも壊れていますが、プリイメージ攻撃に対して安全です( 誕生日のパラドックス 衝突が発生しやすいため)。 SHA256は今日一般的に使用されており、両方に対して安全です。
ハッシュを使用してファイルを検証する場合は、ハッシュをseparateから取得する必要があります信頼できるソース。ファイルをダウンロードしているのと同じサイトからハッシュを取得しても、何も保証されません。攻撃者がそのサイトのファイルを変更したり、接続を傍受して変更したりできる場合、悪意のあるバージョンをファイルに置き換え、一致するようにハッシュを変更できます。
敵対者が正当なファイルを変更できる場合(たとえば、一見無害なバグ修正に寄与する場合)、衝突耐性のないハッシュを使用すると問題が発生する可能性があります。元のファイルに無害な変更を加えて、悪意のあるファイルと同じハッシュを作成させ、送信する可能性があります。
ハッシュを検証する意味のある最良の例は、ソフトウェアの信頼できるWebサイトからハッシュを取得し(もちろんHTTPSを使用)、信頼されていないミラーからダウンロードされたファイルを検証する場合です。
Linuxではmd5sum
、sha1sum
、sha256sum
などのユーティリティ。 Connor Jの回答 は、Windowsの例を示しています。
チェックサムやハッシュとは異なり、署名には秘密が含まれます。ファイルのハッシュはだれでも計算できますが、署名は秘密を持っている人しか計算できないので、これは重要です。
署名は非対称暗号を使用するため、公開鍵と秘密鍵があります。秘密鍵で作成された署名は公開鍵で検証できますが、公開鍵を使用して署名を作成することはできません。このようにして、私が自分の鍵で何かに署名すると、それが私であったことを確実に知ることができます。
もちろん、今問題は、正しい公開鍵を使用して署名を検証する方法を確認することです。鍵の配布は困難な問題であり、ハッシュを使用していた場所に戻っている場合でも、別の信頼できるソースから取得する必要があります。しかし this の答えが説明するように、あなたはそれについて心配する必要さえないかもしれません。パッケージマネージャーまたは署名済み実行可能ファイルを使用してソフトウェアをインストールする場合、署名の検証は、プレインストールされた公開鍵を使用して自動的に処理されます(つまり、鍵の配布は、インストールメディアの暗黙の信頼とインストールを実行した人によって処理されます)。
ショートカットスクリプトを使用して、LinuxでSHA 256合計)を自動的に確認します。
sha256sum filename
を使用する場合、合計を自分で比較する必要があります。これは難しく、信頼性が低く、低速です。
ソリューション:代わりに、.bashrc
または.zshrc
構成で単純な関数を作成し、次の方法で実行できます。
sha256 <expected-sha-256-sum> <name-of-the-file>
期待されるSHA 256の合計を、1つのコマンドで実際の合計と比較します。
関数は次のとおりです。
sha256() {
echo "$1 $2" | sha256sum --check
}
詳細はこちら をご覧ください。
sha256sum -c thefile.sha
// thefile: OK
成功! shasumのターゲットを含まないディレクトリでそのコマンドを実行しない限り、その場合は次のようになります。
sha256sum: thefile: No such file or directory
thefile: FAILED open or read
sha256sum: WARNING: 1 listed file could not be read
Md5sumのmanページを使用すると、知っておくべきことはすべて見つかります。
man md5sum
md5sum
が特に便利なためではなく、前方検索/BUGS
を使用すると、オプションの概要が表示されます。
セキュリティ関連の目的でMD5アルゴリズムを使用しないでください。代わりに、プログラムsha224sum(1)、sha256sum(1)、sha384sum(1)、sha512sum(1)、またはb2sum(1)に実装されているBLAKE2アルゴリズムに実装されているSHA-2アルゴリズムを使用してください。
追加のb2sum
オプションがある--length
を除いて、すべて同じオプションがあります。
次の[〜#〜] produces [〜#〜] sha署名:
sha256sum yourFilename > yourFilename.sha
ここで、yourFilename.sha
には以下が含まれます:
9f22b735f8f416bb8195cef9436ddec04db709132dae87137026b9725cf5678a yourFilename
checkを実行するには、--check
オプションを指定して実行するだけです。
sha256sum -c yourFilename.sha
// yourFilename: OK
これが少し不愉快で不思議に思える場合は、次の方法で手動ルートを使用できます。
sha256sum yourFilename > homebrewSHA
そして、インターネットからダウンロードしたshaファイルと比較します。
diff suspiciousInternetSHA homebrewSHA
Diffが何も出力しない場合、それらはあなたが探しているドロイドではありません。そうでなければ、あなたはいいです!