
Скачали образ системы на несколько гигабайт, а он не устанавливается. Архив внезапно сообщает о повреждённых данных. Или файл, который спокойно хранился на диске несколько лет, однажды перестает открываться. Во всех этих случаях возникает один и тот же вопрос: данные остались такими же, какими были изначально, или где-то произошла ошибка?
Ответить на него помогает контрольная сумма. Это короткое значение, которое рассчитывается на основе содержимого файла или другого блока данных по определённому алгоритму. Если повторно вычислить сумму и сравнить её с исходной, можно понять, изменились данные или нет.
Контрольная сумма (checksum) — это значение фиксированной длины, которое получают из некоторого набора данных и используют для проверки их целостности. Несмотря на название, современные алгоритмы далеко не всегда что-то буквально «суммируют».
У контрольной суммы есть несколько важных свойств. Во-первых, одинаковые данные всегда дают одинаковый результат. Во-вторых, длина результата не зависит от размера исходного файла: для CRC32 это 32 бита, для MD5 — 128 бит, для SHA-256 — 256 бит. В-третьих, даже небольшое изменение исходных данных должно заметно менять полученный результат.
Например, если изменить всего один символ в строке, контрольная сумма может измениться полностью. Это называют лавинным эффектом: небольшое изменение входных данных приводит к существенному изменению выходного значения.
Важно понимать и ограничения. Контрольная сумма не сжимает файл и не позволяет восстановить исходные данные по полученному значению. Она также не является шифрованием: содержимое файла от неё не становится секретным. Кроме того, обычная контрольная сумма сама по себе не доказывает подлинность файла. Если злоумышленник изменил и файл, и опубликованную рядом с ним сумму, простая проверка ничего не обнаружит.
Повреждение данных может произойти в самых обычных ситуациях. Например, файл может пострадать во время передачи по сети из-за сбоя оборудования или прерванного соединения. Иногда проблема возникает уже при хранении: накопители постепенно деградируют, а отдельные биты могут измениться без явных признаков неисправности. Такой процесс часто называют bit rot.
Проблемы возникают и при копировании. Например, запись на флешку могла завершиться некорректно, конвертер — изменить содержимое файла, а сторонний сервер — предоставить изменённую версию программы.
При этом внешне повреждённый файл может ничем не отличаться от оригинала. Архив размером 700 МБ с одним изменившимся байтом всё ещё будет выглядеть как обычный архив на 700 МБ. Контрольная сумма как раз позволяет обнаружить подобную проблему.
Главное: контрольная сумма не исправляет повреждённые данные и не предотвращает их повреждение. Она только позволяет быстро определить, изменилось содержимое или нет.
Алгоритмы проверки целостности можно условно расположить от самых простых до более сложных. Чем выше требования к надежности, тем больше вычислений требуется для получения результата.
Один из простейших вариантов — бит четности. К данным добавляется дополнительный бит таким образом, чтобы общее количество единиц соответствовало определённому правилу. При получении данных проверка показывает, произошла ли ошибка.
Метод очень дешевый с точки зрения вычислений, но имеет серьезные ограничения. Например, при изменении сразу нескольких битов ошибка может остаться незамеченной.
Следующий уровень — обычное сложение байтов с сохранением определенного количества младших битов. Подобные схемы применяются в некоторых сетевых протоколах. Однако они также имеют слабые места: перестановка байтов или определённые комбинации изменений могут оставить результат прежним.
CRC расшифровывается как Cyclic Redundancy Check. В основе алгоритма лежит математическая операция с двоичными многочленами. Полученный остаток и становится контрольным значением.
В отличие от простой суммы, CRC учитывает порядок байтов, поэтому перестановка данных меняет результат. Например, CRC с полиномом степени 32 гарантированно обнаруживает непрерывные повреждения длиной до 32 бит.
CRC особенно хорош там, где требуется очень быстро обнаруживать случайные ошибки. Именно поэтому он широко применяется в сетевых протоколах, архивах и форматах файлов.
MD5, SHA-1, SHA-256 и ГОСТ Р 34.11-2012 решают более сложную задачу. Они предназначены не только для обнаружения случайного изменения данных, но и для создания устойчивого цифрового отпечатка, который крайне сложно подделать.
При этом криптографические хеши обычно вычисляются дороже, чем CRC. Поэтому использовать SHA-256 там, где нужно просто быстро обнаружить случайную ошибку передачи, может быть избыточно.
CRC32 — один из самых известных вариантов CRC. Его результат занимает 32 бита и обычно записывается как восемь шестнадцатеричных символов.
Этот алгоритм можно встретить непосредственно в повседневной работе компьютера. Например, Ethernet использует CRC-32 для проверки сетевых кадров. ZIP хранит CRC-32 для отдельных файлов внутри архива, а PNG использует CRC для своих блоков. Аналогичные механизмы встречаются в gzip, MPEG-2, SATA и промышленном оборудовании.
Главное преимущество CRC32 — высокая скорость. Но криптографической защитой он не является. Злоумышленник способен подобрать данные с нужным значением CRC32, поэтому использовать его для защиты от намеренной подмены нельзя.
Существуют и более короткие варианты — CRC-16 и CRC-8. Например, CRC-16/CCITT применяется в различных устройствах и протоколах, а также используется в платежных QR-кодах стандарта EMVCo.
Если рядом со ссылкой на скачивание программы или образа операционной системы опубликована длинная последовательность из шестнадцатеричных символов, скорее всего, это криптографический хеш.
Его задача — дать возможность проверить, что скачанный файл соответствует исходному. Для этого пользователь вычисляет хеш своего файла и сравнивает его с эталонным значением.
MD5 создаёт значение длиной 128 бит, или 32 шестнадцатеричных символа. Алгоритм получил широкое распространение ещё в 1990-х годах, но сегодня использовать его для защиты от преднамеренной подмены нельзя: для него существуют практические атаки на коллизии.
Для простой проверки того, что файл не изменился случайно при копировании, MD5 всё ещё можно встретить, однако для задач безопасности следует использовать более современные алгоритмы.
SHA-1 выдаёт 160-битный результат, обычно представленный 40 символами. Когда-то его рассматривали как безопасную замену MD5, однако в 2017 году была продемонстрирована практическая коллизия SHA-1.
Поэтому SHA-1, как и MD5, больше не следует использовать для криптографической защиты от подмены.
SHA-256 формирует 256-битный хеш, то есть 64 шестнадцатеричных символа. На сегодняшний день он остаётся одним из основных вариантов для проверки загружаемых файлов и дистрибутивов.
Также существуют SHA-512 и семейство SHA-3. В российских стандартах используется ГОСТ Р 34.11-2012, известный как «Стрибог», с длиной результата 256 или 512 бит.
Здесь есть важный нюанс. Если разработчик опубликовал файл и SHA-256 рядом с ним на том же сервере, это позволяет проверить целостность только при условии, что самому источнику можно доверять.
Если злоумышленник получил контроль над сервером и заменил одновременно файл и хеш, обычная проверка успешно подтвердит уже поддельный файл.
Для защиты от такого сценария применяются цифровые подписи и HMAC. Они позволяют проверить не только неизменность данных, но и их происхождение.

Выбор довольно простой: если нужно быстро обнаруживать случайные технические ошибки, подходит CRC32. Если требуется проверить скачанный файл на соответствие официальному оригиналу, лучше использовать SHA-256.
Наша система сама подберет вам исполнителей на услуги, связанные с разработкой сайта или приложения, поисковой оптимизацией, контекстной рекламой, маркетингом, SMM и PR.
Заполнить заявку
13755 тендеров
проведено за восемь лет работы нашего сайта.
Контрольная сумма умеет определить, что данные изменились, но сама по себе не показывает, какой именно бит повреждён, и тем более не восстанавливает исходное содержимое.
Для исправления ошибок существуют специальные коды с избыточностью. Один из классических примеров — код Хэмминга. Более мощный вариант — коды Рида — Соломона, которые позволяют восстанавливать повреждённые фрагменты данных. Они используются, например, в оптических дисках, спутниковой связи и некоторых системах хранения.
По тому же принципу работает коррекция ошибок в QR-кодах. В матрицу заранее добавляются избыточные данные, благодаря чему сканер способен восстановить часть информации даже при повреждении изображения. В зависимости от уровня коррекции можно восстановить примерно 7%, 15%, 25% или 30% повреждённых модулей.
Поэтому контрольную сумму и коррекцию ошибок не стоит путать: первая отвечает на вопрос «данные изменились?», вторая помогает ответить на вопрос «можно ли восстановить исходные данные?».
Для базовой проверки не обязательно устанавливать отдельные программы. В Windows, macOS и Linux уже есть необходимые инструменты.
В PowerShell можно использовать команду:
Get-FileHash C:\Users\Имя\Downloads\image.iso -Algorithm SHA256
При необходимости вместо SHA256 можно указать MD5, SHA1, SHA384 или SHA512.
В обычной командной строке Windows есть утилита certutil:
certutil -hashfile image.iso SHA256
Обе команды выведут шестнадцатеричный хеш файла.
Если нужно не смотреть на длинную строку вручную, а сразу получить ответ «совпало/не совпало», в PowerShell можно выполнить:
(Get-FileHash image.iso -Algorithm SHA256).Hash -eq "ВСТАВЬТЕ_ЭТАЛОННЫЙ_ХЕШ"
True означает совпадение, False — расхождение.
В macOS SHA-256 можно получить командой:
shasum -a 256 image.iso
MD5:
md5 image.iso
В Linux обычно используются:
sha256sum image.iso
md5sum image.iso
Если разработчик предоставил файл со списком контрольных сумм, например SHA256SUMS, можно проверить всё автоматически:
sha256sum -c SHA256SUMS
Система сама сопоставит файлы со значениями и сообщит OK или FAILED.
Эталонную сумму желательно брать с официального сайта разработчика или проекта, а не с того же стороннего зеркала, откуда был скачан файл. В противном случае при компрометации зеркала злоумышленник может заменить и файл, и опубликованный рядом хеш.
Также обязательно проверяйте алгоритм. SHA-256 и SHA-512 для одного и того же файла дадут разные значения, и это нормально. Сравнивать нужно только результаты, рассчитанные одним и тем же алгоритмом.
Несовпадение ещё не означает, что файл обязательно подменили. Сначала нужно исключить более простые причины.
Чаще всего загрузка просто завершилась некорректно. Сравните размер файла с размером, указанным на сайте, и попробуйте скачать его повторно.
Следующая распространенная причина — выбран неправильный алгоритм или версия файла. Например, на сайте указан SHA-512 для версии 2.4.2, а вы скачали 2.4.1 и вычисляете SHA-256. В таком случае результаты закономерно не совпадут.
Если алгоритм и версия правильные, скачайте файл ещё раз, желательно с другого зеркала. Если вторая копия совпала с эталоном, скорее всего, проблема была в первой загрузке.
Если несколько копий подряд не соответствуют официальной сумме, стоит проверить накопитель, оперативную память и другие компоненты системы.
Наконец, существует и наиболее опасный вариант — подмена файла. Если программа скачана со стороннего зеркала, из торрента или по неизвестной ссылке, а SHA-256 стабильно отличается от официального значения, такой файл запускать не стоит. Особенно это касается установщиков и исполняемых файлов.
Контрольные суммы настолько прочно вошли в компьютерную инфраструктуру, что многие пользователи даже не замечают их работу.
Они применяются при передаче сетевых пакетов, в архивах и файловых системах, при установке пакетов и обновлений, в системах контроля версий и при проверке прошивок устройств. Например, ZIP хранит CRC для файлов внутри архива, а сетевое оборудование использует контрольные значения для обнаружения поврежденных пакетов.
Отдельная область — хранение паролей. Здесь используются уже специальные криптографические функции, причем пароли хранятся не в виде обычного текста, а в виде производных значений с солью. Это родственная идея, но задача у неё другая — защита секретов, а не проверка целостности файла.
Из-за похожих названий эти понятия часто путают, хотя используются они для разных задач.
Контрольная цифра — это один символ в конце короткого номера, рассчитанный по определённой формуле. Она используется, например, в EAN-13, банковских картах по алгоритму Луна, ИНН, СНИЛС и ISBN. Её основная задача — обнаружить опечатку или ошибку при вводе и считывании.
Контрольная сумма может рассчитываться для данных практически любого объёма — от небольшой строки до огромного файла. Для неё используются специальные алгоритмы, а результат может занимать от нескольких десятков до нескольких сотен бит.
То есть общая идея у механизмов одна — добавить к данным информацию для проверки, но масштаб и назначение совершенно разные.
Контрольная сумма — это фиксированный отпечаток данных, который позволяет обнаружить изменение, но не исправляет его.
Даже небольшое изменение исходных данных может полностью изменить результат.
CRC32 подходит для быстрого обнаружения случайных ошибок.
MD5 и SHA-1 нельзя использовать для защиты от намеренной подмены.
SHA-256 подходит для проверки целостности и происхождения файлов при наличии доверенного эталона.
Эталонный хеш лучше брать с официального сайта проекта.
В Windows можно использовать Get-FileHash, в Linux — sha256sum, в macOS — shasum -a 256.
При несовпадении сначала проверьте размер, версию файла и алгоритм, а затем скачайте файл повторно.
Подозрительный файл с несовпавшей контрольной суммой не следует запускать.
Контрольная сумма и контрольная цифра решают разные задачи.
Устанавливать дополнительное ПО не обязательно. В PowerShell используется Get-FileHash, например:
Get-FileHash C:\путь\к\файлу.iso -Algorithm SHA256
В командной строке можно воспользоваться certutil:
certutil -hashfile файл.iso SHA256
Полученный результат сравнивают с эталоном, опубликованным разработчиком. Надежнее выполнять автоматическое сравнение, а не проверять длинную строку вручную.
Сначала проверьте размер файла, его версию и используемый алгоритм. Если всё совпадает, скачайте файл заново, желательно из другого источника. Если результат снова отличается от официального, файл лучше не запускать и разобраться с причиной расхождения.
Главное различие — назначение. CRC32 создан для очень быстрого обнаружения случайных ошибок и не защищает от намеренной подмены. MD5 и SHA-256 относятся к криптографическим хеш-функциям, однако MD5 сегодня считается небезопасным для защиты от коллизий. SHA-256 остаётся практическим современным вариантом для проверки файлов.
Нет. Контрольная цифра обычно представляет собой один символ в составе короткого номера и предназначена для обнаружения ошибок при вводе. Контрольная сумма рассчитывается для произвольного блока данных и используется для проверки его целостности. Например, последняя цифра EAN-13 — контрольная цифра, а SHA-256 файла — криптографическая хеш-сумма.
Зависит от алгоритма и способа публикации эталона. CRC32 для защиты от намеренной подмены не подходит. Даже SHA-256 не даёт гарантии подлинности, если злоумышленник способен заменить одновременно файл и опубликованный рядом хеш. Для подтверждения источника применяются цифровые подписи или HMAC.
В QR-кодах используется уже не обычная контрольная сумма для проверки целостности, а механизмы коррекции ошибок. Благодаря избыточным данным QR-код может оставаться читаемым даже при частичном повреждении изображения. При создании QR-кодов это позволяет выбрать подходящий уровень коррекции в зависимости от условий использования.