Проверка загруженных файлов

Возможно, вам приходилось загружать какое-то программное обеспечение с открытым исходным кодом (например ISO Linux), и рядом со ссылкой для загрузки вы заметили ссылку для загрузки контрольной суммы файла. Вы когда-нибудь задумывались, для чего нужна эта контрольная сумма? Она используется для проверки целостности загруженного вами файла.

20 февраля 2016 года сайт Linux Mint, популярный дистрибутив Linux, был взломан, и ISO, используемый для установки дистрибутива, был скомпрометирован. До того, как скомпрометированный ISO был обнаружен, многие люди загрузили и, возможно, установили версию Linux Mint вместе с лазейкой.

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

Проверка файлов может не только указать пользователю, что файл был взломан, но также и сообщить, что загруженный файл не совсем правильный или он изменился во время процесса загрузки. Если при загрузке был удален пакет TCP, проверка файла позволит вам узнать, что загруженное вами приложение отличается от того, что доступно на исходном сервере.

В этой статье вы узнаете, что такое проверка файлов, почему это важно и как это делается в разных операционных системах с помощью инструментов командной строки.

Требования

В этой статье вы будете использовать инструменты командной строки для проверки файлов, встроенные в вашу основную операционную систему.

Вам понадобится файл, который нужно проверить, а также контрольные суммы MD5 и SHA1 этого файла.

В мануале для этого используется Ubuntu ISO. Загрузите Ubuntu Minimal CD ISO для 64-битной системы. Также запишите суммы MD5 и SHA1.

Как работает проверка файлов?

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

Процесс генерации контрольной суммы часто называют однонаправленной криптографической функцией. Когда вы хешируете файл, он «суммируется» в строку случайных символов. Допустим, у вас есть документ, содержащий 1000 символов. Когда файл хешируется с помощью алгоритма MD5, итоговая контрольная сумма будет 32 случайных символа. Если вы хотите записать файл длиной 2000 символов, итоговая контрольная сумма MD5 будет равна 32 символам. Даже если исходный файл содержит всего 10 символов, контрольная сумма MD5 все равно будет состоять из 32 случайных символов.

Хешируя один и тот же файл, вы всегда будете получать одну и ту же строку символов в хэше при условии, что ни один бит этого файла не изменился. Но если файл хотя бы даже несущественно отличается от исходника (например, в файле появился новый символ пробела), контрольная сумма будет совершенно другой.

Существует два типа контрольных сумм, которые обычно используются для проверки файлов, MD5 и SHA.

Алгоритм MD5 критикуют в мире шифрования за то, что его легко взломать, но это не относится к процедуре проверки файлов. Когда дело доходит до проверки целостности файла, слабость инструмента для шифрования не имеет значения. Это хорошо, потому что MD5 – зрелый инструмент, который быстрее других методов хеширует файлы.

В последнее время наблюдается рост популярности алгоритма хеширования SHA, поскольку этот алгоритм хеширования, используется в современном шифровании. Однако, в отличие от MD5, SHA имеет разные версии, и при проверке важно использовать правильную версию. Версия определяется порядковым номером (например 1, 2, 3), или количеством запусков SHA подряд (например 256, 384 или 512). Контрольная сумма, которую вы используете, должна указывать, какую версию SHA использовать. Если на сайте хеш указан просто с пометкой SHA, без номера, то можно с уверенностью предположить, что нужно использовать SHA1.

Для проверки файлов оба метода одинаково хороши. Хотя алгоритмы отличаются, оба возвращают случайную строку заданной длины (хотя хеши MD5 короче любого из хешей SHA).

Примечание: Иногда для проверки файлов предоставляются подписи PGP/GPG. Такого рода подписи не очень распространены, и они более тщательно проверяются. Для этого нужно, чтобы вы загрузили контрольную сумму и открытый ключ сайта и чтобы настроили gpg в системе для выполнения проверки. Эти шаги выходят за рамки данной статьи.

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

Проверка файлов в Linux

В большинстве дистрибутивов Linux есть инструменты командной строки для каждого алгоритма хеширования. Образец именования таких инструментов – «HASH-TYPE» плюс слово «sum». Итак, чтобы создать хэш с помощью MD5, нужно указать имя программы — md5sum. Для хеширования с помощью SHA 256 используется команда sha256sum. Если вы не знаете точное имя, введите имя алгоритма хеширования, а затем дважды нажмите tab, и большинство дистрибутивов отобразит все команды, начинающиеся с имени этого алгоритма. Ниже мы рассмотрим несколько примеров проверки файлов.

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

md5sum mini.iso

Вы получите примерно такой результат:

8388f7232b400bdc80279668847f90da  mini.iso

Эта случайная строка, начиная с «8388f», является контрольной суммой, и ее вам нужно сравнить с контрольной суммой, предоставленной на странице загрузки пакета.

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

Например, если вы хотите быстро убедиться, что контрольная сумма для mini.iso совпадает, убедитесь, что обе контрольные суммы начинаются с «8388f» и заканчиваются на «f90da». Если суммы совпадают, то очень вероятно (почти на 100%), весь остальной хеш тоже.

Если вы хотите быть на 100% уверенным, просто скопируйте и вставьте контрольную сумму с веб-сайта под выводом локальной проверки, чтобы узнать, все ли сходится:

8388f7232b400bdc80279668847f90da  mini.iso
8388f7232b400bdc80279668847f90da

Теперь давайте попробуем проверить хеш с помощью SHA. Наиболее распространенными командами хеширования SHA являются sha1sum и sha256sum. Выполните команду sha1sum, передав ей путь к файлу:

sha1sum mini.iso

Вывод будет примерно таким:

cce936c1f9d1448c7d8f74b76b66f42eb4f93d4a  mini.iso

Сравните полученное значение со значением на веб-сайте, чтобы убедиться, что они совпадают.

Проверка файлов на macOS

В отличие от Linux, macOS имеет только две команды хеширования (md5 и shasum), а не по одной для каждого алгоритма. Но мы все равно можем выполнить все необходимые проверки.

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

Выполните команду md5, передав ей путь к файлу, который вы хотите проверить:

md5 mini.iso

Вы увидите такой результат:

MD5 (mini.iso) = 8388f7232b400bdc80279668847f90da

Как видите, вывод на macOS не совсем такой же, как в Linux, но он по-прежнему показывает имя файла и 32 символа хеша. Сравните символы с оригинальной контрольной суммой MD5 и убедитесь, что они совпадают.

Теперь давайте посмотрим на проверку контрольных сумм с помощью SHA. У macOS есть одна утилита, используемая для выполнения любой проверки SHA, она называется shasum. При ее запуске вы указываете тип проверки SHA в качестве аргумента.

shasum -a 1 mini.iso
cce936c1f9d1448c7d8f74b76b66f42eb4f93d4a  mini.iso

Сравните это значение с хешем SHA1 исходного файла. Если они не совпадают, попробуйте заново загрузить файл и снова проверить его хеш.

Если вам нужно выполнить проверку SHA 256, команда будет выглядеть так:

shasum -a 256 mini.iso

Если вы не укажете тип проверки, по умолчанию будет использоваться SHA1.

Проверка файлов в Windows

Windows 7 и более поздние версии включают приложение certutil, которое может обрабатывать все операции хэширования. Результат очень сильно отличается от Linux и macOS, но контрольная сумма будет действительной. Оба из приведенных ниже примеров используют PowerShell.

Команда использует такой формат:

certutil -hashfile path/to/file ALGORITHM

Команда «certutil» не учитывает регистр, поэтому «CertUtil», «certUtil» и «certutil» сработают. Однако к регистру чувствителен сам алгоритм, что означает, что «md5» не будет работать, и вам нужно будет ввести только «MD5».

Чтобы проверить хеш MD5 файла mini.iso, выполните следующую команду:

certutil -hashfile mini.iso MD5
MD5 hash of file mini.iso:
8388f7232b400bdc80279668847f90da
CertUtil: -hashfile command completed successfully.

Для запуска алгоритма SHA выполните ту же команду, но укажите SHA1 вместо MD5.

Число после SHA указывает версию или итерацию SHA. Поэтому нужно использовать SHA (или SHA1) для хеширования SHA1, а SHA256, если вам нужен алгоритм SHA 256.

certutil -hashfile mini.iso SHA1
SHA1 hash of mini.iso:
cce936c1f9d1448c7d8f74b76b66f42eb4f93d4a
CertUtil: -hashfile command completed successfully.

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

Заключение

Проверку загруженных файлов стоит выполнять всегда.

Если командная строка немного неудобна для простой проверки файлов, вот

несколько инструментов на основе графического интерфейса, которые вы можете использовать вместо нее:

Tags: , ,