- Как проверить подлинность файла, защищенного цифровой подписью
- Как проверить цифровую подпись файла
- Простой способ проверки подписи PGP в программном обеспечении биткоина
- 1. Импортируйте открытый ключ, используемый в качестве подписи на загрузочной странице Electrum
- 2. Проверка подлинности открытого ключа
- 3. Используйте GPG для проверки загруженных файлов
- HackWare.ru
- Этичный хакинг и тестирование на проникновение, информационная безопасность
- Как пользоваться gpg: шифрование, расшифровка файлов и сообщений, подпись файлов и проверка подписи, управление ключами
- Оглавление
- Что такое GPG
- Предупреждение по использованию GPG
- Каким публичным GPG ключам можно доверять?
- Как сгенерировать пару публичный-приватный ключ в GPG
- Как посмотреть или сохранить свой публичный (открытый) ключ в GPG
- Как посмотреть или сохранить свой приватный (секретный) ключ в GPG
- Как импортировать ключи GPG
- Как просмотреть список ключей GPG
- Как удалить ключи GPG
- Для чего нужны fingerprint (отпечатки) в GPG
- Шифрование файлов и данных с GPG
- Как в GPG шифровать файлы, чтобы их можно было отправить в виде сообщения
- Как в GPG зашифровать сообщение
- Как расшифровать файлы в GPG. Как расшифровать сообщение в GPG
- GPG: Невозможно ввести пароль после неправильной попытки
- Как посмотреть получателей зашифрованного в GPG файла
- Выбор приватного ключа для расшифровки
- Как в GPG подписать файл
- Как в GPG проверить подпись файла
- Как извлечь файл из подписанного файла GPG
- Как в GPG одновременно подписать и зашифровать файл
- Редактирования ключей GPG
- Как указать идентификатор пользователя в GPG
- Файлы GPG
Как проверить подлинность файла, защищенного цифровой подписью
Скачивать программное обеспечение безопаснее всего с официальных сайтов разработчиков, но очень часто пользователи игнорируют это правило, предпочитая им сторонние сайты-каталоги. Это удобнее, но сопряжено с риском, поскольку каждый раз вы вынуждены доверять источнику, за подлинность которого не могут поручиться даже администраторы сайта. Если ресурс будет взломан, злоумышленники могут подменить часть выложенных на нём программ поддельными копиями с бэдкором или явно вредоносным кодом.
Внешне отличить поддельную программу от оригинала невозможно, гарантией подлинности не является даже контрольная сумма, поскольку и она может быть изменена злоумышленником на сайте-источнике. Удостоверением подлинности программы является цифровая подпись — криптографический метод с использованием связки закрытого и открытого ключей. Закрытый ключ используется для шифрования хэша файла, а открытый — для проверки подлинности этого самого зашифрованного хэша. Публичный ключ доступен всем, тогда как закрытый хранится только у владельца цифровой подписи.
Как проверить цифровую подпись файла
Сразу нужно сказать, что к методу защиты от подделки с помощью цифровых подписей прибегают далеко не все разработчики. Используется он в основном софтверными компаниями, специализирующимся на разработке драйверов, платежного программного обеспечения и т.п. Помимо контрольной суммы, на своем сайте использующий ЭЦП разработчик выкладывает еще и публичный ключ, необходимый для расшифровки цифровой подписи.
Предположим, вы скачали кошелек Bitcoin Core и хотите проверить его подлинность. На официальном сайте Bitcoin Core вам нужно скачать еще два файла — SHA256SUMS.asc по ссылке «Сверить контрольные суммы релизов» и ключ для подписи релизов laanwj-releases.asc соответствующей версии.
Также вам понадобится программа Gpg4win, предназначенная для шифрования файлов и электронных сообщений. Загрузить ее вы можете с официального сайта www.gpg4win.org/get-gpg4win.html.
Первый шаг заключается в сверении хэша исполняемого файла кошелка с контрольными суммами в файле SHA256SUMS.asc . Кликните ПКМ по проверяемому файлу и выберите в меню Другие параметры Gpg4win -> Создать контрольные суммы.
В результате вы получите файл sha256sum.txt с хэшем проверяемого приложения.
Откройте полученный текстовый файл и сравните хэш с контрольной суммой в файле SHA256SUMS.asc , скачанном с официального сайта приложения.
Если хэши совпадают, идем дальше.
Теперь проверим цифровую подпись. Она содержится в этом же SHA256SUMS.asc и начинается с BEGIN PGP SIGNATURE, смотрите этот скриншот.
Кликните правой кнопкой мыши по файлу SHA256SUMS.asc и выберите в меню «Расшифровать и проверить».
При этом вы получите сообщение, что подпись не может быть удостоверена. Нажмите либо «Искать», чтобы выполнить поиск публичного ключа на серверах, либо «Импорт», чтобы указать скачанный ключ laanwj-releases.asc .
В результате в окошке модуля Kleopatra появится имя предполагаемого владельца, выделите его и нажмите «Импорт».
Предложение заверить сертификат можно отклонить, нажав «Нет».
Готово, нажмите в окне программы «Журнал аудита».
И удостоверьтесь, что в журнале есть запись «Действительная подпись пользователя».
Если хотя бы один символ в сигнатуре окажется замененным, вы получите сообщение «Неверная подпись».
Здесь, наверное, у многих думающих пользователей возникнет вопрос, а что если взломанной окажется сама Gpg4win? Увы, тогда все описанные выше шаги окажутся бесполезными. Возможны и другие сценарии, например, заражение системы разработки с внедрением кода в ПО до подписания или кража сертификата, однако это вовсе не отменяет ценности описанного метода проверок подлинности, в любом случае он на порядок более эффективен, чем простое сверение хэша.
Простой способ проверки подписи PGP в программном обеспечении биткоина
Если вы новичок в проектах с открытым кодом (биткоин — один из них), то вы, вероятно, не слышали о GPG (PGP — это оригинальное проприетарное программное обеспечение, GPG — это реализация PGP с открытым кодом). GPG — это ПО, используемое для создания цифровых подписей openPGP, которые разработчики биткоина используют при публикации программного обеспечения. GPG соответствует духу биткоина, поскольку не требуют посредничества третьих сторон. Однако Windows и macOS не поддерживают проверку подписей PGP; вы должны загрузить программное обеспечение GPG и выполнить проверку самостоятельно.
Ниже приведено руководство по проверке подписей PGP на примере популярного биткоин-кошелька Electrum. Руководство показывает, как убедиться в том, что загруженный вами файл был действительно опубликован разработчиком Electrum Томасом Вётлином. Для этого требуется:
- Подлинный отпечаток ключа PGP, который мы можем увидеть на презентации разработчика биткоина и участника Web of Trust Грегори Максвелла;
- Веб-сайт для анализа взаимосвязанных подписей PGP (https://pgp.cs.uu.nl);
- Программное обеспечение GPG, которое проверяет корректность подписей.
Процесс состоит из трёх этапов:
- Импорта открытого ключа, который используется в качестве подписи на загрузочной странице Electrum;
- Проверки подлинности открытого ключа;
- Проверки загруженного файла с использованием GPG.
1. Импортируйте открытый ключ, используемый в качестве подписи на загрузочной странице Electrum
Нужно импортировать ключ PGP на загрузочной странице electrum.org в GnuPG (GPGTools для macOS; пользователи Windows используют gpg4win). Получить информацию об этом ключе можно запустив в командной строке gpg —fingerprint 0x7F9470E6 (для Windows) или терминале (для macOS). В результате мы увидим отпечаток ключа — 6694 D8DE 7BE8 EE56 31BE D950 2BD5 824B 7F94 70E6, шестнадцатеричное число из 40 символов.
Теперь нужно определить отношение этого ключа к ключу доверенного человека. В данном случае мы будем определять это отношение к ключу Грегори Максвелла.
2. Проверка подлинности открытого ключа
Мы знаем ключ Грегори Максвелла — DE47 BC9E 6D2D A6B0 2DC6 10B1 AC85 9362 B041 3BFA, потому что он был включен в видеопрезентацию, которая, как мы предполагаем, не подделана. Я доверяю ему потому, что его ключ относится только к ключам доверенных людей (см. Web of Trust).
Мы вводим оба отпечатка пальца на веб-сайте PGP pathfinder & key statistics, чтобы узнать, являются ли они участниками Web of Trust. В результате мы должны получить этот список.
Мы видим, что между двумя ключами PGP существует как минимум восемь путей доверия. Путь доверия — это цепочка подписей, где A подтверждает, что личность B является доверенной, B подтверждает, что C является доверенной, C подтверждает D и так далее. Согласно этим результатам, существует 8 таких путей между ключом PGP Грегори Максвелла и ключом Томаса Вётлин, который в свою очередь связан с сайтом electrum.org. Поэтому я делаю вывод, что ключ PGP, загруженный с веб-сайта https://www.electrum.org/, контролируется настоящим Томасом Вётлином.
Важное примечание: в идеале вы должны вручную импортировать ключи в ПО GPG. Если вы укажете своему ПО доверять ключу Максвелла, тогда ваше программное обеспечение предоставит ту же информацию, что была указана выше. Веб-сайт https://pgp.cs.uu.nl просто выполняет эту работу для вас. Если вы хотите хранить много биткоинов на кошельке, вам не следует использовать только https://pgp.cs.uu.nl.
Таким образом, мы проверили подлинность ключа PGP Томаса Вётлина.
3. Используйте GPG для проверки загруженных файлов
Теперь, когда мы определили, что ключ PGP с отпечатком 6694 D8DE 7BE8 EE56 31BE D950 2BD5 824B 7F94 70E6 является ключом Томаса Вётлина, мы можем проверить, что файлы, доступные для загрузки по адресу https://electrum.org/#download, были подписаны Томасом.
Загрузите инсталлятор и связанный файл подписи .asc в ту же папку. Для Windows выберите файл electrum-3.3.4-setup.exe и electrum-3.3.4-setup.exe.asc. Для macOS выберите electrum-3.3.4.dmg и electrum-3.3.4.dmg.asc.
Используйте GPG для проверки файла .asc. Для этого в gpg4win (для пользователей Windows) нужно щелкнуть правой кнопкой мыши на файле .asc и выбрать дополнительные параметры GpgEX > Verify. В GPGTools (пользователи macOS) нужно щелкнуть правой кнопкой мыши файл .asc и выбрать Services > OpenPGP: Verify Signature of File.
В Windows программа Kleopatra должна открыть диалоговое окно, в котором говорится:
Signature created on 2019-03-06 23:36:08 With certificate: 6694 D8DE 7BE8 EE56 31BE D950 2BD5 824B 7F94 70E6 The used key is not certified by you or any trusted person.
Kleopatra обнаружила, что файл был подписан ключом PGP с отпечатком 6694 D8DE 7BE8 EE56 31BE D950 2BD5 824B 7F94 70E6, тем же отпечатком, который, как мы знаем, принадлежит настоящему Томасу Вётлину. Такой отпечаток чрезвычайно сложно подделать.
В macOS должно появиться окно, в котором сказано:
electrum-3.3.4.dmg Signed by: Thomas Voegtlin (https://electrum.org) (7F9470E6) — undefined trust
Примечание: если у вас есть проблемы с проверкой подписи, потому что ваше ПО GPG говорит, что подпись была сгенерирована с использованием отпечатка, который отличается от того, который вы ожидали увидеть, тогда возможно, что для подписи использовался подключ. Ключ PGP может иметь «подключ», предназначенный для подписи файлов вместо первичного ключа. Ищите отпечатки подраздела в деталях ключа, который вы импортировали (в Kleopatra (Windows) или GPG Keychain (macOS)). Отпечаток первичного ключа и подключа представляют собой шестнадцатеричные числа из 40 символов.
Мы убедились, что файлы, загруженные с https://electrum.org, подписаны Томасом Вётлином, разработчиком Electrum, исходя из следующих предположений:
- Отпечаток ключа Грегори Максвелла в этом видео правильный.
- Веб-сайт https://pgp.cs.uu.nl предоставил правильную информацию о путях доверия.
- Программа GPG корректно проверила подпись.
В идеальном мире мы бы присутствовали на «вечеринке по верификации ключей» с разработчиками биткоина (Грегори Максвеллом, Люка Дашжраом, Томасом Вётлином, Владимиром ван дер Лааном, Питером Тоддом и так далее). Тогда мы бы были полностью уверенны в подлинности загружаемого программного обеспечения биткоина. Но на практике это пока самый простой метод проверки, поскольку он требует лишь предположения о том, что отпечаток ключа PGP в видео Грегори Максвелла является реальным ключом реального Грегори Максвелла.
Этот метод также применяется для проверки подписей в других кошельках, в том числе Bitcoin Core.
HackWare.ru
Этичный хакинг и тестирование на проникновение, информационная безопасность
Как пользоваться gpg: шифрование, расшифровка файлов и сообщений, подпись файлов и проверка подписи, управление ключами
Оглавление
Что такое GPG
gpg — это инструмент шифрования и электронного подписывания. В его работе используется ассиметричное шифрование, основанное на двух ключах: приватный и публичный. Приватный ключ иногда называют секретным. А публичный ключ называют открытым.
Суть работы в общих чертах следующая: любой желающий может сгенерировать себе пару ключей. Публичный ключ (как это можно понять из названия), не является секретным — этот ключ может находиться в открытом доступе. С помощью этого ключа можно шифровать сообщения и файлы. Причём сообщения и файлы шифруются только «в одну сторону» — расшифровать их, даже используя этот самый публичный ключ, уже невозможно. Их расшифровка возможна только при использовании соответствующего приватного ключа.
Таким образом, если вы хотите отправить секретное сообщение или зашифрованный файл определённому лицу, то вы берёте публичный ключ этого лица (который может быть в свободном доступе), зашифровываете информацию и отправляете ему эту зашифрованную информацию — кроме владельца соответствующего приватного ключа её уже никто не сможет узнать.
Если обменяться публичными ключами, то вы с этим лицом можете вести зашифрованную беседу:
- вы шифруете свои сообщения публичным ключом вашего собеседника и отправляете ему
- он с помощью своего приватного ключа читает эти сообщения
- ваш собеседник шифрует свои сообщения вашим публичным ключом и отправляет вам
- вы с помощью своего приватного ключа читаете свои сообщения
- и так далее
Приватный ключ умеет делать ещё один интересный фокус: он умеет подписывать файлы. Причём, как можно уже догадаться, проверять подпись можно соответствующим публичным ключом.
Итак, gpg — это OpenPGP часть GNU Privacy Guard (GnuPG). Этот инструмент обеспечивает цифровое шифрование и службы подписи используя стандарт OpenPGP. gpg имеет функции полного управления ключами, а также все приблуды, которые вы можете ожидать от реализации OpenPGP.
Предупреждение по использованию GPG
Используйте хороший пароль для вашего пользовательского аккаунта и хорошую парольную фразу для защиты вашего секретного ключа. Эта парольная фраза является самой слабой частью всей системы. Касательно GPG, вам нужно защитить от постороннего доступа папку «
Для использования в скриптах, у gpg есть хорошо документированная реализация API, чтобы активировать этот интерфейс используйте опции —with-colons и —status-fd. Также для определённых операций может пригодиться опция —command-fd.
Каким публичным GPG ключам можно доверять?
Создать пару публичный-приватный ключ можно у себя на компьютере для любого имени. Это примерно как SSL сертификаты: можно создать для любого сайта, но такой самоподписанный сертификат не будет вызывать доверие у браузеров. Поэтому привлекается третья сторона — корневой центр сертификации (root certification authority, CA) (там чуть сложнее, также имеются промежуточные доверенные центры авторизации (trusted certificate authority)). Собственно, эта услуга и является платной при покупке SSL сертификата для сайта — сгенерировать сертификат можно самому за секунду на любом Linux.
Аналогичная ситуация и с GPG ключами: они могут быть созданы на любое имя. Поэтому когда вы скачиваете публичный GPG ключ для проверки цифровой подписи, вы должны быть полностью уверены, что он именно от того лица, от кого вы думаете. Иначе вся процедура теряет смысл.
После самого первого обмена публичными ключами, дальнейший обмен более надёжен: другая сторона, чтобы подтвердить, что новый публичный ключ исходит от неё, подпишет этот самый новый публичный ключ своим предыдущим приватным ключом. Таким образом, получив новый публичный ключ от вашего собеседника, вы можете проверить подпись предыдущим публичным ключом, и если подпись верна, то, следовательно, можно доверять и новому ключу, который должен заменить предыдущий публичный ключ.
Как сгенерировать пару публичный-приватный ключ в GPG
Всё начинается с генерации ключей. Вы это можете сделать на своём компьютере.
Для генерирования пары ключей запустите команду:
Вам нужно будет ввести:
- Ваше полное имя
- Адрес электронной почты
Затем программа покажет выбранный вами идентификатор пользователя и спросит, всё ли правильно? Если всё правильно, вам нужно будет ввести O.
Затем программа попросит ввести пароль.
Вы можете задать вопрос: какой ещё пароль, если для зашифровки и расшифровки используется ассиметричный алгоритм с файлами ключей? Да, всё верно, вводимый пароль не будет участвовать в процессе шифрования и расшифровки, он нужен для защиты вашего ключа, поскольку он хранится у вас на компьютере в домашней папке. На тот случай, если злоумышленник получит физический доступ к вашему компьютеру, он не сможет просто воспользоваться вашим приватным ключом — ему сначала нужно будет подобрать пароль. Поэтому пароль придумайте надёжный. Кстати, если вы экспортируете приватный ключ в файл (команды для этого будут показаны ниже) чтобы, например, перенести его на другой компьютер, то при импорте этого ключа на другой компьютер нужно будет ввести пароль от этого приватного ключа.
Затем программа покажет совет:
Необходимо получить много случайных чисел. Желательно, чтобы Вы в процессе генерации выполняли какие-то другие действия (печать на клавиатуре, движения мыши, обращения к дискам); это даст генератору случайных чисел больше возможностей получить достаточное количество энтропии.
Вместо —gen-key можно использовать опцию —full-generate-key, которая также сгенерирует пару ключей, но покажет больше опций. При использовании —gen-key некоторые значений опций используются по умолчанию.
Как посмотреть или сохранить свой публичный (открытый) ключ в GPG
У меня плохо с фантазией, поэтому далее в командах в качестве имени пользователя (точнее, идентификаторая пользователя) я использую Alexey Miloserdov — замените эту строку на ваше значение.
Чтобы посмотреть публичный ключ используйте опцию —export, а также опцию -a, которая означает, что выводимые данные должны быть не в бинарном формате, а в ASCII (то есть текстовом, пригодном для копирования-вставки в сообщение мессенджера или электронной почты), в конце укажите имя пользователя:
Для сохранения публичного ключа в файл используйте перенаправление вывода:
В результате публичный ключ будет сохранён в файл public.key.
Или используйте опцию -o, после которой укажите имя файла:
Кстати, обратите внимание, что для вывода публичного ключа не запрашивается пароль.
Как посмотреть или сохранить свой приватный (секретный) ключ в GPG
Для просмотра и экспорта приватного ключа используется опция —export-secret-key:
Для сохранения в файл:
Или с опцией -o:
Как импортировать ключи GPG
Для импорта публичного ключа выполните:
Эта команда добавит публичный ключ, который находится в файле «public.key«.
Для добавления приватного ключа из файла private.key выполните команду:
Как просмотреть список ключей GPG
Для просмотра всех публичных ключей в вашей системе выполните:
Для просмотра всех приватных ключей в вашей системе выполните:
Как удалить ключи GPG
Для удаления публичного ключа выполните:
Помните: если на компьютере имеется приватный ключ, ассоциированный с этим публичным ключом, то вы получите ошибку! Вы должны удалить приватный ключ этой пары, а затем можно удалять публичный ключ.
Для удаления приватного ключа:
Для чего нужны fingerprint (отпечатки) в GPG
Fingerprint (отпечатки) ключей в gpg имеют примерно следующий вид:
Отпечаток может выполнять функцию идентификатора ключа — то есть вместо указания имени пользователя (в моём примере это Alexey Miloserdov) можно использовать отпечаток.
Например для удаления секретного ключа, используя в качестве идентификатора отпечаток:
Вторая функция применения отпечатка — это верификация публичного ключа. В качестве примера приводится следующая история: Алиса передала Бобу клочок бумаги, на котором записан отпечаток (ну или позвонила по телефону и продиктовала отпечаток). Затем Алиса переслала Бобу свой публичный ключ. Но так как ключ пришёл из Интернета — то непонятно, от кого он именно? Не был ли этот ключ подменён по пути? После импорта ключа, можно просмотреть его отпечаток. Поскольку у Боба есть отпечаток, который он получил из доверенного источника (Алиса продиктовала его своим голосом или лично передала записку с отпечатком), то Боб теперь может сравнить эти два отпечатка — если отпечатки идентичные, значит публичный ключ действительно отправлен Алисой и значит ему можно доверять.
Посмотреть опечаток для ключа определённого пользователя можно командой:
Это отпечаток на компьютере, где была создана пара ключей:
А это отпечаток на другом компьютере, где был импортирован публичный ключ:
Как можно убедиться, они идентичные. Следовательно, публичный ключ действительно получен от того источника, о котором я думал.
Шифрование файлов и данных с GPG
Про шифрование в gpg нужно знать, что оно может быть:
- ассиметричным (шифруется публичным ключом, расшифровывается приватным)
- симметричным (шифруется и расшифровывается приватным ключом, шифруется и расшифровывается одной и той же парольной фразой)
Второе, что нужно знать: шифрование можно совмещать с подписыванием файла. Подписывание файла и проверку подписи мы рассмотрим далее. Также далее мы рассмотрим одновременное шифрование и подпись файла.
Третье: зашифровать можно одним или более публичными ключами.
Для шифрования файла используя симметричный метод с паролем используйте опцию -c (либо её длинный аналог —symmetric):
Следующая команда для шифрования файла test.php паролем в gpg:
В результате шифрования будет создан файл с расширением .gpg (в данном случае это будет файл test.php.gpg).
Для того, чтобы зашифровать файл симметричным шифрованием с возможностью расшифровки приватным ключом (в этом случае его можно будет расшифровать приватным ключом, либо паролем) нужно использовать сразу несколько опций:
- -e — означает шифрование данных
- -c — означает симметричное шифрование
- -r ‘id’ — означает зашифровать данные для пользователя с определённым id
Пример команды симметричного шифрования файла test.php для пользователя Alexey Miloserdov с возможностью его расшифровки приватным ключом ЛИБО для расшифровки паролем:
Точнее говоря, комбинирование двух опций -e и -c шифрует ключ сессии публичным ключом и симметричным шифром, поэтому для расшифровки может использоваться И приватный ключ, И пароль (на выбор). Если на другом компьютере, где вы расшифровываете файл, имеется ваш приватный ключ, то при расшифровке будет запрошен пароль приватного ключа. Если приватный ключ отсутствует, то будет запрошен пароль, который использовался при шифровании файла.
Для шифрования публичным ключом (-e), чтобы файл (test.php) мог расшифровать только владелец соответствующего парного приватного ключа (-r ‘Alexey Miloserdov’):
Вместо опции -r ‘Имя Адресата’ можно использовать опцию -R ‘Имя Адресата‘ или её длинный аналог —hidden-recipient ‘Имя Адресата’. Она также шифрует файл для указанного адресата, но имя этого адресата шифруется. Кстати, следует упомянуть, что даже в зашифрованном файле имя адресата может посмотреть кто угодно — о том, как это сделать, будет сказано ниже.
Пример шифрования файла test.php публичным ключом пользователя Alexey Miloserdov, но с зашифрованным именем адресата.
Обратите внимание, что во всех случаях шифрования оригинальный файл остаётся. Вам самим нужно решать, что с ним делать, например, удалить его.
Чтобы каждый раз не вводить имя получателя, можно установить значение по умолчанию опцией —default-recipient. Также с ней в комплекте идут опции —default-recipient-self и —no-default-recipient.
Как в GPG шифровать файлы, чтобы их можно было отправить в виде сообщения
По умолчанию файлы сохраняются в бинарный формат OpenPGP. Кстати, в этом формате файл может занимать значительно меньше места (в разы!) чем исходный файл до шифрования. Если вы откроете зашифрованный файл, то убедитесь, что это бинарные данные, которые невозможно передать копированием-вставкой без потери их функциональности.
Но иногда может возникнуть необходимость переслать зашифрованный файл или сообщение по почте или в мессенджере в виде обычного текста. Это возможно с помощью опции -a, которая создаёт зашифрованный файл в формате ASCII.
В результате будет создан файл с расширением .asc (в данном случае это файл test.php.asc).
Как в GPG зашифровать сообщение
Для зашифровки сообщения используйте следующую конструкцию:
Обратите внимание, что я добавил опцию -a — для того, чтобы зашифрованное сообщение можно было скопировать и вставить в мессенджер или в email (или распечатать на принтере). Без этой опции будут выведены бинарные данные.
Зашифрованное сообщение будет выведено в стандартный вывод, то есть в терминал. Если вы хотите сохранить зашифрованное сообщение в файл, то используйте конструкцию:
Как расшифровать файлы в GPG. Как расшифровать сообщение в GPG
Для расшифровки используется опция -d:
Причём данные будут выведены прямо в стандартный вывод! То есть в терминал. Чтобы сохранить данные в файл используйте опцию -o, после которой укажите имя нового расшифрованного файла:
Либо используйте конструкцию вида:
Вроде это тоже нормально работает (для текстовых файлов уж точно).
Как расшифровать сообщение в GPG
Также gpg может расшифровывать данные из стандартного ввода. В этом можно убедиться подобной конструкцией:
Более практический пример:
GPG: Невозможно ввести пароль после неправильной попытки
При симметричном шифровании пароли кэшируются, чтобы не нужно было вводить много раз один и тот же пароль. Не знаю, как это соотносится с безопасностью, но можно сильно попасть впросак, если ввести неверный пароль — при последующих попытках открыть этот же файл, система вместо того, чтобы спрашивать у вас новый вариант, будет использовать кэшированную версию, то есть просто будет выдавать ошибку:
Чтобы побороть эту ситуацию, нужно явно указать не использовать кэш, для этого имеется опция —no-symkey-cache, пример использования:
Как посмотреть получателей зашифрованного в GPG файла
Если вы не хотите расшифровывать файл (а может быть просто не можете из-за отсутствия приватного ключа), но хотите посмотреть, кому он предназначен (это можно сделать даже для зашифрованных файлов, если специально не зашифрованы получатели как это показано выше), то для этого имеется опция —list-only.
Вместе с этой опцией нужно использовать опцию -d, а также указать проверяемый файл, пример:
Может быть выведено:
Или без локализации:
Это сообщение означает, что выполнено ассиметричное шифрование для пользователя Alexey Miloserdov
При симметричном шифровании сообщение будет таким:
Или без локализации:
Причём вплоть до 2019 года, почти до самых последних версий gpg, у опции —list-only есть интересный баг: если на компьютере, где выполняется проверка, имеется приватный ключ пользователя, кому предназначен данный файл, то не выводиться ничего. Это может запутать, поскольку также ничего не выводиться в случае, если получатель зашифрован. Я нашёл упоминание об этой ошибке в 2013 году (смотрите список источников), и она до сих присутствует в 2019 в самой последней версии Tails. Чтобы обойти этот баг, используйте опцию -v, получается примерно следующая команда:
Будет выведено что-то вроде:
И уже по идентификатору публичного ключа можно найти пользователя.
В самых последних версиях gpg (например в Arch Linux и BlackArch) эта ошибка уже исправлена. То есть —list-only работает именно так, как это интуитивно ожидается и костыля в виде опции -v больше не требуется.
Выбор приватного ключа для расшифровки
Как мы уже выяснили, даже зашифрованная информация в GPG содержит имя получателя (если оно специально не удалено). Поэтому процедура расшифровки файлов понятна: GPG смотрит получателя и использует его приватный ключ для извлечения данных.
А как это происходит в случае, если получатель зашифрован? В этом случае GPG просто перебирает все имеющиеся в системе приватные ключи и смотрит, какой из них подойдёт (такой своеобразный брут-форсинг).
Вы можете помочь программе используя опцию —try-secret-key ИМЯ, вместо ИМЕНИ нужно указать идентификатор пользователя с закрытым ключом, для которого зашифрован файл.
Думаю, вы уже понимаете, что зашифрованная информация содержит как минимум такие части как: 1) идентификатор получателя, 2) «полезная нагрузка» — сами зашифрованные данные. Идентификатор получателя может быть поддельным — то есть для шифрования использовались публичные ключи одного лица, а в качестве получателя указано другое лицо. Это приведёт к тому, что попытка расшифровки в GPG завершиться неудачей.
Для расшифровки таких файлов с поддельным ключевым ID, используется опция —try-all-secrets. Как можно понять из названия самой опции, она не будет смотреть на ключевой идентификатор в сообщении, а будет пробовать все секретные ключи, пока не найдёт правильный для расшифровки. То есть поведение будет в точности таким же, как если бы получатель (или получатели) не были указаны вовсе. То есть как если бы данные шифровались с использованием опций —throw-keyids или —hidden-recipient.
Как в GPG подписать файл
Как было сказано выше, для подписи файла используется приватный ключ. Поскольку приватный (секретный) ключ хранится (очевидно же) в секрете владельцем, то исходя из предположения, что никто кроме владельца не имеет доступ к приватному ключу, мы можем быть уверены, что файл, который подписан этим приватным ключом, исходит от этого определённого лица. Если файл как либо после подписи был изменён, то эта подпись перестаёт быть верной (валидной) для данного файла. Поэтому, проверка подписи позволяет гарантировать:
- файл исходит от того лица, которое её подписало;
- файл не был как либо модифицирован с момента подписи.
Для проверки подписи определённого лица у вас должен быть публичный ключ этого лица.
Для подписи файла используется опция -s или её более длинный вариант —sign. Если у вас на компьютере только один приватный ключ, то он будет выбран автоматически.
Если у вас на компьютере несколько приватных ключей, то нужно использовать также опцию -u ИМЯ или её более длинный вариант —local-user ИМЯ. Эта опция перезаписывает значение —default-key.
Кстати про —default-key. Она устанавливает ключ, который будет использоваться по умолчанию, чтобы его не нужно было вводить каждый раз.
Итак, я хочу подписать файл test.php, приватным ключом пользователя Alexey Miloserdov, тогда моя команда следующая:
Будет создан файл с расширением .gpg, в моём случае это файл test.php.gpg. Этот файл включает И исходный файл, И его цифровую подпись. Новый файл в бинарном формате — то есть даже если ранее это было сообщение или текстовый файл, то он становится нечитаемым.
С помощью опции —clear-sign (другое её написание —clearsign) можно создать файл в виде обычного текста.
Будет создан файл test.php.asc, который будет содержать исходный текст после ——BEGIN PGP SIGNED MESSAGE——, а также блок с подписью:
Текстовое содержимое можно извлечь без сторонних инструментов, а для проверки подписи всё равно нужна программа PGP.
В реальной жизни публичные программы и другие файлы намного чаще распространяются в виде пары: исходный файл программы + отдельно подпись. Можно догадаться почему: большинству пользователей до фонаря эта электронная подпись и они не смогли бы извлечь файлы из .gpg формата. В принципе, их позиция понятна: какой смысл проверять подпись, если мы всё равно лично не знаем тех, кто именно подписал файл, да и тех, кто удостоверяет подлинность публичного ключа мы тоже не знаем. Разве что, можно быть уверенным, что файл действительно подписан автором программы, а не хакером, который взломал сервер, где хранятся файлы для скачивания, и что хакер не подменил файл в процессе его «путешествия» к нам на компьютер.
Так вот, чтобы делать такую пару (точнее говоря, нам нужно сделать только отдельный файл подписи — с исходным файлом вообще ничего не происходит) в PGP есть опция -b (или более длинное написание —detach-sign), которая применяется следующим образом:
Будет создан дополнительный файл .sig (в моём случае это test.php.sig). В этом файле нет ничего, кроме цифровой подписи. Поэтому вам нужно предоставлять и оригинальный файл, и файл .sig.
Как в GPG проверить подпись файла
Для проверки подписи используется опция —verify.
Как мы только что узнали, цифровая подпись может быть интегрирована в файл, а может содержаться в отдельном файле. От этого зависит запуск команды gpg, если цифровая подпись интегрирована в файл, то достаточно указать опцию —verify, а затем проверяемый файл:
Если цифровая подпись отделена от файла, то после опции —verify нужно указать два аргумента: вначале идёт файл с подписью, а затем подписанные данные:
Кстати, для проверки подписи есть специальная программа gpgv, которая заменяет собой конструкцию gpg —verify, то есть предыдущие команды можно записать так:
Пример вывода при проверке подписи (проверка выполнялась на компьютере, где была создана соответствующая пара ключей, поэтому к подписи полное доверие):
Без локализации (на этом компьютере публичный ключ был импортирован, поэтому, с одной стороны, подтверждено, что подпись хорошая и принадлежит Alexey Miloserdov
, но, с другой стороны, выведено предупреждение, что сам открытый ключ, которым проверялась подпись, не сертифицирован доверенной подписью — то есть программа хочет нам сказать, что таких ключей от имени Alexey Miloserdov
может наделать кто угодно в любом количестве):
Как извлечь файл из подписанного файла GPG
После проверки подписи может возникнуть интересный вопрос — а как, собственно, использовать этот файл в .gpg формате? Чтобы получить подписанные данные нужно использовать опцию -d, которую мы уже рассматривали — она используется для расшифровки данных. Но в дополнении к данной опции нужно ещё использовать опцию -o, после которой нужно указать имя файла, куда будут извлечены подписанные данные — обычный редирект вывода, как это было рассмотрено выше, может не подойти, поскольку для подписанного файла опцией -d не только извлекаются исходные данные, но и происходит проверка подписи и результаты проверки тоже выводятся на экран, то есть если вы будете использовать редирект вывода, то в создаваемый файл попадут и подписанные данные, и информация о проверке подписи.
Как в GPG одновременно подписать и зашифровать файл
Для этого достаточно совмещать уже известные нам опции.
Чтобы зашифровать файл публичным ключом другого лица, и подписать его своим приватным ключом, нужно выполнить команду вида:
Чтобы использовалось симметричное шифрование, то к предыдущей конструкции достаточно добавить соответствующую опцию -c:
Редактирования ключей GPG
Для редактирования ключа определённого пользователя выполните команду (замените ‘Alexey Miloserdov’ на желаемый идентификатор пользователя):
Вы попадёте в интерактивный интерфейс командной строки, там будут работать следующие команды:
Чтобы окончательно отозвать свой собственный ключ, выдав сертификат о компрометации ключей (вместо USERID введите идентификатор пользователя):
Ключ —gen-revoke создаёт сертификат отзыва (кстати, сертификат отзыва генерируется с самого начала, при создании пары ключей), который при распространении среди людей и серверов ключей говорит им, что ваш ключ больше не является валидным.
Для отключения или включения публичного ключа в своём собственном public key ring:
Для смены пароля приватного ключа (замените ‘Alexey Miloserdov’ на ваш идентификатор пользователя):
Изменить уровень доверия владельцу:
Будет выведено сообщение:
Укажите, насколько Вы доверяете данному пользователю в вопросах проверки достоверности ключей других пользователей (проверяет паспорт, сверяет отпечатки ключей из разных источников и т.п.)
И вам нужно будет сделать выбор, введя одну из следующих цифр:
Как указать идентификатор пользователя в GPG
Идентификатор пользователя можно указать различными способами:
- полное имя и фамилия
- полный адрес электронной почты
- отпечаток ключа
- полный идентификатор пользователя (имя и фамилия, а также адрес электронной почты, например Heinrich Heine )
- частичное указание имени пользователя или адреса электронной почты
- другие способы (в целом их довольно много, причём, поддерживается множество операторов сравнения и тестирования условий)
Файлы GPG
Имеется несколько конфигурационных файлов для контроля определённых аспектов операций gpg. Если не сказано другое, ожидается что они размещены в домашней директории текущего пользователя.
gpg.conf
Стандартный конфигурационный файл, который gpg считывает при запуске. Он может содержать любое количество валидных длинных опций; можно не вводить начальные две чёрточки, нельзя использовать короткую запись опции. В командной строке можно изменить значение по умолчанию. Следует делать резервную копию этого файла.
Это домашняя папка по умолчанию, которая используется если не установлено другое в переменной окружения GNUPGHOME или опцией —homedir.
Публичный киринг (public keyring). Следует иметь резервную копию этого файла
Файл блокировки для публичного киринга.
Публичный киринг использует различные форматы. Этот файл поделён с gpgsm. Следует иметь резервную копию этого файла. Фактически, это база данных, где хранятся все ключи. Структуру этого файла можно посмотреть командой:
Файл блокировки для ‘pubring.kbx’.
Секретный киринг используемой GnuPG версией до 2.1. Он не используется GnuPG 2.1 и более поздними.
Файл блокировки для секретного киринга.
Файл, показывающий, что сделан переход на GnuPG 2.1.
Доверенная база данных. Нет нужды делать резервную копию этого файла; лучше делать резервную копию значений ownertrust, смотрите опцию —export-ownertrust.
Файл блокировки для доверенной базы данных.
Файл, используемый для сохранения состояния внутреннего пула случайных чисел.
Директория, где хранятся предварительно сгенерированные сертификаты отзыва. Имя файла соответствует отпечатку OpenPGP ключа, для которого этот сертификат. У каждого, у кого есть доступ к этим файлам, может отозвать ваши ключи. Поэтому эти файлы нужно хранить в секрете и иметь их резервные копии.