Когда вы загружаете файл (например, установщик, образ ISO или сжатый архив) из Интернета, файл может быть поврежден при различных условиях, например, из-за ошибок передачи по проводам, прерванной загрузки, неисправности аппаратные средства хранения, ошибки файловой системы и т. д.
За исключением таких случаев отказа, файл также может быть преднамеренно подделан решительными злоумышленниками во время или перед загрузкой.
Например, злоумышленник с скомпрометированным центром сертификации может провести атаку «человек посередине» (MITM), обманывая вас при загрузке вредоносного файла с поддельного веб-сайта HTTPS.
Чтобы защитить себя от подобных проблем, часто рекомендуется проверять подлинность и целостность файла при его загрузке из Интернета. Особенно когда вы загружаете довольно чувствительные файлы (например, образы ОС, двоичные файлы приложений, исполняемые установщики и т. Д.), Слепое доверие загруженным файлам не является хорошей привычкой.
Одним быстрым и простым способом проверки целостности загруженного файла является использование различных инструментов контрольных сумм (например, md5sum, sha256sum, cksum) для вычисления и сравнения контрольных сумм (например, MD5, SHA или CRC).
Однако контрольные суммы уязвимы для атак коллизий, а также не могут использоваться для проверки подлинности (т. е. Владельца) файла.
Если вы хотите проверить подлинность (владельца) и целостность (содержимое) загруженного файла, вам следует полагаться на криптографические подписи.
В этом руководстве я собираюсь описать, как проверить подлинность и целостность файла с помощью GnuPG (GNU Privacy Guard).
В этом примере я собираюсь проверить файл образа диска, доступный для загрузки с https://onionshare.org.
На этом сайте издатель предлагает свой официальный открытый ключ, а также свой отпечаток для проверки ключа.
Что касается загружаемого файла, издатель также предлагает свою соответствующую подпись PGP.
Установите GnuPG и создайте пару ключей
Давайте начнем с установки GnuPG в вашей системе Linux.
В Debian, Ubuntu и других производных Debian:
$ sudo apt-get install gnupg
На Fedora, CentOS или RHEL:
После установки создайте пару ключей, которую вы будете использовать в этом руководстве.
$ gpg --gen-key

Во время генерации ключа вам будет предложено указать ваше имя и адрес электронной почты, а также пароль для защиты вашего закрытого ключа.
Вы также можете выбрать, когда истечет срок действия пары ключей (по умолчанию нет срока действия).
В зависимости от размера ключа, который вы выбираете (от 1024 до 4096 бит), процесс генерации ключа может занять пару минут или чуть более, так как он требует сбора достаточного количества случайных данных, которые поступают из ваших действий на рабочем столе (например, ввод с клавиатуры, мышь).
После завершения генерации открытый и закрытый ключи будут сохранены в каталоге ~/.gnupg.
Импортируйте открытый ключ владельца файла
Первым этапом проверки загруженного файла является импорт открытого ключа владельца файла и (необязательно) установление доверия с владельцем.
Сначала загрузите открытый ключ владельца файла:
$ wget https://onionshare.org/signing-key.asc
Затем выполните импорт открытого ключа с помощью команды gpg:
$ gpg --import signing-key.asc

Как только открытый ключ владельца будет импортирован, он выведет идентификатор ключа (например, «EBA34B1C»), как показано выше.
Запишите этот идентификатор ключа.
Теперь проверьте отпечаток импортированного открытого ключа, выполнив:
$ gpg --fingerprint EBA34B1C

Вы увидите строку отпечатка открытого ключа.
Сравните эту строку с отпечатком, отображаемым на веб-сайте, чтобы посмотреть, совпадают они или нет.
В общем, проверка того, что владелец открытого ключа является тем, кем он или она утверждает, должна быть более строгим процессом, чем простое сравнение отпечатков, поскольку веб-сайт мог быть подделан так, чтобы соответствовать отпечатку.
Вы доверяете чьему-либо открытому ключу только тогда, когда ключ был полностью проверен на принадлежность этому человеку (например, вы встретились с этим человеком, поговорили по телефону, чтобы подтвердить его / ее личность и т. д.).
После того, как вы проверили действительность открытого ключа другими способами и решили доверять открытому ключу, вы можете явно назначить свое доверие ключу следующим образом.
Обратите внимание, что этот шаг не является обязательным.
$ gpg --edit-key EBA34B1C



Опять же, этот способ явного присвоения доверия открытому ключу не требуется, и зачастую достаточно неявного доверия путем простого импорта ключа.
Смысл назначения «полного» доверия ключу состоит в том, что если другой ключ X подписан этим полностью доверенным ключом, ключ X также будет считаться действительным.
В целом, проверка ключей основана на сложном механизме, известном как «сеть доверия».
Возвращаясь к уроку, теперь давайте проверим список импортированных ключей.
$ gpg --list-keys

Проверьте подлинность / целостность файла
После того как вы установили доверительные отношения с владельцем файла, используя его / ее открытый ключ, мы теперь готовы проверить подлинность и целостность файла, который вы загрузили у владельца.
В нашем примере владелец файла публикует файл и соответствующую подпись PGP (* .asc) отдельно.
Роль подписи заключается в удостоверении и внесении отметки времени в файл.
Типичная подпись (* .asc) выглядит следующим образом.
-----BEGIN PGP SIGNATURE----- iQIcBAABCgAGBQJUJGhsAAoJEP1yCtnro0sc1jUP/ixNY/lKdrcMIAUoqlWKNE8f sj4SFiwREMew76w66GASDF03fa5zPX6EsS2kucgx8ZsfEiSmN5T0y2P/aSaXwZqF kywZVEzirKtca5AJ4DBzu6qrt9GgSw6JBJVv1oBJCMNyO+eAj341paR3MudvnyQz H/N5tc4Qcilzy6M184opGIzy4ipEmMXfLHsd7WJpAyn+tO/z3uhh9NkNuygZpaFr olpSWPE8revdDJyfMfSmb3ZrFmhLn7FCEltOi+a7SluvrMclizfnbec9rgLJtjo0 CPDZY7tsWmmL0DA3VvpMVqGvkg/Dyhpn2IIDrNaLAlvGQ5aovf+4tjad5IHvyaWx 4Gds93G6Hqvv5RwGx7OR3hgt2o0Y+qFsVDxVnPxerGhXeJXHzSDwLQMpdj9IoSU Ae/53XXnxqSN6POZcwHiHvbsv0pdlg0Ea0dDAAN0ZeINNyZf1R0tLjWkcgpvGCtv qkJuYFF9W9cWHraPY2ov5Hs/JZzPcG0eVpnDdzfOOH1gDKADq9A5D2X5QJCulsh9 WwU3X+E43OqIsoRzBucItD9HhZbEH7t8Q0xAqnAkgU3hriZp3dN4cnMfhM6I9hli EmpSpLKCceMexu2o9QgzGXVm+AGZJe4QkuwAhRIccp5JDMVny61UlKTasjy6co8h 5GBhhYybPEFM+G1BODMd =c9wo -----END PGP SIGNATURE-----
Давайте загрузим файл и его подпись:
$ wget https://onionshare.org/files/0.6/OnionShare.dmg $ wget https://onionshare.org/files/0.6/OnionShare.dmg.asc
Теперь проверьте подпись PGP загруженного файла.
$ gpg --verify OnionShare.dmg.asc OnionShare.dmg

Если выходные данные команды содержат «”Good signature from <file owner>», загруженный файл .dmg был успешно аутентифицирован и проверен.
Если загруженный файл был каким-либо образом подделан после того, как подпись была сгенерирована, проверка не удалась.
На этом этапе вы можете быть уверены и доверять загруженному файлу.