Нужно ли проверять целостность загружаемых файлов?

3516
maxpesa

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

Нужно ли проверять целостность загружаемых файлов?

Выберите в качестве примера только что загруженный дистрибутив Linux объемом 1 ГБ, если хотите.

Спасибо

9
Это действительно не проблема с современным подключением к Интернету. Это полностью зависит от ваших личных предпочтений. Ramhound 9 лет назад 0
Многие загрузки являются загрузками по протоколу http, и не многие крупные из них преждевременно останавливаются из-за ограничений времени сервера или проблем с подключением без каких-либо ошибок. Torrents и ftp, с другой стороны, должны прояснить, завершен ли файл. Dan 9 лет назад 0
Смысл сравнения хэша может заключаться в том, что «кто-то изменил файл (злонамеренно)», чем «правильно ли был загружен файл». Одним из ярких примеров является загрузка Windows ISO из неофициального / ненадежного источника и проверка целостности файла путем сравнения хеша MD5 с хешем, опубликованным Microsoft в MSDN. TheUser1024 9 лет назад 5
@ TheUser1024 это предполагает, что ваши два источника совпадают, версия MSDN может отличаться. Eric G 9 лет назад 1
Этот вопрос может получить больше ответов на security.SE Eric G 9 лет назад 1
На самом деле речь шла скорее о целостности, чем о безопасности, поскольку я загружаю только из надежных источников, даже если это важный момент при загрузке файлов. maxpesa 9 лет назад 3
@maxpesa - Но смысл хэшей сегодня не в том, чтобы узнать, завершен ли файл, а в том, что вы скачали, чтобы убедиться, что вы скачали. Ramhound 9 лет назад 0
Вернувшись в «старые добрые времена» при загрузке файлов из Usenet, особенно из нескольких ГБ, которые были разбиты на множество более мелких частей, было почти необходимо использовать контрольные суммы и часто перезагружать отдельные части. Файлы четности были даже необходимы и очень приветствовались, потому что характер обмена был настолько вероятным, что приводил к ошибкам в файлах, что без таких мер вы никогда не сможете загрузить что-то полезное. В наши дни это не так уж и плохо - вы можете загрузить 100 ГБ и не иметь проблем с широкополосным подключением. BrianH 9 лет назад 0
Даже при стабильном интернет-соединении я проверяю хэш до и после записи изображения. Это займет всего минуту, и это гарантирует, что я не столкнусь с ошибками во время установки (это редко, но это случилось со мной. Может быть, 1% времени.) user55325 9 лет назад 0

5 ответов на вопрос

6
LPChip

It depends on a few factors.

  1. Do you have a stable internet connection?
    If you have a stable internet connection, you do not need to check the integrety of the file as it will most likely be correct. I never check the hash and I also never have had corrupt files. Or maybe one time when the remote server disconnected.

  2. Do you want to verify the file based on security reasons?
    If you are concerned about the safety of the file you're downloading, you can use the MD5 hash to verify that the file was not somehow altered. You download a file and if the MD5 hash doesn't match, it means the file on the server is different than the MD5 hash, and somehow something is wrong. This would only be valid if you don't trust the server you're downloading from, but usually if someone provides a hash, they usually also try their best to keep things updated. But if their site got hacked, and you did check the MD5 hash, then you got the little bonus.

Overall, these 2 will give a no to most people. If its a no to you, thats entirely up to you of course.

Стабильное интернет-соединение недостаточно. Вы также должны быть уверены, что ваша память и ОЗУ не повредят файлы. Но да, довольно маловероятно. Если ваша машина не поддерживает BSOD, скорее всего, вы заботитесь только о безопасности. ChrisInEdmonton 9 лет назад 1
Контрольная сумма файла не является проверкой безопасности, поскольку злоумышленник, который может изменить файл, может также изменить контрольную сумму. Johnny 9 лет назад 6
Если бы я взломал сайт и заменил файл на вредоносный, я думаю, я был бы достаточно умен, чтобы знать, как изменить хэш в списке. Cole Johnson 9 лет назад 1
MD5 больше не достаточно для проверки того, что содержимое файла не было преднамеренно изменено. Это хорошо только для непреднамеренной коррупции. Шансы атакующего на компромисс варьируются. Во многих случаях к хранилищу для хэша не обращаются по тем же каналам, что и хранилище массовых файлов для большой загрузки. В целях безопасности криптографические подписи лучше, чем простые хеши, особенно если у вас нет безопасного канала для распределения хешей. Perkins 9 лет назад 3
Я думаю, что идея хэшей была в том случае, когда предоставленный файл был размещен на другом сайте, чем хеш. Например, сайт разработчика с хэш-ссылками на Sourceforge или где-то еще. Matthew Lock 9 лет назад 0
6
Eric G

The answer and choice one makes is going to be based on his/her risk tolerance and considerations of time and effort in verification.

Checking MD5/SHA1 hashes is a good first step and you should do it when you have time. However, you must consider your ability to trust the hash provided. For example, if the the author's website with the hash is hacked, then the attacker can change the hash, so you would not know. If the hash you calculate is not the same as the hash provided, you know something is up. However, just because the hashes match does not guarantee the file is good.

A better alternative for a software author to provide integrity and authenticity is through digitally signing the files being distributed. This attaches the authenticity information to the file and does not rely on trusting some website. If an author digitally signs the file, the only way for this to be faked is a compromised certificate authority or if the developer's signing key was stolen. Both of these cases are far less likely than a website on the Internet being hacked.

Ultimately, you must do your own due diligence to determine if you want to trust something and then take countermeasures (run in a sandbox, a virtual machine, etc.) to mitigate any unknown factors or miscalculations you made when deciding whether or not to trust.

4
Michael Kohne

For security reasons, YES. Consider that a Tor exit node was found to be patching binaries during download, then remember that your ISP may or may not have the slightest morals, and that they are in complete control of your internet connection.

Ваша жалоба на интернет-провайдера связана с тем, что они могут изменить скорость и приоритет моего соединения и другие вещи, которые могут повредить файлы? maxpesa 9 лет назад 0
@maxpesa - Они могут изменить поток, если они хотят. Файл не будет поврежден, только измененный. Ramhound 9 лет назад 0
@maxpesa - я указывал, что ваш провайдер находится в том же положении, что и выходной узел Tor в связанной статье - у него есть возможность контролировать то, что происходит через ваши провода. Если они хотят, они могут изменять исполняемые файлы на лету. Michael Kohne 9 лет назад 0
Если злоумышленник может изменить двоичный файл, злоумышленник может также изменить хэш. Это потребовало бы более целенаправленной атаки, чем исправление всех двоичных файлов, но все еще очень возможно. При проверке хеша _can_ можно избежать повреждения, гарантии нет. Если вы заботитесь о безопасности, первым шагом является загрузка только через HTTPS - особенно, когда вы используете прокси, как с tor! kapex 9 лет назад 2
Я бы посчитал, что посредник может также изменить источник хеша для проверки. Шифрование / HTTPS может противодействовать некоторым из этих сценариев, чтобы предотвратить такие атаки MitM. Eric G 9 лет назад 0
Чтобы добавить комментарий @ kapep, еще лучше проверить его с помощью криптографических подписей (используя ключи, распространяемые по защищенному каналу). Таким образом, злоумышленник должен будет скомпрометировать хранилище ключей * и * хранилище, чтобы изменить двоичный файл. Johnny 9 лет назад 1
3
George

Just to add to the other answers:

TLDR: For files where integrity is critical, yes

Long answer: I often find it necessary when I am doing something where it is critical that the file has a high integrity.

One example is flashing a router with OpenWRT. If the file is corrupt, then that router would be bricked, and then I would either have to either:

  • Replace it (expensive)
  • Fix it (time consuming. Especially if I need to solder a serial cable/JTAG)

Both of these are inconvenient, compared to the simplicity of checking a hash. Therefore I would strongly recommend doing it for critical files.

0
Peter Cordes

Я обычно только проверяю, была ли моя загрузка прервана, и я возобновил ее позже, потому что HTTP-запросы со смещением поиска используются не так широко, поэтому могло произойти что-то глупое.

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

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

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