linux-labs

Вики / Базовые команды

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

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

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

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

gpg --list-keys                   # публичные ключи в связке
gpg --list-secret-keys --keyid-format long   # приватные (+ длинный keyid)
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   # сертификат отзыва (на случай компрометации)
# симметрично (паролем, без ключей) — удобно для бэкапов
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       # подпись внутри текста (читаемо)

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 KEYIDtrust.

gpg -c file ; gpg -d file.gpg                 # симметрично (пароль)
gpg -e -s -r who file ; gpg -d file.gpg       # для получателя (+подпись)
gpg --detach-sign -a file ; gpg --verify file.asc file
gpg --fingerprint ; gpg --import pub.asc ; gpg --recv-keys KEYID
gpg --export-secret-keys -a me > priv.asc     # БЭКАП приватного (надёжно!)