Как сверить контрольную сумму скачанного файла
Проверка хеша занимает десять секунд и ловит то, что пропускает антивирус. Что на самом деле доказывают MD5, SHA-1 и SHA-256 про скачанный файл.
Контрольные суммы не проверяет почти никто. Строка висит под кнопкой загрузки, шестьдесят четыре символа шестнадцатеричной каши, похожей на сбой вёрстки, и все спокойно пролистывают её к установщику.
В общем-то, справедливо. Файл почти наверняка скачался нормально. Но проверка стоит секунд десять, и два случая, когда она окупается, стоит разобрать: они не те, о которых обычно думают.
Что ловит хеш
Криптографический хеш читает каждый байт файла и выдаёт отпечаток фиксированной длины. Переверните один бит в образе на 5 ГБ — SHA-256 изменится целиком. Никаких «почти совпало» тут не бывает.
Значит, совпадение суммы вычёркивает вполне конкретный список бед: оборвавшуюся загрузку, которая оставила правдоподобный с виду файл, битый сектор на диске, куда вы его сохранили, капризную флешку, узел CDN со старой сборкой. Если вы когда-нибудь записывали ISO, а он загружался в kernel panic, это скорее всего было повреждение, которое можно было увидеть заранее.
Чего хеш не говорит — так это безопасен ли файл. Хеш сравнивает, а не судит. У вредоноса тоже есть совершенно корректный SHA-256.
Случай, который упускают
В мае 2017 года кто-то взломал одно из двух зеркал HandBrake и подменил сборку для Mac версией с трояном Proton. Все, кого маршрутизация увела на это зеркало, получили рабочий видеокодировщик и заодно бэкдор с удалённым доступом. В своём предупреждении проект отправил пользователей к контрольной сумме: заражённый файл лежал на зеркале, а настоящий хеш всё ещё публиковался на основном сайте. Сравнение за десять секунд поймало бы подмену.
А теперь Linux Mint, февраль 2016 года. Взломщик забрался на сам сайт, заменил ссылку на ISO и отредактировал опубликованный рядом MD5. Люди исправно сверяли хеш с тем, что видели на экране, и он совпадал — потому что и файл, и сумма приехали от одного и того же злоумышленника.
Вот и весь урок в двух историях. Контрольная сумма защищает, когда файл и хеш пришли разными дорогами. И не защищает вообще ни от чего, когда оба выдаёт один взломанный источник. Поэтому серьёзные проекты подписывают файл SHA256SUMS ключом GPG: именно подпись привязывает хеш к человеку, а не к веб-серверу.
Какой алгоритм брать
Тот, который дал издатель. Если предлагают несколько — берите SHA-256.
MD5 криптографически мёртв с 2004 года, SHA-1 — с 2017-го: для обоих умеют строить два разных файла с одинаковым хешем. Для задач безопасности это приговор. Для поиска оборванной загрузки — нет, потому что случайное повреждение в коллизию само не попадёт. Многие зеркала и архивы прошивок до сих пор публикуют только MD5, и сверить его лучше, чем не сверять ничего.
Как проверить
В Linux: sha256sum file.iso. В macOS: shasum -a 256 file.iso. В PowerShell: Get-FileHash file.iso -Algorithm SHA256. Дальше нужно глазами сравнить длинную шестнадцатеричную строку, и вот тут обычно начинается халтура: человек смотрит на первые шесть символов и решает, что сошлось.
Либо перетащите файл в Проверку хеша файла, вставьте опубликованную сумму и дайте сравнить машине. Файл читается кусками по 4 МБ прямо в браузере, поэтому многогигабайтный ISO проходит нормально и никуда не загружается. Если хешировать нужно текст, а не файл, для этого есть Генератор хешей — те же алгоритмы плюс SHA-512.
Скачаете следующий образ — проверьте. Это быстрее, чем вы прочитали последний абзац.