Перейти к содержимому
Контрольная сумма (checksum) простыми словами: CRC32, MD5 и SHA-256
blogQRcode.website118 мин чтения

Контрольная сумма (checksum) простыми словами: CRC32, MD5 и SHA-256

#контрольная сумма#checksum#CRC32#хеш-сумма#SHA-256#MD5#целостность данных#проверка файла

Скачали образ системы на пять гигабайт — он не устанавливается. Архив открывается с ошибкой «повреждённые данные». Файл пролежал два года на внешнем диске и вдруг перестал читаться. Вопрос во всех трёх случаях один: данные те же, что были, или где-то по дороге сломался бит. Ответ даёт контрольная сумма — короткое число, вычисленное из содержимого по строгому правилу.

Идея простая. Берём данные, прогоняем через функцию, получаем отпечаток длиной 8, 32 или 64 символа и передаём его отдельно от самих данных. На принимающей стороне считаем заново по тем же правилам и сравниваем. Совпало — данные почти наверняка целы. Не совпало — файлу доверять нельзя.

Что такое контрольная сумма простыми словами

Контрольная сумма (checksum) — это значение фиксированной длины, которое вычисляется из блока данных и служит для проверки их целостности. Название историческое: первые такие механизмы буквально складывали числа. Современные алгоритмы складывают мало что, но термин прижился.

У любой контрольной суммы есть три обязательных свойства.

  • Детерминированность. Одни и те же данные всегда дают один и тот же результат — на любом компьютере, в любой операционной системе, через десять лет. Если бы это было не так, проверять было бы нечего.
  • Фиксированная длина. Файл на 3 байта и файл на 30 гигабайт дают отпечаток одинакового размера. У CRC32 это 32 бита (8 шестнадцатеричных символов), у MD5 — 128 бит (32 символа), у SHA-256 — 256 бит (64 символа).
  • Чувствительность к изменениям. Правка одного бита переворачивает результат целиком, а не сдвигает его на единицу.

Последнее свойство проще показать, чем описать. Строка qr даёт CRC32, равный c9f64a58. Меняем последнюю букву на s — это ровно один бит, потому что r в ASCII имеет код 0x72 (01110010), а s — 0x73 (01110011). Новый CRC32: bef17ace. Ничего общего с прежним значением. То же самое с криптографическими функциями: SHA-256 от строки hello начинается с 2cf24dba, а от строки hello с одним пробелом на конце — с 5e3235a8.

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

Чем контрольная сумма не является

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

Зачем это нужно: где именно портятся данные

Вопрос «а что вообще может испортиться» звучит наивно ровно до первой встречи с молчаливым повреждением данных. Ломаются они в самых обычных ситуациях и почти всегда без предупреждения.

  • Передача по сети. Пакет проходит через десятки узлов, где его буферизуют, режут и пересобирают. Помехи в кабеле, сбой памяти на маршрутизаторе, обрыв соединения на середине загрузки — и на диск ложится файл, отличающийся от оригинала.
  • Хранение. Ячейки флеш-памяти теряют заряд, магнитный слой диска деградирует, космические частицы переворачивают биты в оперативной памяти. Явление зовут bit rot: файл лежит нетронутым, но перестаёт быть собой.
  • Копирование и подмена. Прерванная запись на флешку, конвертер, дописавший лишний байт, — или взломанное зеркало, подложившее дистрибутив с бэкдором. Внешне тот же файл того же размера.

Общая черта всех сценариев — повреждение не видно глазом. Архив на 700 мегабайт с одним испорченным байтом выглядит как нормальный архив на 700 мегабайт, а проблема вылезет через месяц, когда файл понадобится. Контрольная сумма превращает невидимую ошибку в явную.

Контрольная сумма не чинит данные и не мешает им портиться. Она делает единственную вещь: сообщает, что данные изменились, — и делает это дёшево и быстро.

Как это работает изнутри

Алгоритмы контроля целостности выстраиваются в лестницу: от примитивных к вычислительно тяжёлым. Чем выше ступень, тем больше ошибок алгоритм замечает и тем дороже обходится расчёт.

Бит чётности и простая сумма

Нижняя ступень — бит чётности: к байту добавляется девятый бит так, чтобы общее число единиц было чётным. Приняли, посчитали единицы, нечётно — ошибка. Стоит почти ничего, десятилетиями использовался в модемах и памяти. Слабость очевидна: если перевернулись сразу два бита, чётность восстанавливается и ошибка проходит незамеченной.

Ступенью выше — сложить все байты и оставить младшие 8 или 16 бит. Так устроены контрольная сумма заголовка IPv4 и, с оговорками, контрольная сумма TCP. Беда в том, что сложение коммутативно: поменяйте два байта местами — результат не изменится, прибавьте единицу к одному байту и вычтите у другого — тоже. Для провода, где типичная ошибка это одиночный перевёрнутый бит, схема годится. Для проверки файла — нет.

CRC — деление многочленов

Циклический избыточный код (Cyclic Redundancy Check) смотрит на данные не как на числа, а как на коэффициенты одного огромного многочлена над полем из двух элементов. Этот многочлен делят на заранее выбранный порождающий полином, и остаток от деления становится контрольной суммой. Сложение здесь — операция «исключающее или», без переносов, поэтому в железе схема раскладывается в сдвиговый регистр из нескольких вентилей и работает на скорости провода.

Порядок байтов при этом важен: перестановка ломает результат. Ключевое свойство CRC доказано математически — код с полиномом степени n гарантированно обнаруживает любую пачку искажённых подряд идущих битов длиной до n включительно. Для CRC-32 это любая непрерывная порча длиной до 32 бит, а именно так и выглядят типичные аппаратные сбои.

Криптографические хеш-функции — верхняя ступень

MD5, SHA-1, SHA-256, ГОСТ Р 34.11-2012 («Стрибог») решают задачу сложнее: не просто заметить случайную ошибку, а сделать вычислительно неподъёмным подбор второго файла с тем же отпечатком. Данные многократно перемешиваются раундами нелинейных преобразований — отсюда и цена: криптографический хеш считается в разы медленнее CRC.

CRC32: где встречается и что умеет

CRC32 в варианте IEEE 802.3 — самый распространённый представитель семейства. Его порождающий полином записывают как 0x04C11DB7 (в «отражённом» виде, привычном программистам, — 0xEDB88320). Результат занимает 32 бита и записывается восемью шестнадцатеричными символами: 3610a686 для строки hello.

Где он работает прямо сейчас на вашем компьютере:

  • Ethernet. Каждый кадр несёт поле FCS с CRC-32. Сетевая карта считает сумму аппаратно и молча выбрасывает повреждённые кадры.
  • ZIP. Формат хранит CRC-32 для каждого упакованного файла. Сообщение «CRC failed» означает ровно одно: распакованные байты не совпали с записанной суммой.
  • PNG. У каждого чанка изображения своя CRC-32. То же самое — в gzip, MPEG-2, SATA и протоколах промышленной автоматики.

Сильные стороны CRC32 — скорость и предсказуемость: на процессоре с аппаратной поддержкой инструкции считаются гигабайты в секунду. Слабая сторона одна, но принципиальная: CRC32 не криптографический. Математика деления многочленов обратима, поэтому подобрать данные под нужное значение CRC32 — задача на несколько минут. Он защищает от случайных сбоев и не защищает от злого умысла. Ещё одна деталь: пространство значений — около 4,3 миллиарда вариантов, и при различении миллионов записей коллизии начнутся раньше, чем подсказывает интуиция, — следствие парадокса дней рождения.

Родственники: CRC-16 и CRC-8

Укороченные версии живут там, где каждый бит на счету. CRC-16/CCITT с полиномом 0x1021 применяется в модемах, картах памяти SD и — что ближе к теме сайта — в платёжных QR-кодах стандарта EMVCo. Последнее поле такого кода, тег 63, содержит четыре шестнадцатеричных символа, посчитанных по всей предшествующей строке. Банковское приложение проверяет это поле раньше, чем смотрит на реквизиты: не сошлось — код битый, платёж не начинается. Механизм разобран в термине контрольная сумма CRC в EMVCo QR.

Хеш-суммы: MD5, SHA-1 и SHA-256

Когда сайт публикует рядом со ссылкой на дистрибутив длинную строку из шестидесяти четырёх символов — это криптографическая хеш-сумма. Её задача шире, чем у CRC: подтвердить, что файл не только не побился, но и не был подменён.

Требований к такому хешу три: невозможно восстановить вход по выходу; невозможно подобрать второй вход с тем же выходом; невозможно найти любую пару разных входов с одинаковым выходом. У старых алгоритмов эти свойства ломались по очереди.

MD5

128 бит, 32 шестнадцатеричных символа. MD5 от строки hello5d41402abc4b2a76b9719d911017c592. Алгоритм создан в начале 1990-х и больше десяти лет был стандартом де-факто. В 2004 году исследователи показали практическую атаку на коллизии; сегодня пары разных файлов с одинаковым MD5 генерируются на обычном ноутбуке за секунды, известны наглядные демонстрации с двумя PDF. Как защита от подмены MD5 мёртв. Как быстрая проверка «не побилось ли при копировании» — работает, и многие зеркала публикуют его по инерции.

SHA-1

160 бит, 40 символов. Долго считался безопасной заменой MD5, пока в 2017 году исследователи Google и CWI не предъявили практическую коллизию — два разных PDF с одинаковым SHA-1. Атака потребовала огромных вычислительных ресурсов, но факт был установлен: браузеры перестали принимать сертификаты с SHA-1, а сам алгоритм выведен из защитных механизмов.

SHA-256 и современные варианты

256 бит, 64 символа. SHA-256 от строки hello: 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824. Практических атак на коллизии SHA-256 нет, и именно его публикуют серьёзные проекты рядом с образами дистрибутивов. Рядом живут SHA-512 (длиннее, на 64-битных процессорах иногда быстрее) и семейство SHA-3 с другой внутренней конструкцией. В российских регламентах роль стандарта играет ГОСТ Р 34.11-2012 «Стрибог» с длиной 256 или 512 бит. Перебор ради подделки здесь упирается в физику: чтобы найти коллизию SHA-256 «в лоб», нужно порядка 2 в степени 128 операций — для такого числа не существует ни энергии, ни времени в масштабах обозримой вселенной.

Целостность против подлинности

Тонкость, о которую спотыкаются даже опытные администраторы: голый хеш рядом с файлом защищает от подмены только тогда, когда сам хеш взят из надёжного источника. Взломали сервер целиком, подменили и дистрибутив, и строку с хешем — проверка пройдёт идеально.

Поэтому суммы серьёзных проектов подписывают криптографической подписью (GPG), а внутри протоколов используют HMAC — конструкцию, где в вычисление подмешивается секретный ключ. Без ключа пересчитать значение невозможно. Разница простая: обычный хеш говорит «данные не изменились», HMAC и подпись — «данные не изменились и пришли от того, от кого должны».

CRC или хеш: что выбирать

Сравнение по существенным параметрам.

ПараметрCRC32MD5SHA-256
Длина результата32 бита, 8 символов128 бит, 32 символа256 бит, 64 символа
СкоростьОчень высокаяВысокаяУмеренная
Ловит случайные сбоиДа, с гарантией по пачкам до 32 битДаДа
Защищает от подменыНетНет (сломан)Да
Типичное применениеСеть, архивы, форматы файловБыстрая проверка копированияДистрибутивы, подписи, репозитории

Правило укладывается в два предложения. Нужно поймать сбой техники — берите CRC32, он в сотни раз быстрее и для этой задачи математически надёжен. Нужно убедиться, что файл не подменили намеренно, — берите SHA-256 и сверяйте с источником, который заслуживает доверия.

Обнаружение против исправления ошибок

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

Классический пример — код Хэмминга: несколько проверочных битов подобраны так, что по их комбинации вычисляется точный номер испорченного бита, и его достаточно перевернуть обратно. Мощнее коды Рида-Соломона: они работают не с битами, а с символами и восстанавливают целые выпавшие фрагменты. На них держатся компакт-диски, спутниковая связь и RAID-массивы.

Тот же принцип объясняет, почему QR-код читается с оторванным углом и наклейкой поперёк. В матрицу изначально записана избыточность по алгоритму Рида-Соломона, и объём этой избыточности задаётся при генерации: уровень L восстанавливает около 7 процентов повреждённых модулей, M — около 15, Q — около 25, H — около 30. Чем выше уровень, тем больше служебных данных и плотнее рисунок при том же объёме полезной информации. Как выбирать уровень под конкретную задачу, разобрано в термине уровни коррекции ошибок; в генераторе QR-кодов уровень задаётся в настройках перед скачиванием.

Итог: контрольная сумма стоит дёшево и говорит «да/нет», коррекция стоит дорого местом и говорит «сломано вот тут, держите оригинал». Первое ставят там, где данные можно перезапросить, второе — там, где переспросить не у кого: диск, эфир, бумажная этикетка.

Как проверить контрольную сумму файла

Сторонних программ не нужно ни в одной из трёх основных систем.

Windows

Через PowerShell (правая кнопка по меню «Пуск» — «Терминал» или «Windows PowerShell»):

Get-FileHash C:\Users\Имя\Downloads\image.iso -Algorithm SHA256

Алгоритм можно заменить на MD5, SHA1, SHA384, SHA512; без параметра применяется SHA-256. В классической командной строке ту же работу делает встроенная утилита certutil:

certutil -hashfile image.iso SHA256

Оба способа выводят строку шестнадцатеричных символов. Сравнивать её глазами по одному знаку — верный путь к ошибке. Скопируйте эталон с сайта и сверьте автоматически:

(Get-FileHash image.iso -Algorithm SHA256).Hash -eq "ВСТАВЬТЕ_ЭТАЛОННЫЙ_ХЕШ"

Ответ True означает совпадение, False — расхождение. Регистр букв роли не играет: 2CF24DBA и 2cf24dba — одно число, и оператор сравнения в PowerShell по умолчанию регистронезависим.

macOS и Linux

В терминале macOS:

shasum -a 256 image.iso
md5 image.iso

В большинстве дистрибутивов Linux:

sha256sum image.iso
md5sum image.iso

Если проект выложил файл со списком сумм (обычно SHA256SUMS или CHECKSUM), проверка делается одной командой без ручного сличения:

sha256sum -c SHA256SUMS

Утилита пройдёт по списку и напишет напротив каждого файла OK или FAILED.

Что сравнивать и с чем

Эталонный хеш берите с официального сайта проекта, а не со страницы зеркала, откуда качали файл: если зеркало скомпрометировано, эталон оттуда бесполезен. И следите, чтобы алгоритмы совпадали — SHA-256 и SHA-512 от одного файла дают совершенно разные строки, и «не совпало» в этом случае означает только то, что вы посчитали не то.

Контрольная сумма не совпала: что делать

Несовпадение — это не приговор файлу, а сигнал к диагностике. Причины по убыванию частоты выглядят так.

Загрузка не завершилась или прервалась. Самый частый случай. Сверьте размер файла в байтах с указанным на сайте — расхождение сразу видно. Качайте заново, лучше через менеджер загрузок с докачкой.

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

Файл повредился при передаче или на диске. Скачайте повторно, желательно с другого зеркала. Если и вторая копия расходится с эталоном — проблема на вашей стороне: подозревайте оперативную память, кабель, накопитель. Прогоните тест памяти и проверьте SMART диска.

Ошибка на стороне публикации. Изредка сопровождающие обновляют файл и забывают обновить хеш. Признак — несовпадение у всех пользователей сразу, что обычно всплывает в трекере проекта.

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

Общее правило: файл с несовпавшей суммой не открывают и не устанавливают «на всякий случай», его удаляют и качают заново. Испорченный архив иногда спасают средствами архиватора, если при упаковке добавлялась информация для восстановления. Испорченный исполняемый файл чинить бессмысленно и опасно.

Где контрольные суммы работают каждый день

Механизм настолько врос в инфраструктуру, что его перестают замечать. Где он срабатывает без вашего участия:

  • Каждый сетевой пакет. Ethernet-кадр несёт CRC-32, заголовок IP и TCP-сегмент — свои суммы. Битый пакет отбрасывается, отправитель шлёт заново. Поэтому файл и доезжает целым по неидеальному каналу.
  • Архивы и файловые системы. ZIP, 7z и tar.gz хранят суммы для каждого элемента. ZFS и Btrfs считают её для каждого блока и обнаруживают молчаливое повреждение прямо при чтении.
  • Репозитории пакетов и git. Менеджер пакетов проверяет хеш до установки. Git адресует объекты хешем содержимого: идентификатор коммита и есть его контрольная сумма.
  • Обновления прошивок. Устройство считает сумму загруженного образа перед записью. Не сошлась — обновление отменяется, и это единственное, что стоит между роутером и превращением в кирпич.
  • Пароли на серверах. Хранятся не сами пароли, а их хеши, посчитанные специальными медленными функциями с солью. Родственный механизм с другой целью.

Контрольная сумма и контрольная цифра — разные вещи

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

Контрольная цифра — один-единственный знак в конце короткого номера, вычисленный по простой арифметической формуле. Так устроены последняя цифра штрих-кода EAN-13, номер банковской карты (алгоритм Луна), ИНН, СНИЛС, ISBN. Задача узкая: поймать опечатку человека или ошибку сканера. Формулы намеренно примитивные, чтобы считаться в уме или в железе кассы. Как считается контрольная цифра EAN-13 и почему сканер отказывается читать код при её несоответствии, подробно разобрано в статье про то, как сделать штрих-код онлайн.

Контрольная сумма работает с произвольным объёмом данных — от короткой строки до терабайтного образа — и даёт от 32 до 512 бит. Её считают алгоритмом, а не формулой в две строки, и рассчитана она на машинные сбои и подмену, а не на человеческую опечатку.

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

Короткий чек-лист

  • Контрольная сумма — отпечаток данных фиксированной длины: замечает изменение, но не исправляет его.
  • Изменение одного бита меняет отпечаток целиком, похожих сумм у похожих файлов не бывает.
  • CRC32 — быстрый, для случайных сбоев: сеть, архивы, форматы файлов. От подмены не защищает.
  • MD5 и SHA-1 для защиты от подмены непригодны: коллизии для них построены практически.
  • SHA-256 — рабочий стандарт для дистрибутивов; в российских регламентах — ГОСТ Р 34.11-2012.
  • Эталон берите с официального сайта, а не с того зеркала, откуда качали файл, и сравнивайте автоматически, а не глазами.
  • Windows: Get-FileHash файл -Algorithm SHA256. Linux: sha256sum, macOS: shasum -a 256.
  • Не совпало — сверьте размер и версию, скачайте заново с другого зеркала, подозрительный установщик не запускайте.

Частые вопросы

Как проверить контрольную сумму файла в Windows?

Дополнительные программы устанавливать не нужно, в системе есть два встроенных инструмента. Первый — PowerShell: откройте его через меню «Пуск» и выполните команду Get-FileHash C:\путь\к\файлу.iso -Algorithm SHA256. Вместо SHA256 допустимы MD5, SHA1, SHA384 и SHA512; если параметр не указать вовсе, применяется SHA-256. Второй инструмент — утилита certutil в обычной командной строке: certutil -hashfile файл.iso SHA256. Оба способа выведут длинную строку шестнадцатеричных символов. Сверять её с эталоном вручную, посимвольно, не стоит: на шестидесяти четырёх знаках глаз ошибается регулярно. Надёжнее скопировать эталонное значение с официального сайта проекта и выполнить в PowerShell сравнение: (Get-FileHash файл.iso -Algorithm SHA256).Hash -eq "эталон". Результат True означает, что файл целый, False — что где-то расхождение. Регистр букв роли не играет, шестнадцатеричная запись в верхнем и нижнем регистре обозначает одно число. Важная деталь: эталонный хеш нужно брать с сайта разработчика, а не со страницы зеркала, с которого шла загрузка.

Что делать, если контрольная сумма не совпадает?

Начните с самой частой причины — незавершённой загрузки. Сравните размер файла в байтах с указанным на сайте: расхождение сразу всё объясняет. Вторая по частоте причина — сравнение не того с тем: посчитали SHA-256, а на странице опубликован SHA-512, либо у вас на руках другая сборка, чем та, для которой приведён эталон. Проверьте номер версии и название алгоритма. Если версия и алгоритм верные, скачайте файл заново, желательно с другого зеркала. Совпало со второй попытки — предыдущая загрузка просто побилась в пути. Если и вторая копия расходится с эталоном, ищите проблему у себя: сбойная оперативная память, деградировавший накопитель, плохой кабель. Прогоните тест памяти и посмотрите SMART диска. Отдельно держите в голове вариант подмены: файл со стороннего зеркала, торрента или ссылки из письма, у которого сумма стабильно не сходится с официальной, запускать нельзя, особенно если это установщик. Общее правило одно: файл с несовпавшей суммой не устанавливают и не распаковывают, его удаляют и качают заново.

Чем CRC32 отличается от MD5 и SHA-256?

Различие в задаче, а не в длине результата. CRC32 — не криптографический алгоритм: он вычисляет остаток от деления данных на порождающий многочлен и создан, чтобы ловить случайные аппаратные сбои. Делает он это отлично и очень быстро, с математической гарантией обнаружения любой непрерывной пачки искажённых битов длиной до 32. Но подобрать данные под заданное значение CRC32 несложно, поэтому от намеренной подмены он не защищает вообще. MD5 и SHA-256 — криптографические хеш-функции, от которых требуется вычислительная невозможность подобрать второй файл с тем же отпечатком. MD5 длиной 128 бит этому требованию больше не соответствует: практические коллизии для него строятся с 2004 года, известны пары разных PDF с одинаковым MD5. SHA-1 сломан аналогично, публичная коллизия предъявлена в 2017 году. SHA-256 с длиной 256 бит на сегодня практических атак не имеет и служит рабочим стандартом. По скорости порядок обратный: CRC32 быстрее MD5, MD5 быстрее SHA-256. Практический выбор: контроль случайных сбоев внутри своей системы — CRC32; проверка скачанного дистрибутива на подлинность — SHA-256.

Контрольная сумма и контрольная цифра — это одно и то же?

Нет, это разные механизмы с общей идеей избыточности. Контрольная цифра — один знак в конце короткого номера, вычисленный элементарной арифметикой: взвешенное суммирование остальных цифр и дополнение до кратного десяти или похожая схема. Так работают последняя цифра штрих-кода EAN-13, номера банковских карт по алгоритму Луна, ИНН, СНИЛС, ISBN. Задача узкая и человеческая: поймать опечатку при ручном вводе, перепутанную цифру, переставленные местами соседние знаки. Формулы намеренно простые, чтобы считаться мгновенно и в дешёвом железе. Контрольная сумма имеет дело с произвольным объёмом данных — от строки в пару байт до образа на десятки гигабайт — и выдаёт от 32 до 512 бит. Считается она полноценным алгоритмом: делением многочленов в случае CRC или многораундовым перемешиванием в случае SHA. Рассчитана на машинные сбои при передаче и хранении, а криптографические варианты — ещё и на защиту от целенаправленной подмены. Проще говоря, контрольная цифра — это карманная версия той же идеи, сжатая до одного знака.

Зачем сайты публикуют хеш рядом со ссылкой на скачивание?

По двум причинам сразу. Первая — техническая: загрузка большого файла может оборваться или побиться, зеркало может отдать неполную копию, и пользователь узнает об этом на середине установки. Хеш позволяет проверить целостность за несколько секунд до того, как испорченный образ попадёт в дело. Вторая причина серьёзнее: дистрибутивы распространяются через сеть зеркал, которые проект не контролирует напрямую. Взлом одного зеркала и подмена установщика на версию с бэкдором — сценарий, который в жизни случался неоднократно. Опубликованный на официальном сайте хеш даёт возможность отличить оригинал от подделки. Ключевая оговорка: эталон должен быть взят с источника, отличного от места загрузки. Если и файл, и хеш вы взяли с одного скомпрометированного зеркала, проверка ничего не докажет — злоумышленник обновит обе строки. Поэтому зрелые проекты идут дальше и подписывают файл с суммами криптографической подписью GPG: подпись невозможно подделать без закрытого ключа, и она подтверждает не только целостность, но и авторство.

Можно ли восстановить файл по контрольной сумме?

Нет, и это принципиальное ограничение, а не недоработка. Контрольная сумма — преобразование в одну сторону с потерей информации: гигабайты данных сжимаются до 32 или 64 символов, и обратного пути не существует. Одному значению хеша соответствует бесконечное множество возможных файлов, поэтому по отпечатку нельзя понять, какой именно файл его породил. Сумма отвечает только на вопрос «данные те же самые или изменились», ничего не говоря о том, что и где изменилось. Для восстановления нужны принципиально другие механизмы — коды с коррекцией ошибок, которые закладывают избыточность заранее и с запасом. Код Хэмминга добавляет проверочные биты так, чтобы вычислить точный номер испорченного бита и перевернуть его обратно. Коды Рида-Соломона работают с группами символов и восстанавливают целые выпавшие фрагменты — на них держатся компакт-диски, спутниковая связь, RAID-массивы и способность QR-кода читаться с оторванным углом. Платят за это местом: избыточность занимает от нескольких процентов до трети объёма. Контрольная сумма дешевле именно потому, что не умеет чинить.