Контрольная сумма файла

Контрольная сумма файла

При скачивании образов дисков с играми, дистрибутивов или архивов с программами часто можно видеть в приложении к файлам указанные строки, говорящими о контрольных суммах файлов: CRC32, MD5, SHA и т.д. Некоторые пользователи не понимают, зачем это нужно и как проверять эти суммы. Да и нужно ли проверять?

Если файл скачивается из доверенного источника, то нет никакой необходимости дополнительно проверять его, поэтому данные о контрольной сумме можно игнорировать. Гораздо интереснее вопрос, если сумма привязана к утилите «ломалке» от группы хакеров. Допустим, известно, что программа должна выполнять свою роль. Но кто знает, что сделал с программой человек, который выложил ее на сайте? В этом и других случаях контрольные и хэш-суммы позволяют убедиться в том, что файл передан без изменений, с сохранением целостности.

Вообще, понятие контрольных кодов или сумм появилось много лет назад с появлением цифровых каналов передачи данных. Первые каналы были зашумлены паразитными наводками, что вынуждало проверять каждый пакет, исходящий из источника. В простейшем случае, данные пакета побайтно суммировались, переполнения игнорировались, а остаток и являлся самой простейшей реализацией правильности передачи пакета. Конечно, в настоящее время такие примитивные алгоритмы больше не используются, но смысл остается один: КС, или хэш-функция позволяют обрабатывать большие блоки исходных данных, формируя выходное число от 1 до 64 байтов.

Алгоритм построен таким образом, что изменение лишь одного бита приведет к изменению всей суммы. Простая перестановка байтов, которая в математике не влияет на сумму, в хэше тоже учитывается. Интересно, что для зашумленных каналов применяются как пассивные диагностические коды, просто выдающие результат передачи, так и активные коды, которые способы самовосстанавливаться. Дело в том, что КС передается тоже по каналу с помехами, и в нем тоже могут появиться ошибки. Но для их исправления существует очень мощный апробированный математический аппарат. К примеру, коды Рида-Соломона работают на уровне контроллера дисковых систем, исправляя случайные ошибки при записи на жесткий диск. Аналогичные алгоритмы исправляют ошибки оперативной памяти, так как на нее влияет даже солнечная активность: солнечный ветер просто «вышибает» заряд из банка памяти.

Хотя описания алгоритмов и их реализаций в коде встречается много, с первого раза трудно найти инструменты для, собственно, проверки приведенной контрольной суммы. В этом случае не грех заглянуть в Википедию, где имеется ссылка на замечательный инструментарий под названием Fsum Frontend. Это бесплатная программа, которую можно скачать с сайта fsumfe.sourceforge.net прямо вместе с исходниками. Она содержит в себе реализацию 96 алгоритмов вычисления контрольных сумм и хэш-последовательностей. Если вас заинтересуют подробности формирования каждой суммы (например, для собственной реализации), то придется обращаться на математические форумы.