Вопрос или проблема
Во-первых, я потратил час на поиски ответов с похожими названиями, так что, пожалуйста, прочитайте это сообщение, прежде чем пометить этот вопрос как дубликат.
Я использую YubiKey для хранения своего PGP личного ключа с помощью функции смарт-карты.
Я подтверждаю, что личный ключ работает, так как я могу подключаться к серверам, используя SSH (что вызывает pinentry-mac
).
$ cat .gnupg/gpg-agent.conf
enable-ssh-support
default-cache-ttl-ssh 60
max-cache-ttl-ssh 120
default-cache-ttl 60
max-cache-ttl 120
pinentry-program /usr/local/bin/pinentry-mac
Ошибка gpg: decryption failed: No secret key
возникает, когда смарт-карта YubiKey не разблокирована, и я запускаю команды gpg
.
$ gpg --decrypt /path/to/file.asc
gpg: зашифровано с помощью RSA ключа, ID скрыт
gpg: зашифровано с помощью 4096-битного RSA ключа, ID скрыт, создан скрыто
скрыто
gpg: расшифровка открытым ключом не удалась: Разорванное соединение
gpg: расшифровка не удалась: Нет секретного ключа
Когда возникает вышеупомянутая ошибка, подключение к серверу с использованием SSH вызывает pinentry-mac
, затем я нажимаю ctrl+c
и запускаю gpg --decrypt /path/to/file.asc
, и вызовется pinentry-mac
.
Что здесь происходит? Как я могу заставить gpg --decrypt /path/to/file.asc
работать без необходимости сначала использовать ssh
?
Возможно, я что-то упускаю!
Обновление GnuPG с версии 2.2.22
до 2.2.23
с помощью brew upgrade
решило проблему.
Ответ или решение
Проблема, с которой вы столкнулись, связана с использованием GnuPG (GPG) в сочетании с YubiKey для хранения вашего закрытого PGP-ключа. Ошибка gpg: decryption failed: No secret key
возникает, когда GPG не может получить доступ к закрытому ключу, необходимому для расшифровки данных. Давайте проанализируем элементы вашей ситуации и предложим возможное решение.
1. Понимание проблемы
Вы используете YubiKey, который сохраняет ваш закрытый ключ в режиме смарт-карты. Когда вы пытаетесь выполнить команду gpg --decrypt /path/to/file.asc
, GPG не может найти закрытый ключ, потому что YubiKey заблокирован. Ваша конфигурация gpg-agent.conf указывает на использование pinentry-mac
для запроса PIN-кода, но, как вы заметили, этот запрос срабатывает только при подключении к серверу по SSH.
2. Ожидание разблокировки смарт-карты
Работа смарт-карт (включая YubiKey) подразумевает, что они могут быть заблокированы и требуют ввода PIN-кода перед доступом к закрытым ключам. Когда вы выполняете SSH-команду, происходит вызов pinentry-mac
, который запрашивает у вас PIN-код, и последующее выполнение GPG-операции начинается с разблокированного ключа. Это объясняет, почему после выполнения SSH-команды GPG начинает корректно работать.
3. Расшифровка файла без предварительного вызова SSH
Чтобы избежать необходимости предварительного выполнения SSH-команды, вам следует сначала разблокировать при помощи GPG, что также вызовет pinentry
для ввода PIN-кода. Это можно сделать через команду на шифрование или расшифровку, например:
gpg --use-agent --decrypt /path/to/samplefile
Теперь при запросе вы сможете ввести PIN-код, и ключ будет разблокирован для GPG-операций.
4. Обновление GnuPG
Как вы указали, обновление с версии 2.2.22 до 2.2.23 решило вашу проблему. Вероятно, в более новой версии GnuPG были исправлены некоторые проблемы совместимости или ошибки, влияющие на взаимодействие с YubiKey и gpg-agent. Регулярные обновления GnuPG имеют ключевое значение для обеспечения безопасной и корректной работы. Поэтому всегда стоит следить за последними версиями и изменениями.
5. Заключение
На практике, для успешного выполнения GPG-операций на базе YubiKey:
- Убедитесь, что ваш YubiKey разблокирован перед попыткой выполнить расшифровку.
- Проверяйте, что ваша версия GnuPG актуальна, чтобы избежать известных ошибок.
- Возможно, будет полезно изучить настройки
gpg-agent.conf
и оптимизировать их.
Если у вас возникнут дальнейшие вопросы или сложности, не стесняйтесь обратиться к сообществу или документации. Ваши усилия по пониманию данного инструмента помогут вам более эффективно управлять своими ключами и данными.