С чего начать Первые шаги трек · 15 ступеней
Linux Labs

GPG — шифрование и подписи

4 мин GnuPG 2

GnuPG: ключи GPG, шифрование файлов, подпись и её проверка, симметричный режим с паролем.

Шпаргалка

9 команд Версия для печати
  • gpg -c file зашифровать симметрично (по паролю)
  • gpg -d file.gpg расшифровать
  • gpg -e -s -r who file зашифровать для получателя + подписать
  • gpg --detach-sign -a file отдельная подпись
  • gpg --verify file.asc file проверить подпись
  • gpg --fingerprint отпечатки своих ключей
  • gpg --import pub.asc импортировать публичный ключ
  • gpg --recv-keys KEYID получить публичный ключ с keyserver
  • gpg --export-secret-keys -a me > priv.asc БЭКАП приватного (надёжно!)

Обзор

GPG (GnuPG) — шифрование и цифровые подписи. Применения: зашифровать файл, подписать релиз/коммит, проверить подпись пакета/репозитория (apt использует GPG для верификации).

Как и SSH, это асимметрия: публичный ключ для шифрования/проверки, приватный — для расшифровки/подписи.

bash
gpg --list-keys                   # публичные ключи в связке
gpg --list-secret-keys --keyid-format long   # приватные (+ длинный keyid)

Ключи

15
bash
gpg --full-generate-key           # создать пару (выбрать тип/размер/срок)
gpg --quick-generate-key "Имя <you@mail>" ed25519 sign,encrypt 1y   # быстро
gpg --fingerprint you@mail        # отпечаток (сверять при обмене!)
gpg --export -a you@mail > pub.asc        # экспорт публичного (ASCII -a)
gpg --export-secret-keys -a you@mail > priv.asc   # бэкап приватного (храни надёжно!)
gpg --import pub.asc              # импорт чужого публичного
gpg --send-keys KEYID             # опубликовать на keyserver
gpg --recv-keys KEYID            # получить чужой с keyserver
gpg --gen-revoke you@mail > revoke.asc   # сертификат отзыва (на случай компрометации)
Ключ Что делает Пример
-c --symmetric Зашифровать симметрично, по паролю, без ключей. gpg -c secret.txt
-d --decrypt Расшифровать файл своим приватным ключом или паролем. gpg -d secret.txt.gpg
-e --encrypt Зашифровать публичным ключом получателя (нужен -r). gpg -e -r friend@mail file
-r --recipient user-id Указать получателя (по email или id ключа) для шифрования. gpg -e -r friend@mail file
--full-generate-key Создать новую пару ключей с выбором типа, размера и срока. gpg --full-generate-key
-s --sign Подписать вместе с шифрованием. gpg -e -s -r friend@mail file
--detach-sign Сделать отдельную (detached) подпись файла. gpg --detach-sign -a file
--verify Проверить подпись файла. gpg --verify file.asc file
--fingerprint Показать отпечаток ключа — сверяй его при обмене ключами. gpg --fingerprint you@mail
--export -a Экспортировать публичный ключ (-a — в ASCII). gpg --export -a you@mail > pub.asc
--import Импортировать чужой публичный ключ из файла. gpg --import pub.asc
--recv-keys keyid Получить публичный ключ с keyserver по его id. gpg --recv-keys KEYID
--gen-revoke Создать сертификат отзыва — заранее, на случай компрометации ключа. gpg --gen-revoke you@mail > revoke.asc
--clearsign Подписать текст, оставив его читаемым (подпись рядом, не отдельно). gpg --clearsign message.txt
--export-secret-keys -a Экспортировать приватный ключ — храни результат так же надёжно, как сам ключ. опасно gpg --export-secret-keys -a you@mail > priv.asc

Ничего не найдено. Попробуй запрос короче.

Рецепты

1

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

bash
# симметрично (паролем, без ключей) — удобно для бэкапов
gpg -c secret.txt                 # → secret.txt.gpg (спросит пароль)
gpg --cipher-algo AES256 -c f     # явный шифр
gpg -d secret.txt.gpg             # расшифровать (вывод в stdout)

# асимметрично (для получателя)
gpg -e -r friend@mail file        # зашифровать публичным ключом получателя
gpg -e -s -r friend@mail file     # зашифровать И подписать
gpg -d file.gpg > file            # расшифровать своим приватным

# подпись и проверка
gpg --detach-sign -a file         # отдельная ASCII-подпись → file.asc
gpg --verify file.asc file        # проверить подпись
gpg --clearsign message.txt       # подпись внутри текста (читаемо)

Неполадки

5

gpg: decryption failed: No secret key

Нет приватного ключа для этого получателя (шифровали не на твой ключ) или ключ не импортирован. gpg --list-secret-keys.

Can't check signature: No public key

Нет публичного ключа автора. Импортируй (gpg --import/--recv-keys KEYID), затем --verify. Сверь отпечаток (--fingerprint) по доверенному каналу.

Забыл пароль приватного ключа

Восстановить нельзя. Есть revocation-сертификат — отзови ключ; иначе генерируй новый и переподпиши/перешифруй.

Inappropriate ioctl for device (в скриптах/CI)

GPG не может спросить пароль (нет TTY). --batch --pinentry-mode loopback --passphrase-file pass.txt или настрой gpg-agent.

WARNING: ... not certified with a trusted signature

Ключ импортирован, но не доверен. Подпись валидна, просто нет «сети доверия». При необходимости — gpg --edit-key KEYID → trust.

Опасно

2

Потеря приватного ключа или пароля к нему

Восстановить зашифрованные данные без приватного ключа (или пароль к нему) невозможно — это не «забыл, но есть способ обойти», а криптографически недостижимо. Сразу после генерации пары сделай gpg --gen-revoke (сертификат отзыва) и gpg --export-secret-keys (бэкап приватного) и храни оба отдельно от рабочей машины.

gpg --export-secret-keys в общий канал

Экспортированный приватный ключ — это сам ключ в текстовом виде (ASCII-armor делает его похожим на безобидный текстовый файл). Отправка его в чат/тикет/ публичный репозиторий равносильна публикации пароля от всего, что этим ключом защищено.

См. также

  • ssh-keys — Генерация ключей, authorized_keys, ssh-agent, права на файлы .ssh.
  • apt — Установка, обновление и удаление пакетов в Debian/Ubuntu; apt и dpkg.
  • openssl-tls — Проверка и выпуск сертификатов — openssl для диагностики, certbot для Let's Encrypt.
Загрузка…