Команды GPG

Полный список команда GPG

Команды, не привязанные к конкретной функции

--version Выводит информацию о версии программы и лицензировании. Обратите внимание, что эту команду нельзя сокращать.

--help -h Выводит сообщение о использовании, суммирующее наиболее полезные опции командной строки. Обратите внимание, что эту команду нельзя произвольно сокращать (хотя можно использовать её короткую форму -h).

--warranty Выводит информацию о гарантиях.

--dump-options Выводит список всех доступных опций и команд. Обратите внимание, что эту команду нельзя сокращать.

Конечно, вот перевод и структурированная таблица с командами, а также примеры использования.

Команды для выбора типа операции

Команда (короткая) Описание
--sign (-s) Подписать сообщение. Можно комбинировать с --encrypt (для подписи и шифрования) и/или --symmetric. Ключ для подписи выбирается по умолчанию или задаётся опциями --local-user и --default-key.
--clear-sign
--clearsign
Создать подпись в чистом тексте (cleartext signature). Содержимое читаемо без специального ПО, которое нужно только для проверки подписи. Может изменять пробельные символы в конце строк.
--detach-sign (-b) Создать отделённую подпись (detached signature).
--encrypt (-e) Зашифровать данные для одного или нескольких открытых ключей. Комбинируется с --sign и/или --symmetric. Получатели задаются опциями --recipient.
--symmetric (-c) Зашифровать симметричным шифром с использованием парольной фразы (по умолчанию AES-128). Комбинируется с --sign и/или --encrypt. Пароль кэшируется.
--store Только сохранить (создать простой пакет literal data).
--decrypt (-d) Расшифровать файл, переданный в командной строке (или из STDIN) и записать в STDOUT. Если файл подписан, подпись также проверяется.
--verify Проверить подпись файла, не выводя содержимое. Для проверки отделённой подписи нужно указать файл подписи и файл(ы) данных.
--multifile Модифицирует другие команды (--verify, --encrypt, --decrypt) для обработки нескольких файлов, переданных в командной строке или из STDIN.
--verify-files Аналогично --multifile --verify.
--encrypt-files Аналогично --multifile --encrypt.
--decrypt-files Аналогично --multifile --decrypt.
--list-keys (-k)
--list-public-keys
Вывести список указанных или всех открытых ключей. Не использовать для парсинга в скриптах (используйте --with-colons).
--list-secret-keys (-K) Вывести список указанных или всех секретных ключей. # означает, что ключ не используется, > — ключ на смарт-карте.
--check-signatures
--check-sigs
Аналогично --list-keys, но также проверяет и выводит подписи ключей. ! — хорошая подпись, - — плохая, % — ошибка проверки.
--locate-keys
--locate-external-keys
Найти ключи по аргументам (использует те же методы, что и при шифровании). Вторая команда не ищет в локальных хранилищах.
--show-keys Анализирует переданные ключи (не из ключевых колец) и выводит информацию о них, как --list-keys.
--fingerprint Вывести список ключей вместе с их отпечатками. Если указать дважды, покажет отпечатки всех субключей.
--list-packets Вывести только последовательность пакетов (для отладки).
--edit-card
--card-edit
Открыть меню для работы со смарт-картой.
--card-status Показать содержимое смарт-карты.
--change-pin Позволить сменить PIN-код смарт-карты.
--delete-keys Удалить ключ из открытого ключевого кольца. В пакетном режиме требуется --yes или указание отпечатка.
--delete-secret-keys Удалить ключ из секретного ключевого кольца. В пакетном режиме требуется указание отпечатка.
--delete-secret-and-public-key Удалить и секретный, и открытый ключ.
--export Экспортировать указанные или все открытые ключи в STDOUT или файл.
--send-keys Отправить указанные ключи на keyserver.
--export-secret-keys
--export-secret-subkeys
Экспортировать секретные ключи. Вторая форма делает первичный ключ непригодным для использования (GNU расширение).
--export-ssh-key Экспортировать ключ в формате OpenSSH.
--import
--fast-import
Импортировать/объединить ключи в ключевое кольцо.
--receive-keys
--recv-keys
Импортировать ключи с заданными keyIDs с keyserver’а.
--refresh-keys Запросить обновления для существующих в ключевом кольце ключей с keyserver’а.
--search-keys Найти ключи по именам на keyserver’е.
--fetch-keys Загрузить ключи по указанным URI.
--update-trustdb Обслуживание базы доверия (интерактивно, запрашивает ownertrust).
--check-trustdb Обслуживание базы доверия без взаимодействия с пользователем.
--export-ownertrust Экспортировать значения ownertrust (для резервного копирования).
--import-ownertrust Импортировать значения ownertrust из файла.
--rebuild-keydb-caches Перестроить кэши в ключевом кольце.
--print-md
--print-mds
Вывести дайджест сообщения для указанного или всех алгоритмов.
--gen-random Сгенерировать count случайных байт заданного уровня качества (0, 1, 2).
--gen-prime Сгенерировать простое число. (Use the source, Luke :-))
--enarmor
--dearmor
Упаковать/распаковать произвольные данные в/из ASCII-armor OpenPGP.
--unwrap Модифицирует --decrypt для вывода исходного сообщения без слоя шифрования (выводит структуру OpenPGP).
--tofu-policy Установить политику TOFU (Trust On First Use) для указанных ключей.

Конкретные примеры использования

1. Шифрование и подпись:

# Зашифровать и подписать файл 'document.txt' для получателя alice@example.com, используя свой ключ bob@example.com для подписи.
# Результат в файле 'document.txt.gpg'
gpg --encrypt --sign --recipient alice@example.com --local-user bob@example.com --output document.txt.gpg document.txt
# Короткая форма:
gpg -e -s -r alice@example.com -u bob@example.com -o document.txt.gpg document.txt

2. Создание и проверка отделённой подписи:

# Создать отделённую подпись для файла 'package.zip'
gpg --detach-sign --output package.zip.sig package.zip
# Проверить отделённую подпись
gpg --verify package.zip.sig package.zip

3. Симметричное шифрование:

# Зашифровать файл 'secret.txt' симметричным шифром с помощью пароля
gpg --symmetric --output secret.txt.gpg secret.txt
# Расшифровать полученный файл (gpg запросит пароль)
gpg --decrypt --output secret.txt secret.txt.gpg

4. Работа с ключами:

# Вывести список открытых ключей с отпечатками
gpg --list-keys --fingerprint
# Импортировать ключ из файла
gpg --import public_key.asc
# Экспортировать открытый ключ с ID 12345678 в файл
gpg --export --armor 12345678 > public_key.asc
# Обновить все ключи в ключевом кольце с keyserver'а
gpg --refresh-keys

5. Проверка подписи чистого текста:

# Проверить подпись файла 'message.txt.asc'
gpg --verify message.txt.asc
# Если нужно извлечь подписанное содержимое в файл 'message.txt'
gpg --output message.txt --decrypt message.txt.asc

Конечно, вот перевод, структурированная таблица и практические примеры.

Как управлять своими ключами

В этом разделе объясняются основные команды для управления ключами.


Таблица команд управления ключами

Команда (короткая) Описание
--quick-generate-key
--quick-gen-key
Быстро сгенерировать стандартный ключ с одним ID пользователя. Без диалогов.
--quick-set-expire Установить срок действия основного ключа (fpr) и/или его субключей.
--quick-add-key Добавить субключ к существующему ключу (по отпечатку fpr).
--quick-add-adsk Добавить Дополнительный Субключ для Расшифровки (ADSK) из другого ключа.
--generate-key
--gen-key
Сгенерировать новую пару ключей, используя параметры по умолчанию (интерактивно).
--full-generate-key
--full-gen-key
Сгенерировать новую пару ключей с диалогами для всех опций.
--generate-revocation
--gen-revoke
Создать сертификат отзыва для всего ключа.
--generate-designated-revocation
--desig-revoke
Создать назначенный сертификат отзыва (позволяет отозвать чужой ключ).
--edit-key Основная команда для интерактивного управления ключами через меню.
--sign-key Подписать открытый ключ вашим секретным ключом (ярлык для sign в --edit-key).
--lsign-key Подписать ключ с пометкой “не для экспорта” (ярлык для lsign).
--quick-sign-key
--quick-lsign-key
--quick-tsign-key
Быстро подписать ключ без дополнительного взаимодействия.
--quick-add-uid Добавить новый ID пользователя к существующему ключу.
--quick-revoke-uid Отозвать ID пользователя на существующем ключе.
--quick-revoke-sig Отозвать подписи ключей, сделанные указанным ключом.
--quick-set-primary-uid Установить или обновить флаг основного ID пользователя.
--quick-update-pref Обновить список предпочтений ключа до текущего значения по умолчанию.
--quick-set-ownertrust Установить уровень доверия (ownertrust) для ключа.
--change-passphrase
--passwd
Изменить парольную фразу секретного ключа.

Ключевые понятия из --edit-key:

  • sign / lsign / tsign / nrsign – Подписать ключ (обычная/локальная/доверительная/безотзывная).
  • adduid – Добавить user ID.
  • addkey – Добавить субключ.
  • passwd – Сменить парольную фразу.
  • revkey / revuid – Отозвать субключ / user ID.
  • expire – Изменить срок действия.
  • save – Сохранить изменения и выйти.
  • quit – Выйти без сохранения.

Примеры использования

1. Быстрое создание ключа

# Создать ключ для Alice, который никогда не истекает, используя алгоритмы по умолчанию
gpg --quick-generate-key "Alice Lovelace <alice@example.com>" default default never

# Создать ключ для Bob с истечением через 1 год
gpg --quick-gen-key "Bob Babbage <bob@example.com>" default default 1y

# Создать ключ, защищённый паролем "secret", в пакетном режиме
echo "secret" | gpg --batch --pinentry-mode loopback --passphrase-fd 0 --quick-gen-key "Test User" default default

2. Управление сроком действия и субключами

# Установить срок действия основного ключа (с отпечатком XYZ123...) на 2025-12-31
gpg --quick-set-expire XYZ1234567890ABCDEFGH 2025-12-31

# Добавить субключ шифрования (алгоритм по умолчанию) к существующему ключу
gpg --quick-add-key XYZ1234567890ABCDEFGH default encr

# Добавить субключ для аутентификации (Ed25519) с истечением через 6 месяцев
gpg --quick-add-key XYZ1234567890ABCDEFGH ed25519 auth 6m

3. Работа с существующими ключами (подпись, отзыв)

# Подписать ключ с отпечатком ABCD... (все его user IDs)
gpg --quick-sign-key ABCD0987654321ABCD0987654321ABCD0987654321

# Подписать ключ, но только конкретный user ID ('=*@company.org' - точное совпадение)
gpg --quick-sign-key ABCD0987654321ABCD0987654321ABCD0987654321 "=*@company.org"

# Отозвать user ID 'old@email.com' у ключа 'user@example.com'
gpg --quick-revoke-uid "user@example.com" "old@email.com"

4. Импорт и экспорт

# Импортировать ключ из файла
gpg --import public_key.asc

# Экспортировать открытый ключ с отпечатком XYZ... в файл
gpg --export --armor XYZ1234567890ABCDEFGH > alice_public.asc

# Экспортировать секретный ключ для резервной копии (ОСТОРОЖНО!)
gpg --export-secret-keys --armor XYZ1234567890ABCDEFGH > alice_secret_backup.asc

5. Просмотр и проверка

# Показать список открытых ключей с отпечатками
gpg --list-keys --fingerprint

# Показать список секретных ключей
gpg --list-secret-keys

# Проверить подписи на всех ключах в ключевом кольце
gpg --check-signatures

6. Интерактивное управление через --edit-key

# Начать редактирование ключа (заменить 'user@example.com' на свой ID)
gpg --edit-key user@example.com

# В появившемся интерактивном меню (prompt: gpg>) можно использовать:
# gpg> adduid                         # Добавить новый user ID
# gpg> addkey                         # Добавить новый субключ
# gpg> passwd                         # Сменить пароль
# gpg> expire                         # Изменить срок действия
# gpg> key 1                          # Выбрать первый субключ (для операций с ним)
# gpg> trust                          # Изменить уровень доверия
# gpg> save                           # Сохранить изменения и выйти

Конечно, вот подробная таблица всех субкоманд --edit-key и дополнительные примеры.

Таблица субкоманд интерактивного меню --edit-key

Команда вводится после приглашения gpg>.

Субкоманда Описание
uid n Переключить выбор пользователя (user ID) или фотографии с индексом n. * — выбрать всех, 0 — отменить выбор всех.
key n Переключить выбор субключа с индексом n или key ID n. * — выбрать все, 0 — отменить выбор всех.
sign Создать подпись на ключе. Если ключ ещё не подписан вашим ключом по умолчанию, будет запрошено подтверждение.
lsign То же, что sign, но подпись помечается как неэкспортируемая (local).
nrsign То же, что sign, но подпись помечается как безотзывная (non-revocable).
tsign Создать доверительную подпись (trust signature). Требует указания глубины цепи доверия и значения.
delsig Удалить подпись с ключа. Не может отозвать подпись, уже отправленную публично.
revsig Отозвать подпись. Для каждой вашей подписи будет предложено создать сертификат отзыва.
check Проверить подписи на всех выбранных user IDs. С опцией selfsig показываются только самоподписи.
adduid Добавить дополнительный user ID (имя и email).
addphoto Добавить фотографию (JPEG) в качестве user ID.
showphoto Показать выбранную фотографию user ID.
deluid Удалить user ID или фотографию. Не может отозвать user ID, уже отправленный публично.
revuid Отозвать user ID или фотографию.
primary Пометить текущий user ID как основной. Снимает эту пометку с других user IDs.
keyserver Установить предпочтительный keyserver для выбранных user IDs. "none" — удалить.
notation Установить нотацию (name=value) для выбранных user IDs. "none" — удалить все.
pref Показать фактические предпочтения (шифры, хэши, сжатие) для выбранного user ID.
showpref Показать предпочтения с учётом значений по умолчанию (более подробно).
setpref [string] Установить список предпочтений. Без аргументов — сбросить на значения по умолчанию. "none" — очистить.
addkey Добавить новый субключ к основному ключу.
addcardkey Сгенерировать субключ на смарт-карте и добавить его к этому ключу.
keytocard Перенести выбранный секретный субключ на смарт-карту. Ключ в keyring будет заменён на заглушку.
bkuptocard file Восстановить ключ из файла-бэкапа на новую смарт-карту.
keytotpm Перенести выбранный секретный ключ в форму, защищённую TPM (Trusted Platform Module).
delkey Удалить публичную часть субключа. Не может отозвать субключ, уже отправленный публично.
revkey Отозвать субключ.
expire Изменить срок действия основного ключа или выбранного субключа.
trust Изменить уровень доверия (ownertrust) для ключа. Изменения в trustdb применяются сразу.
disable Отключить весь ключ. Отключённый ключ нельзя использовать.
enable Включить ключ.
addrevoker Добавить назначенного отзывающего (designated revoker) для ключа. Опция "sensitive" — не экспортировать по умолчанию.
addadsk Добавить Дополнительный Субключ для Расшифровки (Additional Decryption Subkey) с другого ключа.
passwd Изменить парольную фразу для секретного ключа.
toggle Пустая команда для обратной совместимости.
clean Очистить ключ: удалить невалидные, устаревшие, отозванные подписи и подписи от отсутствующих ключей.
minimize Сжать ключ до минимального размера, оставив для каждого user ID только последнюю самоподпись.
change-usage Изменить флаги использования (возможности) основного ключа или субключей (например, добавить Authenticate).
cross-certify Добавить перекрёстные сертифицирующие подписи на подписывающие субключи для защиты от атак.
save Сохранить все изменения в ключевое кольцо и выйти.
quit Выйти без сохранения изменений.

Примеры использования --edit-key

1. Базовое управление ключом

# Начать редактирование ключа для alice@example.com
gpg --edit-key alice@example.com

# В интерактивном меню:
gpg> adduid                         # Добавить новый user ID (запрос имени и email)
    Real name: Alice Lovelace
    Email address: alice@work.com
    Comment: Work account
    (Подтвердить)

gpg> uid 2                          # Выбрать второй user ID (только что добавленный)
gpg> primary                        # Сделать его основным
gpg> passwd                         # Изменить парольную фразу
gpg> save                           # Сохранить изменения и выйти

2. Управление субключами

gpg --edit-key bob@example.com

gpg> addkey                         # Добавить новый субключ
    Please select what kind of key you want:
       (3) DSA (sign only)
       (4) RSA (sign only)
       (5) Elgamal (encrypt only)
       (6) RSA (encrypt only)
       (7) DSA (set your own capabilities)
       (8) RSA (set your own capabilities)
       (10) ECC (sign only)
       (11) ECC (set your own capabilities)
       (12) ECC (encrypt only)
       (13) Existing key
    Your selection? 6               # Выбираем RSA (только шифрование)
    What keysize do you want? 4096  # Указываем размер ключа
    Key is valid for? 1y            # Указываем срок действия (1 год)
    (Подтвердить создание)

gpg> key 1                          # Выбрать первый субключ (для операций с ним)
gpg> expire                         # Изменить его срок действия
    Key is valid for? (0) 0
    Key does not expire at all
    Is this correct? (y/N) y        # Сделать бессрочным

gpg> revkey                         # ОТОЗВАТЬ этот субключ (если он скомпрометирован)
gpg> save

3. Подписание чужих ключей и управление доверием

# Предполагается, что ключ друга уже импортирован
gpg --edit-key friend@example.com

gpg> sign                           # Подписать ключ друга
    ... Вывод информации о ключе и его отпечатка ...
    Really sign? (y/N) y            # Подтверждаем подписание

gpg> tsign                          # Создать доверительную подпись
    Enter the depth of this trust signature (1-255): 1
    Enter the trust value (60=marginal, 120=full, 0-255): 120
    Enter a domain name (optional): our-community.org
    Really sign? (y/N) y

gpg> trust                          # Изменить уровень доверия к владельцу ключа
    Your decision? 5                # Указываем: "I trust ultimately"
gpg> save

4. Работа со смарт-картой (YubiKey и аналоги)

gpg --edit-key mykey@example.com

gpg> keytocard                      # Перенести выбранный секретный ключ на карту
    Please select where to store the key:
       (1) Signature key
       (2) Encryption key
       (3) Authentication key
    Your selection? 1               # Переносим подписывающий ключ в слот для подписи
    (Введите пароль админа карты)

gpg> key 1                          # Выбрать следующий ключ
gpg> keytocard
    Your selection? 2               # Переносим шифрующий ключ в слот для шифрования

gpg> save                           # Секретные ключи теперь на карте, в keyring - заглушки

5. Отзыв компонентов ключа

# Ключ скомпрометирован, нужно отозвать старый email и создать сертификат отзыва
gpg --edit-key compromised@example.com

gpg> uid 1                          # Выбрать user ID со старым email
gpg> revuid                         # ОТОЗВАТЬ этот user ID
    Create a revocation certificate for this user ID? (y/N) y
    Enter the reason for the revocation: 1 # 1 = Key has been compromised
    Enter an optional description; ...:
    (Подтвердить)

gpg> genrevoke                      # Создать сертификат отзыва для всего ключа
    Create a revocation certificate? (y/N) y
    Enter the reason for the revocation: 1
    ... (Описание) ...
    Вывод ASCII-armored сертификата отзыва
    Сохранить его в надёжное место!

gpg> quit                           # Пока не сохраняем изменения, только создали сертификат

# Позже, чтобы применить отзыв, импортируем сертификат
gpg --import revocation_certificate.asc