ファイルをダウンロードするときにチェックサムを比較するのが良い習慣なのはなぜですか?


16

ダウンロード用のISOファイルを提供するWebサイトは、それらのファイルのmd5チェックサムを頻繁に提供します。このチェックサムを使用して、ファイルが正しくダウンロードされ、破損していないことを確認できます。

なぜこれが必要なのですか?TCPのエラー修正プロパティで十分です。パケットが正しく受信されない場合、再送信されます。TCP / IP接続の性質そのものがデータの整合性を保証しないのですか?


10
また、エンドポイントでのデータ転送を行うソフトウェアとハ​​ードウェアのバグの可能性も忘れないでください。
sebix

ダウンロードが数バイト早く終了した可能性があります。注意を払わない限り、ファイルサイズで必ずしも気付くとは限りません。TCPエラー修正では、実際に到着したデータの一部のみを検証します。
ケビン・キーン

チェックサムは便利かもしれませんが、コンピューターで20年間働いたとき、一度使ったことを覚えていません。
ペドロロビト

2
MD5はハッシュであり、チェックサムではありません。チェックサムは、エラー、特に送信中のビットエラーをチェックするために使用されます。暗号化ハッシュは、データがまったく同じであることを保証することを目的としています。その意味で、ハッシュはチェックサムのスーパーセットになりますが、それらは同じではありません。それとは別に、MD5は10年間壊れていますWikipediaの記事、セクションセキュリティを参照)。
0xC0000022L

回答:


20

他の人が指摘しているように、送信側でチェックサムが計算される前に破損がすでに発生している場合、ストリームをインターセプトおよび変更するMITMなど、トランスポート層でのチェックサムが役に立たないデータ破損の可能性が多くありますチェックサムとして)、受信側でチェックサムを検証した後に破損が発生するなど。

これらの他のすべての可能性を無視し、TCPチェックサム自体の詳細と、データの整合性の検証に関して実際に行うことに焦点を当てると、このチェックサムのプロパティは、エラーの検出という点ではまったく包括的ではないことがわかります。このチェックサムアルゴリズムの選択方法は、速度(1970年代後半)と組み合わせた速度の要件を反映しています。

これは、TCPチェックサムの計算方法です。

チェックサム:16ビット

チェックサムフィールドは、ヘッダーとテキスト内のすべての16ビットワードの補数の合計の16ビットの補数です。セグメントにチェックサムされる奇数のヘッダーとテキストオクテットが含まれる場合、最後のオクテットの右側にゼロが埋め込まれ、チェックサム用の16ビットワードが形成されます。パッドはセグメントの一部として送信されません。チェックサムの計算中、チェックサムフィールド自体はゼロに置き換えられます。

これは、この方法でデータを合計するときにバランスをとる破損が検出されないことを意味します。これにより許可されるデータの破損には多くのカテゴリがありますが、単なる些細な例です。16ビットワードの順序を変更すると、常に検出されなくなります。


実際には、多くの典型的なエラーをキャッチしますが、完全性を保証するものではありません。また、ローカルリンクでの送信のみであるにもかかわらず、L2レイヤーが整合性チェック(例:イーサネットフレームのCRC32)を行う方法、および破損したデータの多くのケースがTCPスタックに渡されることもありません。

強力なハッシュ、またはできれば暗号署名を使用してデータを検証することは、データの整合性を確保するという点でまったく異なるレベルにあります。2つはほとんど比較することさえできません。


ベストアンサー!他の回答が暗号化ハッシュとチェックサムの概念を混同する方法が嫌いです。
0xC0000022L

20

md5sumをチェックするべき理由はおそらく無数にありますが、いくつかは思い浮かびます:

  • 悪意のあるアクティビティ-サーバーからの途中でISOが改ざんされている可能性があります
  • ページ自体はスプーフィングされています(md5sumsにも署名するのが最善です:))
  • 壊れたダウンロード(TCPエラー訂正にもかかわらず)(チェックこのアウト)
  • ISOが正しく焼き付けられていない

とにかく数秒しかかかりません。


21
また、信頼できる場所からチェックサムを取得するという条件で、ランダムミラーサイトからISOをダウンロードすることが合理的に安全であることも意味します。たとえば、foo-announceメーリングリストへのPGP署名付き投稿。
-richardb

2
実際には、悪意のあるアクティビティに対する保護とは関係ありません。ISOが悪意のあるものに置き換えられた場合、MD5チェックサム値も置き換えられます。それらに署名することは別の問題ですが、OPが求めていることではありません。だからではなく、あなたのリスト(それ確認音の良い)で最初が「悪質な行為」のために、それは実際にもないはずあなたのリストに。あなたは人々に誤った安心感を与えていますが、これは危険です。superuser.com/questions/849845/...
オースティン「」危険「」パワーズ

1
@ Austin''Danger''Powers Umm、no、Konrad's right。1つは、ダウンロードミラーは通常、チェックサムを表示するサイトとは異なり、2つ目は、トラフィックを操作するISPが世界中に非常に多いことです。TCPチェックサムは問題ありませんが、別のファイルをダウンロードしています。そしてもちろん、彼は別のポイントも失っています-チェックサムが作成された後、サーバー上のファイルが破損している可能性があります。特に「愛好家」の多いサーバー(適切なRAIDセットアップなどを行わないサーバー)で常に発生します。
ルアーン

2
2015年の回答では、MD5ハッシュに対するアドバイスが必要です。このアルゴリズムは過去10年間壊れています(誇張なし!)。また、チェックサムとハッシュが混在しています。それらは背後にある意図の異なる2つの異なるものです。
0xC0000022L

1
@ 0xC0000022Lによるコメントへの追加を追加することは、SHA1とMD5の両方が偶発的な破損を防ぐのに完全に適切であるにもかかわらず、セキュリティがすでに主要な懸念事項である場合は避けるのが最善です。
デビッドスピレット

6

TCP / IPはデータの整合性を保証します*。ただし、ファイルの100%がダウンロードされたことを保証するものではありません。これが起こる理由はたくさんあります。例:途中のどこかで1バイトまたは2バイトが欠落しているISOをマウントできる可能性があります。破損している1つまたは2つの特定のファイルが必要になるまで、問題はありません。チェックサムを比較することで、ファイル全体が本当にダウンロードされたことを確認できます。

*コメントを参照


8
「データの整合性を保証する」というのは、実際に行うことを過剰に売っていると思います。それは非常にリーンなアプローチでデータの整合性をチェックしようとしますが、これは特に強力ではありません。
ホーカンLindqvist

6

TCPチェックサムは16ビットのみです。これは、他のチェックサムがない場合、65536個の破損パケットごとに1個が非破損として受け入れられることを意味します。たとえば、破損率1%でノイズの多いリンクを介して8GBのDVDイメージをダウンロードした場合、81個の検出不能な破損パケットが予想されます。

MD5は、128ビットの非常に大きなチェックサムです。オリジナルと同じチェックサムを持つ何かを生成するこれらの81パケットのオッズは、1,000,000,000,000,000,000,000,000,000,000,000分の1です。


6

HTTP経由でダウンロードしたファイルのチェックサムを検証する理由はいくつかあります。

  • ファイル全体を受け取ったことを確認する
    • Firefoxなどの一部のクライアントは、中断された接続をダウンロードの成功として扱い、切り捨てられたファイルを残しますが、ダウンロードは正常であると主張する場合があります
  • 正しいファイルを受け取ったことを確認する
    • たとえば、バグのあるサーバー、侵害されたサーバー、または悪意のあるサーバーが何か他のものを送信する可能性があります
    • 誰かが転送を改ざんする可能性があります(man-in-the-middle攻撃)-たとえば、システムがSuperfishによって危険にさらされたり、使用されている暗号化方式が弱い場合、HTTPSでも安全ではありません。
    • また、偽のダウンロードページが表示されるだけなので、実サーバーに接続することすらできません(ただし、この場合、同じ偽サーバーからチェックサムを取得しても、チェックサムはあまり役に立ちません)。
    • 多くのISPが、さまざまな理由でJavascriptを送信中のページに挿入していることがわかっています1。これがどれだけうまく実装されているかに応じて、いくつかのファイルのダウンロードも混乱させる可能性があります
    • ミラーが古いバージョンのファイルをホストしているか、管理者が間違ったファイルをアップロードした可能性があります
  • TCPが検出できないものによってファイルが破損していないことを確認する
    • たとえば、ファイルがサーバー上で破損している可能性があるため、TCPは、既に破損しているファイルが送信中にさらに破壊されないようにするだけです。
    • または、障害のあるメモリ/ディスク、バグのあるファイルシステムドライバなどによって、あなたの側に到着した後に破損する可能性があります
    • TCPチェックサムは16ビットのみであるため、破損したパケットが検出されない可能性は天文学的なものではありません(65536に1つ)
  • ISOを使用して、ディスクが正しく書き込まれたことを確認する

1件のコメントソース


2
ソース:* security.stackexchange.com /questions/70970/ * adblockplus.org/forum/viewtopic.php?t=8156「攻撃的なISPが挿入/埋め込みされたスクリプト/広告ブロック可能」* iamsrijit.wordpress.com/2012/09/ 14 /… * Googleで簡単に見つけることができますが、ここではあまり話題になりません。
レナ

2

ダニエル、ISOダウンロードに使用しているツールによって異なります。Firefoxの場合:ファイルのダウンロードが表示される場合があります。ただし、完全なISOをそのまま保持していない場合があります。焼き付けてから使用しようとすると、情報が失われる可能性があります。これは、ファイルをホストするさまざまなWebサーバーで時々発生します。

少なくともファイルサイズ(合計バイトまたはビット)を比較して、それらが一致することを確認することをお勧めします。Windowsでは、ファイルのバイトカウントがLinuxとは異なります。MD5サムチェックでは、使用されているOSに関係なく同じ値が表示されます。これが少し役立つことを願っています。乾杯...


2
Windowsは、Linuxが表示する方法とは異なるバイト数を表示しますか?本当に?CP / Mのfile-size-as-blocks-countファイルシステムでは、アブドミネーションがなくなると思いました。(今、あなたがバイト数以外の何かを見ている場合-たとえば、エクスプローラーでのファイルサイズの表示-それはかなり異なるかもしれません。発行。バイトはバイトです。ただし、ビットの観点から見ると意味がありません。半バイトを最後にダウンロードして保存したのはいつですか?
CVn

2

私は多くの興味深い答えに気づきましたが、最後に考慮すべきことがあります。2人の将軍の問題

2つの将軍の問題とビザンチン将軍の問題は、信頼できないチャネルを介して情報を確実に転送することの意味を特に考慮します。

チェックサムは、「信頼性の向上」の別のレイヤーにすぎず、障害が発生する可能性が非常に低いレイヤーです。これがとても人気がある理由です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.