web-dev-qa-db-ja.com

ダウンロードしたファイルのチェックサムを計算する理由

ダウンロード可能なファイルの横にチェックサムが表示されることがよくあります。この実践の目的は私にはわからない。破損したファイルを検出することは明らかですが、この破損の原因である可能性があり、それはおそらくありますか?

これらはネットワークプロトコルによって検出されるため、ファイルは転送エラーによって破損することはありません。そして確かに、悪意のある目的でファイルを変更できる攻撃者はすべて、指定されたチェックサムを変更することもできます。ハードドライブのエラーをチェックしていますか?それらは、書くときよりも読むときに起こる可能性が高いですか?重要なものが欠けていますか?

19

破損を検出することは完全に正しいわけではありません。ソフトウェアの整合性を確認することは、より正しい使用法です。通常、ソフトウェアは単一のサーバーから配布されません。同じソフトウェアが多くのサーバーから配布される場合があります。したがって、特定のソフトウェアをダウンロードする場合、ダウンロード速度を上げるために、宛先に最も近いサーバーがダウンロードソースとして選択されます。ただし、これらの「非公式」(サードパーティ)サーバーは常に信頼できるとは限りません。 ダメであるプログラムにトロイの木馬/ウイルス/アドウェア/バックドアを含める可能性があります/含めることができます。

そのため、ダウンロードされたソフトウェアが関係組織によってリリースされた「公式」ソフトウェアのそれとまったく同じであることを確認するために、チェックサムが使用されます。チェックサムの生成に使用されるアルゴリズムは、プログラムにわずかな変更を加えても、まったく異なるチェックサムが生成されるようなものです。

Practical Unix and Internet Securityからの例

MD5(青いボックスには$ 1500があります。)= 05f8cfc03f4e58cbee731aa4a14b3f03

MD5(青いボックスには$ 1100があります。)= d6dee11aae89661a45eb9d21e30d34cb

単一の文字のみが異なるメッセージ(およびその文字内では単一のバイナリビットのみが異なる)は、メッセージダイジェストが完全に異なります。

ダウンロードしたファイルのチェックサムが「公式」ウェブサイトで提供されているチェックサムと同じ場合、ソフトウェアは変更されていないと見なすことができます。

サイドノート:理論的には、2つの異なるファイルは同じハッシュ値を持つことができます。ハッシュ/チェックサムアルゴリズムが安全であると見なされるためには、同じチェックサムを生成する別のファイルを見つけることは、計算上非常に負荷がかかります。

9
Aswin P J

そして確かに、悪意のある目的でファイルを変更できる攻撃者はすべて、指定されたチェックサムを変更することもできます。

常にではない。

HTTPSで提供されるチェックサムとともにコンテンツリンクを持つことができます。リンクは、暗号化されていないリンクである可能性があります-プレーンHTTPまたはFTP、またはその他のリンク。

欠点としては、暗号化されていない接続が簡単に中規模になる可能性があり、メリットとしては、Webマスターにとってより高速で便利なものがあります(必要なコンピューティングリソースが少なく、ネットワークにキャッシュする機会が少ない)。

チェックサムが途切れていない信頼できる接続で提供され、ペイロードがチェックサムと一致する場合、両方の世界で最高のものを使用できます(チェックサムが暗号で保護されている場合)。


そうは言っても、「安全」であると主張するディストリビューションが世の中に存在しているにもかかわらず、彼らのWebサイトはHTTPのみであり、画像へのリンクも同様です。

例:

あなたはそれをもっと不安にすることができないので、それはちょっと面白いです。たとえ悪意を持っていなくても、どのISPもWebサイトと画像の両方を偽物で簡単に置き換えることができ、誰かに不正なオペレーティングシステムをインストールさせながら、「安全な」Linuxディストリビューションを入手しているように見せることが究極です。略奪。

10
PSkocik

伝送エラーが発生する可能性があります。リンク層プロトコルには、通常、チェックサムまたはエラー訂正コードが含まれ、それらを回避しますが、完全ではありません。エラーが修正されない可能性はわずかです。 [〜#〜] tcp [〜#〜] パケットにはチェックサムも含まれ、エラーの確率が2 ^ 16減少します。これにより、伝送エラーの確率は非常に小さくなりますが、ゼロではありません。これは、ほとんどの人が無意識のうちに無意識のうちに遭遇することのない種類のことですが、暗号チェックサムの可能性が10億年に1度とは限りません。

チェックサムはキャッシュされたコピーから計算されるため、ダウンロード後すぐにチェックしても、クライアントのハードウェアエラー(ディスクの破損など)は検出されません。一方、起動に失敗した場合に起動メディアの破損をチェックすることは有用です。つまり、実際にメディアをテストしており、ハードウェアが故障している可能性があるという前提があります。

チェックサムを計算する本当の理由は、実際にはソフトウェアレベルのエラーを検出することです。これらは起こります。考えられるエラーは次のとおりです。

  • ファイルが部分的にダウンロードされました。 Webサーバーとブラウザーは、中断された接続の検出と部分的なファイルのクリーンアップがうまく機能しない傾向があります。ダウンロード中にエラーが発生したか、アップロード中にエラーが発生した可能性があります。
  • 途中で破損がありました。たとえば、ファイルの配布の中間ノードは、バイナリファイルにテキストエンコーディング変換を適用することを決定しました。または、一部の誤って構成されたサーバーがコンテンツではなくエラーメッセージを提供しました。
  • バリアント:間違ったファイルがアップロードされました。
  • まれですが、防御には役立ちます。攻撃者がファイルを変更しましたが、参照チェックサムを変更できませんでした。セキュリティインフラストラクチャは、攻撃者が無効なファイルよりも無効なチェックサムを伝達することを困難にする傾向があります。たとえば、大きなファイルはしばしばミラーを介して配布されますが、チェックサムは改ざんの機会が少ない中央サイトによって提供されます(サーバーリーダーのみへのアクセス、HTTPSを介した配布)。

実際には、ダウンロードされたファイルのサイズを確認することで、最も一般的なエラーである、切り捨てられたファイルや無効に変換されたファイルをキャッチできます。チェックサムには、厳密により多くの問題を検出するという利点があります。

TCP/IPエラーチェックがすべてをキャッチしない理由について: https://stackoverflow.com/a/17083365/2551539 から

発生する可能性のあるさまざまなエラーがあります(それはTCPが検出します)[Jacob Krallによって指摘されました]

  • パケットの順序が正しくない
  • パケットの損失
  • パケット内の破損したデータ
  • ファントムパケット(受信者は送信されたことのないパケットを取得します)

いくつかの追加情報で編集します。

この調査のページ9: http://paperhub.s3.amazonaws.com/8ff1e4414c070e900da8ab3885593085.pdf は、TCPによって検出されないエラーが発生する可能性があることを示唆しています。私の理解では、エラーのあるデータグラム(スタディでは「不良ツイン」と呼ばれます)が目的のデータグラム(スタディでは「良好ツイン」と呼ばれます)と同じチェックサムを持っている場合に発生します。

4
Jesse Adam

理論的には、ネットワークはすべての単一セグメントを適切に配信し、それらはディスク上で適切に組み立てられ、何も問題はありません。

実際には、コンピューターは機械とソフトウェアであり、どちらも信頼できる人間によって設計および構築されています。ダウンロードがなんらかの理由で何らかの理由で正しくダウンしない場合(たとえば、無害か悪質かを問わず、中間デバイスを介してダウンロードが行われ、データが破壊される)場合、ファイルがほぼ確実にそうであったことを確認する方法があると便利です。プロバイダー側​​でファイルの正確なレプリカとしてダウンロードされます。

高品質のチェックサムは、データの整合性を検証するための信頼できる方法です。

2
Jason

チェックサムは、次の状況によるダウンロードの破損を防ぐのにも役立ちます。

ダウンロードの提供中にサーバーで内部エラーが発生したため、ダウンロードが終了しました。

その場合、考えられる結果がいくつかあります。

  • Good server-サーバーの実装 Chunked transfer encodingnotバギー:
    • 良いクライアント(cURL、wgetなど)は、サーバーから終了チャンクが送信されたことがないため、これが悪いダウンロードであることを通知できます。
    • 不良クライアントは、サーバーからデータを受信して​​いないため、ダウンロードが完了したと見なします。
  • Bad server-サーバーの実装 Chunked transfer encodingisこの不正なダウンロードの終了チャンクを送信するバグがある:
    • すべてのクライアントは、このダウンロードが正常に完了したと考えます。

私はこれらの動作を人気のクライアントツールとサーバーフレームワークで見たので、チェックサムを使用しない場合、「良いサーバー+悪​​いクライアント」または「悪いサーバー+任意のクライアント」の場合、破損したダウンロードは気付かれません。 。

0
user117452

多くのファイルが同じチェックサムにマッピングされるため、100%信頼できるチェックサムはありません。

add別のチェックサムをトレインに追加するときmultiplyエラーを検出する確率。

インターネット上には非常に多くのトラフィックがあるため、実際にはエラーはかなり一般的です。

0
chasly from UK