You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
--armor-a — Создаёт ASCII (символьный) вывод. При шифровании GPG по умолчанию создаёт бинарный вывод. При использовании этой опции GPG кодирует информацию кодировкой Radix-64 (Разновидность Base64). Этот текстовой вывод можно, например, отправить в мессенджере или по электронной почте, а также вывести на экран.
--encrypt-e — Зашифровать сообщение.
--recipient-r — Указать ключ, который будет использоваться для шифрования. Можно использовать информацию идентификатор пользователя (имя, почта), идентификатор ключа, отпечаток ключа.
--decrypt-d — Расшифровать сообщение.
--sign-s — Подписать сообщение. Подпись при этом будет распологаться отдельно от самого сообщения.
--clear-sign--clearsign — Подписать сообщение. Подпись при этом сохраняется вместе с сообщением.
--local-user-u — Указать ключ, который будет использоваться для подписи. Схож с опцией --recipient, но это не одно и то же.
--verify — Проверить подпись.
--list-keys-k — Вывести список публичных ключей.
--list-secret-keys-K — Вывести список приватных ключей.
--export — экспортировать публичный ключ в файл, который потом можно куда нибудь отправить.
--export-secret-keys — экспортировать все секретные ключи
--export-secret-subkeys — экспортировать все серкетные сабключи
--import — импортировать ключ.
--edit-key — Редактировать ключ.
change-usage
Изменить признаки назначения (возможности) первичного ключа или подключей. Эти признаки назначения, напр. Certify (подпись ключа), Sign (подпись данных) Authenticate (удостоверение личности), Encrypt (шифрование) устанавливаются во время создания ключа. Иногда полезно иметь возможность изменять их (например, добавить удостоверение личности) после создания. Делайте это с осторожностью; допустимые признаки назначения зависят от алгоритма ключа.
--expert — "Режим эксперта". Используется в связке с --edit-key и --full-gen-key
--delete-key — Удалить публичные ключи
--delete-secret-keys — удалить приватные ключи
--help — Более подробный список.
ШИФРОВАНИЕ ФАЙЛОВ
gpg -a -r 0x12345678 -e decrypted.txt > encrypted.gpg
Зашифровать файл decrypted.txt в файл encrypted.gpg ключом 0x12345678. При этом готовый файл будет текстовым, а не бинарным.
keyid-format 0xlong — формат вывода идентификатора ключа. У каждого ключа и подключа есть свой идентификатор. По умолчанию он не выводится, раньше выводилась его короткая версия.
Доступные форматы:
none — Не выводить (По умолчанию).
short — Короткая запись.
0xshort — Короткая запись с префиксом "0x".
long — Длинная запись.
0xlong — длинная запись с префиксом "0x".
throw-keyids — Не включать информацию о ключе в зашифрованное сообщение. Эта опция может быть полезна для анонимизации получателя сообщения.
no-emit-version — Не вставлять версию GPG в зашифрованное сообщение.
no-comments — Убирает все комментарии из зашифрованного сообщения.
with-fingerprint Список всех ключей с их отпечатками. Если команду использовать дважды, также отображаются отпечатки всех sub ключей.
Pynentry — это те самые диалоговые окна. Помимо tty-версии (консольной) есть ещё несколько версий (графических), которые можно попробовать : pinentry-gtk-2pinentry-qtpinentry-gnome3 .
pinentry-tty (консольное диалоговое окно)
Добавить в файл ~/.gnupg/gpg-agent.conf данную строчку:
pinentry-program /usr/bin/pinentry-tty
Пример:
Please enter the passphrase for the ssh key
MD5:59:ab:34:d3:80:1c:ba:74:bd:28:92:f9:c4:2e:21:57
Passphrase:
Добавить в файл ~/.gnupg/gpg-agent.conf данную строчку:
pinentry-program /usr/bin/pinentry-tty
Пример:
┌──────────────────────────────────────────────────────┐
│ Please enter the passphrase for the ssh key │
│ MD5:59:ab:34:d3:80:1c:ba:74:bd:28:92:f9:c4:2e:21:57 │
│ │
│ │
│ Passphrase: ________________________________________ │
│ │
│ <OK> <Cancel> │
└──────────────────────────────────────────────────────┘
Затем перезапустите gpg-agent. На системах с systemd это делается так:
sudo systemctl reload gpg-agent
или
gpg-connect-agent reloadagent /bye
или убить агент
q```sh
gpg-connect-agent updatestartuptty /bye
# ЭКСПОРТ
> !ВАЖНО ПОМНИТЬ что любой сабключ хранит в себе информацию о главном ключе.
- Экспорт primary key
gpg -a --export-secret-keys ИМЯ_КЛЮЧА > primary_key.gpg
- Экспорт Сабключей
gpg -a --export-secret-subkeys ИМЯ_КЛЮЧА > sec_subs.gpg
- Экспорт КОНКРЕТНОГО Сабключа
Чтобы экспортировать только один конкретный sub ключ, идентификатор sub ключа можно указать с помощью символа «!» восклицательный знак в конце идентификатора ключа указывает gpg экспортировать только этот конкретный sub ключ.
> Например я хочу подписывать эмэйлы. Thunderbird начиная с версии 78 поддерживаете OpenPGP. Я создал отдельный сабключ только для подписей и экпортирую именно его чтобы использовать в Thunderbird.
>
> Примечание: Громовой птичке нужно скармливать именно секретные ключи.
SSH Agent (SSH Агент) хранит в памяти компьютера закрытые SSH-ключи. Когда SSH-клиент (/usr/bin/ssh в линуксе и макоси, например) пытается подключиться к серверу при помощи ключа, она сначала делает запрос к SSH Agent и просит у него закрытый ключ, если у агента он есть, то ключ отдаётся программе, которая использует его для подключения.
Без SSH Agent SSH-клиент напрямую читает ключи с диска, в линуксе и макоси они лежат в каталоге ~/.ssh, если ключ зашифрован, то клиент спрашивает соответствующую парольную фразу. SSH Agent избавляет от многочисленных запросов такой парольной фразы.
В linux и macos по умолчанию стоит /usr/bin/ssh-agent из openssh, однако он малофунциональный и сложный в настройке. Вместо него можно использовать агент из комплекта gnupg (gpg-agent), он умеет не только PGP-ключами управлять, но и выполнять функцию SSH Агента. У gpg-agent есть два преимущества: он настраивается, а также позволяет задавать пароли для шифрования ключей в памяти.
TTL кеширование — это время в секундах после расшифровки, в течение которого запрос ключа не потребует пароля. Если указать 0, будет использоваться TTL по умолчанию (он задаётся аргументом default-cache-ttl-ssh в конфиге ~/.gnupg/gpg-agent.conf).
Перед идентификатором можно указать восклицательный знак (!) такой ключ будет выключен, это по сути то же самое, что и комментирование этой строчки через #.
Также можно для ключа указать набор флагов (третьим полем после TTL, оно опциональное):
┌───────────────────────────── идентификатор ключа
│ ┌──── TTL кеширования в секундах (0 — не кешировать)
│ │ ┌── флаги (пока только confirm)
────────────────┴─────────────────────── ┴ ┴──────
3BC01B6F0043256039006294F76C45139B703DBF 0 confirm
На данный момент поддерживается только один флаг — confirm, если он выставлен, то перед каждым обращением к ключу (даже если оно в пределах действующего TTL) будет показываться дополнительный диалог с подтверждением:
ДОБАВЛЕНИЕ ОБЫЧНОГО SSH КЛЮЧА В GPG-AGENT
Смена прав на ключ
chmod 0600 ~/.ssh/<имя ключа>
Добавление в агент
ssh-add ~/.ssh/<имя ключа>
Сначала ssh спросит парольную фразу для ключа, после чего появится диалог, где нужно выбрать пароль для шифрования ключа в агенте, обычно это простая короткая фраза (НЕ пароль к оригинальному ключу!):
Этот пароль (а не оригинальную парольную фразу!) нужно будет ввести, когда сторонняя программа затребует ключ:
Идентификатор добавленного ключа сохраняется в файле ~/.gnupg/sshcontrol в виде блока такого формата:
GnuPG позволяет использовать несколько типов подписей:
встроенная в файл: содержимое файла изменяется так, чтобы в него была добавлена ЭЦП. Чаще всего применяется при отправке подписанных сообщений по электронной почте;
отсоединённая в текстовом формате: создаётся файл с расширением *.asc вида mydocument.pdf.asc (где mydocument.pdf— имя оригинального файла);
отсоединённая в двоичном формате: создаётся файл с расширением *.sig вида mydocument.pdf.sig в бинарном формате.
Для создания ЭЦП файла используется закрытый ключ из нашей ключевой пары, а для проверки — открытый.
Создадим отсоединённую подпись в текстовом формате:
Внимание! При создании встроенных подписей содержимое файла-источника целиком включается внутрь, поэтому использовать данный формат не желательно из-за дублирования и значительного размера. Далее в статье мы будем рассматривать только отсоединённую ЭЦП, т.к. это самый популярный вариант подписи.
Проверка подписи
Для проверки подписи используется опция --verify.
Цифровая подпись может быть интегрирована в файл, а может содержаться в отдельном файле. От этого зависит запуск команды gpg, если цифровая подпись интегрирована в файл, то достаточно указать опцию --verify, а затем проверяемый файл:
gpg --verify test.php.gpg
Если цифровая подпись отделена от файла, то после опции --verify нужно указать два аргумента: вначале идёт файл с подписью, а затем подписанные данные:
gpg --verify test.php.sig test.php
Кстати, для проверки подписи есть специальная программа gpgv, которая заменяет собой конструкцию gpg --verify, то есть предыдущие команды можно записать так:
gpgv test.php.gpg
и
gpgv test.php.sig test.php
Подпись коммитов
Добавление ключа в Git
Если у вас есть приватный ключ для подписи, вы можете настроить Git так, чтобы этот ключ использовался для подписи, установив значение параметр user.signingkey config.
git config --global user.signingkey 0A46826A
Теперь Git будет использовать ваш ключ по умолчанию для подписи тегов и коммитов.
Персонально для репозитория можно указать другой GPG ключ. Например я так сделал для работы:
git config --local user.signingkey 7BGC7M6M
Ручное добавление
Так же можно добавить ключ вручную в файл .gitconfig в параметр signingkey.
Для глобальной настройки:
[user]
name = John Doeemail = doe@example.comsigningkey = Q6RNBLWTDFVRXX8YBWTSWDDX3C7AA332JRTVFT8T
[commit]
gpgsign = true
[core]
autocrlf = input
Для персональной настройки репозитория используется переменная signingkey в файле config, который лежит в папке .git.
[user]
name = John Doeemail = doe@example.comsigningkey = JFU7GGCEGQ3CY59E67Y9FAG2U83SN43N2G6DTBBP
Подписание коммитов
В более поздних версиях Git’а (v1.7.9 и выше) можно подписывать отдельные коммиты. Если вы хотите подписывать коммиты напрямую, а не только теги, вам нужно добавить -S к вашей команде git.
git commit -a -S -m 'Signed commit'
Чтобы увидеть и проверить эти подписи, существует также опция --show-signature для git-лога.
git log --show-signature -1
KEY SERVERS
Сервер ключей — это специальный сервер, хранящий публичные ключи. Сервера ключей используются для распространения публичных ключей.
Внимание! Ключи, отправленные на сервер ключей, невозможно удалить! Их можно только отозвать, импортировав сертификат отзыва на сервер, при этом ключ всё равно остаётся на сервере.
ОБНОВЛЕНИЕ СЕРВЕРОВ
gpg --keyserver <URL> --refresh-keys
ОТПРАВКА НА СЕРВЕР
gpg --keyserver <URL> --send-keys <KeyID>
**Получить публичный ключ с идентификатором ключа с сервера **
gpg --keyserver <URL> --recv-keys <KeyID>
Найти ключ на сервереgpg --keyserver <URL> --search-keys <UID или KeyID>
СПИСОК СЕРВЕРОВ
hkps://hkps.pool.sks-keyservers.net:443
hkp://ipv4.pool.sks-keyservers.net:11371
hkp://pgp.mit.edu
hkp://keys.gnupg.net
hkp://keyserver.ubuntu.com
hkp://keyserver.pgp.com
Сценарий безопасного хранения ключей
Шаг 1 Бэкап
Формат файла не имеет значения будь то ascgpgpgp или вообще без формата
При этом будет экспортирована вся необходимая информация для восстановления секретных ключей, включая информацию базы данных доверия. Убедитесь, что вы храните все резервные секретные ключи вне вычислительной платформы и в безопасном физическом месте.
Шаг 2 Экспорт primary key
gpg -a --export-secret-keys ИМЯ_КЛЮЧА > primary_key.gpg
Шаг 3 Создание Revocation Certificate
gpg -a --gen-revoke ИМЯ_КЛЮЧА > rev_cert.gpg
Очень важно хранить секретный ключ в супернадежном месте.
revocation certificate тоже важно хранить где-либо куда никто кроме вас не имеет доступ.
Шаг 4 Экспорт Сабключей
gpg -a --export-secret-subkeys ИМЯ_КЛЮЧА > sec_subs.gpg
Шаг 5 Удаление Primary Key
Теперь удалим всю секретную часть нашего ключа:
gpg --delete-secret-keys ИМЯ_КЛЮЧА
При этом надо понимать, что у нас останется публичная часть нашего ключа
Шаг 6 Импорт Сабключей
Теперь мы должны будем сделать импорт наших приватных саб-ключей, но без главного ключа:
gpg --import sec_subs.gpg
Надо понимать, что знак # рядом с sec означает что primary часть секретного ключа отсутствует в нашей связке ключей.