Назад | Перейти на главную страницу

Почему рекомендуется сравнивать контрольные суммы при загрузке файла?

Веб-сайты, которые предоставляют файлы ISO для загрузки, часто предоставляют контрольные суммы md5 этих файлов, которые мы можем использовать для подтверждения того, что файл был загружен правильно и не был поврежден.

Зачем это нужно? Конечно, исправляющих ошибок свойств TCP достаточно. Если пакет получен неправильно, он будет передан повторно. Разве сама природа соединения TCP / IP не гарантирует целостность данных?

Как было отмечено другими, существует много возможностей для повреждения данных, когда любая контрольная сумма на транспортном уровне не может помочь, например, повреждение происходит уже до того, как контрольная сумма вычисляется на стороне отправителя, MITM перехватывает и изменяет поток (данные также в качестве контрольных сумм), повреждение происходит после проверки контрольной суммы на принимающей стороне и т. д.

Если отбросить все эти возможности и сосредоточиться на специфике Контрольная сумма TCP и то, что он на самом деле делает с точки зрения проверки целостности данных, оказывается, что свойства этой контрольной суммы совсем не исчерпывающие с точки зрения обнаружения ошибок. Выбор этого алгоритма контрольной суммы скорее отражает требование скорости в сочетании с периодом времени (конец 1970-х).

Вот как Контрольная сумма TCP рассчитывается:

Контрольная сумма: 16 бит

Поле контрольной суммы - это 16-битное дополнение к сумме всех 16-битных слов в заголовке и тексте. Если сегмент содержит нечетное количество октетов заголовка и текста для контрольной суммы, последний октет дополняется справа нулями для формирования 16-битного слова для целей контрольной суммы. Пэд не передается как часть сегмента. При вычислении контрольной суммы само поле контрольной суммы заменяется нулями.

Это означает, что любое повреждение, которое уравновесится при таком суммировании данных, останется незамеченным. Существует несколько категорий повреждения данных, которые это позволяет, но это просто тривиальный пример: изменение порядка 16-битных слов всегда остается незамеченным.


На практике он выявляет многие типичные ошибки, но не гарантия целостность. Этому также способствует то, как уровень L2 также выполняет проверки целостности (например, CRC32 кадров Ethernet), хотя и только для передачи по локальному каналу, а во многих случаях поврежденные данные даже не попадают в стек TCP.

Проверка данных с использованием надежного хэша или, предпочтительно, криптографической подписи - это совершенно другой уровень с точки зрения обеспечения целостности данных. Их трудно даже сравнивать.

Вероятно, существует миллион причин, по которым следует проверить md5sum, но некоторые из них приходят мне на ум:

  • Вредоносная активность - ваш ISO мог быть изменен на пути с сервера
  • Сама страница подделана (лучше всего иметь подписанные md5sums :))
  • Прерванная загрузка (несмотря на исправление ошибок TCP) (проверьте этот вне)
  • ISO сгорел неправильно

И в любом случае это займет всего несколько секунд.

TCP / IP действительно гарантирует целостность данных *. Но это не гарантирует, что 100% файла загружено. Это могло произойти по многим причинам. Например: возможно, вы можете смонтировать ISO, который пропускает один или два байта где-то посередине. У вас не будет проблем с этим, пока вам не понадобится один или два конкретных файла, которые повреждены. Сравнение контрольных сумм гарантирует, что вы действительно загрузили весь файл.

* см. комментарий

Контрольная сумма TCP составляет всего 16 бит. Это означает, что при отсутствии других контрольных сумм один из каждых 65536 поврежденных пакетов будет принят как неповрежденный. Если, например, вы загружали образ DVD объемом 8 ГБ по зашумленному каналу со степенью повреждения 1%, можно было бы ожидать 81 необнаруживаемый поврежденный пакет.

MD5 - это гораздо большая контрольная сумма, 128 бит. Вероятность того, что из этих 81 пакета получится что-то с той же контрольной суммой, что и у оригинала, составляет примерно 1 к 10000000000000000000000000000000000.

Есть несколько причин для проверки контрольной суммы файла, загруженного по HTTP:

  • Убедитесь, что вы получили весь файл
    • Некоторые клиенты, такие как Fire Fox, может рассматривать прерванное соединение как успешную загрузку, оставляя вас с усеченным файлом, но заявляя, что он загружен нормально
  • Убедитесь, что вы получили правильный файл
    • например неисправный, скомпрометированный или вредоносный сервер может отправить вам что-то еще
    • кто-то может вмешаться в передачу (атака человек посередине) - даже HTTPS небезопасен от этого, если ваша система скомпрометирована, например, Superfish, или используемый метод шифрования слабый
    • Они также могут просто представить вам ложную страницу загрузки, поэтому вы даже не подключены к реальному серверу (но в этом случае контрольные суммы не сильно помогут, если вы получите их с того же поддельного сервера)
    • Ряд интернет-провайдеров были уличены в внедрении Javascript в передаваемые страницы по разным причинам.1; в зависимости от того, насколько хорошо это реализовано, это может также помешать загрузке некоторых файлов
    • Зеркало может содержать устаревшую версию файла или администратор загрузил не тот файл
  • Убедитесь, что файл не был поврежден чем-то, что TCP не может обнаружить
    • например файл может быть поврежден на сервере, поэтому TCP гарантирует, что уже поврежденный файл не будет дополнительно искажен при передаче
    • или он может быть поврежден после прибытия на вашу сторону из-за неисправной памяти / диска, неисправного драйвера файловой системы и т. д.
    • Контрольные суммы TCP всего 16-битные, поэтому вероятность того, что поврежденный пакет не будет обнаружен, не является астрономической (1 из 65536).
  • С ISO, гарантируя, что диск записан правильно

1 источники в комментариях, потому что lol rep

Даниэль, в зависимости от инструмента, который вы используете для загрузки ISO, скажем. Если это скажем Firefox .. Он может показать загрузку файла. Однако у вас может не быть полного ISO. Если вы сожжете его, попробуйте использовать, информация может отсутствовать. Это происходит время от времени на разных веб-серверах, на которых размещаются файлы.

Рекомендуется хотя бы сравнить размер файла (общее количество байтов или бит), чтобы убедиться, что они совпадают. Windows покажет количество байтов файла, отличное от Linux. Проверка суммы MD5 покажет те же значения независимо от используемой ОС. Надеюсь, что это помогает немного. Ура ...

Я замечаю много интересных ответов, но нужно учесть последнее:Проблема двух генералов

Проблема двух генералов и проблема византийских генералов конкретно рассматривают последствия надежной передачи информации по ненадежным каналам.

Контрольные суммы - это просто еще один уровень «повышения надежности», с очень малой вероятностью отказа. Это причина, по которой он так популярен.