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

16

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

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

Адитья К
источник
10
Также не забывайте о возможных ошибках в программном и аппаратном обеспечении, выполняющем передачу данных, как на конечных точках, так и между ними.
Sebix
Загрузка может быть прервана на несколько байтов раньше. Вы не обязательно заметите это по размеру файла, если не будете обращать на это внимание, а исправление ошибок TCP будет проверять только часть данных, которые действительно поступили.
Кевин Кин
Контрольные суммы могут быть полезны, но за 20 лет работы с компьютерами я не помню, чтобы однажды использовал их.
Педро Лобито
2
MD5 - это хеши, а не контрольные суммы. Контрольная сумма используется для проверки ошибок, в частности битовых ошибок во время передачи. Криптографический хеш предназначен для обеспечения того, чтобы данные были точно такими же. В этом смысле хеш будет расширенным набором контрольных сумм, но они не одинаковы. Кроме того, MD5 был сломан в течение 10 лет (см. Статью в Википедии, раздел Безопасность ).
0xC0000022L

Ответы:

20

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

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

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

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

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

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


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

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

Хокан Линдквист
источник
Лучший ответ! Я ненавижу, как другие ответы смешивают понятия криптографических хэшей и контрольных сумм.
0xC0000022L
20

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

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

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

Конрад Гаевский
источник
21
Это также означает, что скачивать ISO-образ со случайного зеркального сайта достаточно безопасно, при условии, что вы получаете контрольные суммы из надежного места; например, подписанное PGP сообщение в списке рассылки foo-announce.
Ричардб
2
На самом деле это не имеет ничего общего с защитой от злонамеренных действий. Если ISO мог быть заменен на вредоносный, то значение контрольной суммы MD5 также может быть. Подписать их - это другой вопрос, но не то, о чем спрашивает ФП. Таким образом, вместо того, чтобы «злонамеренная деятельность» была первой в вашем списке (это звучит хорошо), на самом деле она даже не должна быть в вашем списке. Вы даете людям ложное чувство безопасности, что опасно. superuser.com/questions/849845/…
Остин «Опасность» Пауэрс
1
@ Austin''Danger''Powers Умм, нет, Конрад прав. С одной стороны , загрузить зеркало обычно это отличается от сайта с указанием суммы, а во- вторых, есть довольно много интернет - провайдеров в мире , которые манипулируют трафик - TCP контрольных сумм будет хорошо, но вы скачиваете другой файл. И, конечно же, он упускает и другой момент - файл мог быть поврежден на сервере после создания контрольной суммы. Это происходит постоянно, особенно для более «любящих» серверов (без правильных настроек RAID и т. Д.).
Луаан
2
Ответ от 2015 года должен содержать рекомендации относительно хэшей MD5 . Этот алгоритм был сломан в течение последних десяти лет (без преувеличения!). Кроме того, вы смешиваете контрольную сумму и хэш. Это две разные вещи с разными намерениями.
0xC0000022L
1
Добавлять или добавлять к комментарию @ 0xC0000022L SHA1 лучше всего избегать, если безопасность уже является серьезной проблемой, хотя и она, и MD5 идеально подходят для защиты от случайного повреждения.
Дэвид Спиллетт
6

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

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

Даниил
источник
8
Я думаю, что «гарантирует целостность данных» действительно перепродает то, что на самом деле делает. Он делает попытку проверить целостность данных с помощью очень скудного подхода, который не особенно силен.
Хокан Линдквист
6

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

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

отметка
источник
6

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

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

1 источник в комментарии, потому что LOL Rep

Рена
источник
2
Источники: * security.stackexchange.com/questions/70970/… * adblockplus.org/forum/viewtopic.php?t=8156 « Внедряются агрессивные интернет-провайдеры / блокируются встроенные скрипты / реклама» * iamsrijit.wordpress.com/2012/09/ 14 /… * больше можно легко найти в Google, но это не совсем по теме здесь
Рена
2

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

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

Дэвид Томсон
источник
2
Windows показывает количество байтов иначе, чем Linux? В самом деле? Я подумал, что абдоминация прошла с файловой системой CP-M "file-size-as-blocks-count". (Теперь, если вы смотрите на что-то другое, кроме количества байтов, скажем, размера файла, отображаемого в Проводнике, оно может сильно отличаться. Но ни один здравомыслящий системный администратор не должен проверять целостность загруженного файла таким образом, так что это не выпускать.) Байты - это байты. Хотя смотреть на это с точки зрения битов не имеет смысла; когда в последний раз вы загружали и хранили полбайта?
CVn
2

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

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

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

Фернандо Кордейру
источник