что такое gpg ключ на гидре
Что такое шифрование PGP и как его использовать?
Если вы не шифруете свои электронные письма или файлы, то оставляете их в открытом доступе. Любой, кто шпионит за вашим трафиком, может прочитать их. Стоит узнать, что такое шифрование PGP и как оно может улучшить вашу конфиденциальность в интернете.
Что такое PGP?
Это признанный стандарт шифрования, который обеспечивает конфиденциальность и гарантирует подлинность отправляемых или получаемых данных. PGP может использоваться для шифрования и дешифрования текста, электронных писем, файлов или целых разделов диска, а также для создания цифровых подписей.
Как работает шифрование?
Чтобы понять шифрование, представьте, что вы хотите отправить любовное письмо, но вы не хотите, чтобы кто-то его читал, кроме предполагаемого получателя. Вы пишете свое письмо, а затем создаете код (в терминах криптографии ключ) для шифрования вашего сообщения. Например, если вы выберете, что каждая буква алфавита соотносится с числом, то ваше сообщение “I love you” будет выглядеть так: «9 12-15-22-5 25-15-21».
С помощью алгоритма шифрования, ваш любовник сможет расшифровать сообщение и ответить таким же образом. Этот тип криптографии использовался в течение многих лет, но он представляет много уязвимостей.
Чтобы ваше сообщение оставалось конфиденциальным, вам также необходимо передать свой ключ получателю в частном порядке. Вы не можете отправить ключ вместе с сообщением. Если вы отправите его в отдельном конверте или через интернет, он может быть легко украден. Вы, конечно, можете передать ключ лично, но это также неудобно, особенно если вам нужно доставить сообщение кому-то на другой конец мира. Вот где PGP вступает в действие.
Шифрование PGP
PGP использует «криптографию с открытым ключом», что означает, что для шифрования и расшифровки сообщений вам нужны два ключа – открытый и закрытый. Открытый ключ используется для шифрования данных, а закрытый-для их расшифровки.
Представьте себе, что кто-то кладет свое сообщение в коробку, прежде чем отправить его вам. Это окно ‘шифрования’ имеет два замка, и отправитель должен использовать открытый ключ для ‘запирания’ этого ящика. Вы можете поделиться своим открытым ключом с отдельным пользователем или загрузить его на серверы совместного использования ключей. Публичный ключ затем шифрует сообщение так, что никто не сможет расшифровать его, даже сам отправитель.
Ваши открытый и закрытый ключи связаны таким образом, что теперь только комбинация этих двух ключей может разблокировать коробку (расшифровать сообщение). Вы единственный владелец закрытого ключа, поэтому расшифровать сообщение можете только вы. И также никогда не должны делиться своим секретным ключом ни с кем.
Является ли шифрование PGP безопасным?
Шифрование PGP использует 128-битные ключи, что делает его довольно сложным для взлома. Другими словами, есть 2^128 возможных комбинаций, которые кто-то может попробовать, прежде чем сломает шифрование и прочитает ваше сообщение.
Чтобы атака была успешной, хакеру понадобится компьютер, способный запускать миллиард ключей каждую секунду. Даже если бы такой суперкомпьютер существовал, все равно потребовалось бы более 10 000 000 000 000 лет, чтобы опробовать все возможности. Таким образом, пользователи PGP могут чувствовать себя довольно безопасно, используя этот стандарт шифрования.
Зачем использовать PGP?
1. Чтобы зашифровать сообщения электронной почты
PGP широко используется для шифрования сообщений почты. Существует несколько плагинов, которые можно установить в аккаунт Gmail для шифрования сообщений. Некоторые из них будут шифровать ваши сообщения автоматически, в то время как другие будут нуждаться в ручной настройке. Однако эти плагины не шифруют ваши вложения или другую конфиденциальную информацию, такую как строка темы или адрес почты.
Вместо этого вы можете выбрать надежного поставщика услуг электронной почты со встроенным шифрованием PGP. Это означает, что ваша электронная почта будет зашифрована автоматически. Некоторые даже предлагают дополнительные функции, такие как анонимная регистрация, анонимная оплата или даже «перезапись адресов электронной почты».
2. Использование цифровых подписей
Ваш ключ также может быть использован для цифровой подписи документов, которые вы отправляете через интернет, чтобы доказать, что они являются подлинно вашими.
Например, представьте, что вы посылаете книгу своему лучшему другу. Вы шифруете документ их открытым ключом и подписываете его своим закрытым ключом. Как только он получит книгу, то узнает, что она пришла от вас и больше ни от кого. Если по какой-то причине кто-то перехватил документ и что-то изменил — хотя бы одну букву или цифру — ваш друг увидит недействительную цифровую подпись.
Биткоин-кошельки также могут быть подписаны с помощью закрытого ключа разработчика. Цифровая подпись гарантирует, что эти предварительно скомпилированные кошельки не скрывают никакого вредоносного кода, который может украсть вашу криптовалюту или другую конфиденциальную информацию.
Как использовать PGP?
Продвинутые пользователи смогут настроить свое собственное шифрование PGP, но большинство пользователей должны искать службы, которые предоставляют шифрование PGP в качестве функции. Как и большинство протоколов, он не доступен в качестве отдельного приложения.
Одно из его самых частых применений — это электронные письма. Ваши лучшие варианты состояли бы в том, чтобы найти электронную почту, которая предлагает встроенное шифрование PGP.
На видео: Как создать PGP-ключ и шифровать свою почту?
где взять pgp ключ для сайта гидра?
Как установить GPG шифрование
Для начала работы нужно установить сам GPG. Пользователи Linux могут поставить его из любого пакетного менеджера, поискав там «gnupg», или собрать вручную. Пользователи Windows могут воспользоваться сильно устаревшим клиентом GPG4Win, который имеет несколько неприятных багов и больше функций, или портативным и более свежим клиентом GPG4USB, который имеет меньше функций, но намного проще и стабильнее. Кстати, мы уже писали о том как с помощью клиента GPG4USB зашифровать свою переписку.
Независимо от операционной системы и клиента, после установки нужно будет создать свой ключ, введя в терминале или кликнув в клиенте соответствующую команду. Программа попросит определиться с алгоритмом шифрования. Обычно их два — это RSA и ELGamal (на самом деле три, если на Linux Вы отважились поставить экспериментальную ветку «modern» с криптографией на эллиптических кривых). Конкретных рекомендаций по алгоритмам нет, они разные и каждый выбирает себе схему по нраву.
Затем необходимо определиться с размером ключа в битах. Здесь тоже нет короткого и однозначного ответа. У слишком длинных ключей есть и недостатки. Одно можно сказать с уверенностью: при выборе RSA и ELGamal не используйте ключи меньше 2048 бит, они крайне не безопасны. Далее программа попросит заполнить несколько форм: E-mail, Имя и комментарий. E-mail и Имя — это публичная информация, которую сможет увидеть каждый, с кем вы будете переписываться.
После заполнения всех форм нужно ввести пароль. Его можно и пропустить, что не рекомендуется, так как это единственная мера безопасности, которая защитит секретную часть ключа в случае захвата файла с данным ключом злоумышленником. Также важно не забыть пароль, иначе работа с ключом будет более невозможна. При создании ключа нужно внимательно проверять корректность ввода всех полей — ошибки потом не исправить. Публичный ключ распространяется среди большого количества людей, поэтому среди пользователей не принято их часто менять — не у всех контактов может быть свежий ключ.
Сгенерировав свой GPG-ключ, можно начать его распространять. Для этого надо ввести команду отображения публичной части. Исторически сложилось так, что программа изначально применялась для шифрования почты и подписи публичных сообщений в почтовых рассылках, поэтому ключи отображаются по принципу формата РЕМ (англ. «PrivacyEnhanced Mail»). Формат представляет собой единый стандартный блок ключа, начинающийся заголовком — BEGIN PGP PUBLIC KEY BLOCK —, за ним следует достаточно длинное тело самого ключа, кодированное цифрами и латинским алфавитом, и завершающий заголовок — END PGP PUBLIC KEY BLOCK —. Весь блок с заголовками представляет собой ключ GPG, его и нужно распространять целиком. Помимо ручного распространения ключей, возможно использовать специализированные сервера. Пользователь загружает свой публичный ключ на сервер, и при необходимости любой может запросить его. Во многих программах в качестве сервера по умолчанию часто указывают сервер MIT.
Каждый GPG-ключ уникален. Запоминать и сравнивать такие большие блоки ключей вручную невозможно, поэтому для этого существуют отпечатки ключей. Каждый отпечаток ключа тоже уникален, формируется из публичной части, предоставляя короткую уникальную строку для идентификации. В строке отпечатка содержится 40 символов с разделением на 4 символа пробелами. Важно знать, что последние 8 или 16 символов являются еще и ID ключа. При использовании команд из терминала надо будет указывать ID для работы. Отпечатки удобны для быстрого сравнения двух ключей, или короткого указателя нужного ключа при нехватке места.
• В качестве почты можно указать другие виды связи, например ID какого-либо сервиса или мессенджера (Tox, Jabber, BitMessage и т. д.), разделив знаком «@» сам идентификатор/адрес и название сервиса. Чаще всего содержание именно этого поля используется для идентификации владельца ключа.
• Имя выбирать по своему усмотрению. Например, часто используемый ник или вообще «Anonymous».
• Поле комментария заполнять не обязательно. Можно ввести дополнительный. адрес или свою должность. Комментарий будет виден другим пользователям.
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).
Для того, чтобы зашифровать файл симметричным шифрованием с возможностью расшифровки приватным ключом (в этом случае его можно будет расшифровать приватным ключом, либо паролем) нужно использовать сразу несколько опций:
Пример команды симметричного шифрования файла 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 ИМЯ, вместо ИМЕНИ нужно указать идентификатор пользователя с закрытым ключом, для которого зашифрован файл.
Для расшифровки таких файлов с поддельным ключевым 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), которая применяется следующим образом:
Как в GPG проверить подпись файла
Для проверки подписи используется опция —verify.
Как мы только что узнали, цифровая подпись может быть интегрирована в файл, а может содержаться в отдельном файле. От этого зависит запуск команды gpg, если цифровая подпись интегрирована в файл, то достаточно указать опцию —verify, а затем проверяемый файл:
Если цифровая подпись отделена от файла, то после опции —verify нужно указать два аргумента: вначале идёт файл с подписью, а затем подписанные данные:
Пример вывода при проверке подписи (проверка выполнялась на компьютере, где была создана соответствующая пара ключей, поэтому к подписи полное доверие):
Без локализации (на этом компьютере публичный ключ был импортирован, поэтому, с одной стороны, подтверждено, что подпись хорошая и принадлежит Alexey Miloserdov
, но, с другой стороны, выведено предупреждение, что сам открытый ключ, которым проверялась подпись, не сертифицирован доверенной подписью — то есть программа хочет нам сказать, что таких ключей от имени Alexey Miloserdov
может наделать кто угодно в любом количестве):
Как извлечь файл из подписанного файла GPG
После проверки подписи может возникнуть интересный вопрос — а как, собственно, использовать этот файл в .gpg формате? Чтобы получить подписанные данные нужно использовать опцию -d, которую мы уже рассматривали — она используется для расшифровки данных. Но в дополнении к данной опции нужно ещё использовать опцию -o, после которой нужно указать имя файла, куда будут извлечены подписанные данные — обычный редирект вывода, как это было рассмотрено выше, может не подойти, поскольку для подписанного файла опцией -d не только извлекаются исходные данные, но и происходит проверка подписи и результаты проверки тоже выводятся на экран, то есть если вы будете использовать редирект вывода, то в создаваемый файл попадут и подписанные данные, и информация о проверке подписи.
Как в GPG одновременно подписать и зашифровать файл
Для этого достаточно совмещать уже известные нам опции.
Чтобы зашифровать файл публичным ключом другого лица, и подписать его своим приватным ключом, нужно выполнить команду вида:
Чтобы использовалось симметричное шифрование, то к предыдущей конструкции достаточно добавить соответствующую опцию -c:
Редактирования ключей GPG
Для редактирования ключа определённого пользователя выполните команду (замените ‘Alexey Miloserdov’ на желаемый идентификатор пользователя):
Вы попадёте в интерактивный интерфейс командной строки, там будут работать следующие команды:
Чтобы окончательно отозвать свой собственный ключ, выдав сертификат о компрометации ключей (вместо USERID введите идентификатор пользователя):
Ключ —gen-revoke создаёт сертификат отзыва (кстати, сертификат отзыва генерируется с самого начала, при создании пары ключей), который при распространении среди людей и серверов ключей говорит им, что ваш ключ больше не является валидным.
Для отключения или включения публичного ключа в своём собственном public key ring:
Для смены пароля приватного ключа (замените ‘Alexey Miloserdov’ на ваш идентификатор пользователя):
Изменить уровень доверия владельцу:
Будет выведено сообщение:
И вам нужно будет сделать выбор, введя одну из следующих цифр:
Как указать идентификатор пользователя в GPG
Идентификатор пользователя можно указать различными способами:
Файлы 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 ключа, для которого этот сертификат. У каждого, у кого есть доступ к этим файлам, может отозвать ваши ключи. Поэтому эти файлы нужно хранить в секрете и иметь их резервные копии.