Как проверить загруженные файлы

Автор выбрал Electronic Frontier Foundation, чтобы получить пожертвование в размере 300 долларов США в рамках Write для ДОНОЦИЙ program.

Вступление

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

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

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

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

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

Предпосылки

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

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

Для проверки файлов мы будем использовать установочный ISO-файл Ubuntu. Загрузите Ubuntu Minimal CD ISO для 64-битных ПК (amd64, x86_64). Во время загрузки запишите суммы MD5 и SHA1 рядом со ссылкой для скачивания. Вы будете использовать эти контрольные суммы на протяжении всего урока.

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

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

Процесс генерации контрольной суммы часто называют односторонней криптографической функцией. Когда вы выполняете хэш для файла, он «суммируется» в строку случайных символов. Например, допустим, у вас есть документ, который содержит 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.

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

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

Выполнение проверки файлов в Linux

Большинство дистрибутивов Linux имеют инструменты командной строки для каждого алгоритма хеширования. Шаблон имени инструмента - «HASH-TYPE» плюс слово «sum». Таким образом, для хеширования с MD5 имя программы будет + md5sum +. Для хеширования с SHA 256 используется команда + sha256sum +. Если вы не уверены, какое именно имя указано, введите имя алгоритма хеширования, а затем дважды нажмите вкладку, и большинство дистрибутивов отобразят все команды, начинающиеся с этого имени алгоритма. Мы рассмотрим пару популярных проверок ниже.

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

md5sum mini.iso

Результаты будут выглядеть примерно так:

Output8388f7232b400bdc80279668847f90da  mini.iso

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

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

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

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

Output8388f7232b400bdc80279668847f90da  mini.iso
8388f7232b400bdc80279668847f90da

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

sha1sum mini.iso

Результаты будут выглядеть примерно так:

Outputcce936c1f9d1448c7d8f74b76b66f42eb4f93d4a  mini.iso

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

Теперь давайте посмотрим на проверку файлов в macOS.

Выполнение проверки файлов в macOS

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

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

Поскольку + md5 + является автономным алгоритмом, это его собственная команда в macOS. Выполните команду + md5 +, передав ей путь к файлу, который вы хотите проверить:

md5 mini.iso

Результаты будут выглядеть так:

OutputMD5 (mini.iso) = 8388f7232b400bdc80279668847f90da

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

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

Выполните следующую команду, указав SHA1 с помощью флага + -a +:

shasum -a 1 mini.iso

Результаты будут выглядеть так:

Outputcce936c1f9d1448c7d8f74b76b66f42eb4f93d4a  mini.iso

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

Если вам нужно выполнить проверку SHA 256, команда будет выглядеть так: + shasum -a 256 mini.iso +. Если вы не предоставите тип, по умолчанию используется SHA1.

Далее, давайте посмотрим на проверку файлов в Windows.

Выполнение проверки файлов в Windows

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

Формат команды: «+ certutil -hashfile +».

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

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

certutil -hashfile mini.iso MD5

Результаты будут выглядеть так:

OutputMD5 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

Результаты будут выглядеть так:

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

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

Заключение

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

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

Related