Контрольные суммы в Linux: cksum, md5sum, sha256sum

Контрольная сумма (хеш) – фиксированная строка, вычисленная по содержимому файла. Совпал хеш с эталоном – байты те же; не совпал – файл другой, битый или подменён. В Linux для этого есть cksum, md5sum, sha1sum, sha256sum и родственные утилиты из coreutils.

cksum

cksum считает CRC (исторически POSIX CRC) и печатает ещё размер файла. Удобно для быстрой проверки «не поехало ли», не для криптостойкой защиты от подмены.

cksum example.txt

Пример вывода:

1258926179 1024 example.txt
  • 1258926179 – контрольная сумма;
  • 1024 – размер в байтах;
  • example.txt – имя файла.

md5sum

MD5 даёт 128-битный хеш в hex. Для проверки целостности после копирования ещё встречается, но для подписи «файл точно от автора» MD5 давно не подходит: известны практические коллизии. Если сайт отдаёт только MD5, лучше искать SHA-256 рядом.

md5sum example.txt

Пример (хеш пустого файла):

d41d8cd98f00b204e9800998ecf8427e  example.txt

sha1sum

SHA-1 – 160 бит. Надёжнее MD5 для случайных повреждений, но тоже считается криптографически слабым (коллизии). В новых схемах предпочтительнее семейство SHA-2.

sha1sum example.txt

Пример:

da39a3ee5e6b4b0d3255bfef95601890afd80709  example.txt

sha256sum

SHA-256 – рабочий стандарт для ISO, deb, образов контейнеров и «проверьте скачанное». 256-битный дайджест; коллизии на практике для подмены файлов не эксплуатируются так, как у MD5/SHA-1.

sha256sum example.txt

Пример (снова пустой файл):

e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855  example.txt

Есть и sha512sum, b2sum (BLAKE2) – смысл тот же, другой алгоритм.

Зачем считать хеши

  • Целостность – скачали ISO, сверили с опубликованным SHA-256;
  • Копии и бэкапы – два файла с одним хешем с высокой вероятностью идентичны по содержимому;
  • Обнаружение подмены – при условии, что эталонный хеш получен по доверенному каналу (HTTPS сайта дистрибутива, GPG-подпись и т.п.).

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

Проверка по файлу сумм: ключ -c

У md5sum / sha*sum опция -c сверяет файлы со списком вида хеш имя:

sha256sum example.txt archive.tar.gz > checksums.txt
sha256sum -c checksums.txt

Успех:

example.txt: OK
archive.tar.gz: OK

Если байты изменились, будет FAILED и ненулевой код выхода – удобно в скриптах и CI.

Несколько файлов сразу

sha256sum *.txt
sha256sum file1.bin file2.bin
find . -type f -name '*.iso' -print0 | xargs -0 sha256sum

Вывод можно сразу перенаправить в .sha256 и раздавать вместе с архивом.

Что выбрать

  • быстро «не битый ли файл» внутри доверенной среды – хватит и CRC/cksum или MD5;
  • публичные загрузки, дистрибутивы, образы – SHA-256 (или SHA-512), плюс по возможности подпись GPG;
  • не полагаться на MD5/SHA-1 как на защиту от злонамеренной подмены.

Итого: для повседневной проверки скачанного в Linux чаще всего достаточно sha256sum файл и сверки с эталоном; для пачки файлов – сохранить список и прогнать sha256sum -c.

Источники и ссылки


Комментарии загружаются…