gpg2: без секретного ключа

15475
rexroni

Я использую enigmail уже больше года без проблем, и сегодня это не работает.

Я обнаружил следующий интересный факт:

gpg --decrypt something.gpg # this works gpg2 --decrypt something.gpg # this fails 

Так что что-то не работает с gpg версии 2 на моей машине.

Это привело меня к тому, что:

gpg --list-secret-keys # reads from ~/.gnupg/secring.gpg gpg2 --list-secret-keys # reads from ~/.gnupg/pubring.gpg (pubring?!)  

Кажется, это корень проблемы ... конечно, gpg2не могу найти секретный ключ, потому что он ищет в неправильном файле.

Как я мог gpg2потерпеть неудачу, когда все gpgработает нормально? Я не вижу никаких вариантов, чтобы указать, откуда секретные ключи читаются.

У кого-нибудь есть идеи?


Ответ на @grawity :

Спасибо, я ценю вашу помощь. Я побежал strace, и я вижу, о чем ты говоришь.

Однако даже после того, как gpg2 --import ...я не вижу разницы в поведении. Я могу заставить его работать, только если я перезагружаюсь (без запуска gpg-agent), запускаю gpg2 --import ...и запускаю gpg2 --decrypt .... После этой последовательности thunderbird + enigmail также ведет себя хорошо. Однако примерно через 15 минут (я думаю, пароль, который я ввел для расшифровки, истек), затем gpg-agentвозвращается к своему старому поведению. Эта последовательность повторяется.

Итак, вот некоторые результаты, если это поможет что-то прояснить:

вывод gpg2 -K:

/home/<username>/.gnupg/pubring.gpg --------------------------------- sec rsa4096/AAAAAAAA <date> [SC] uid [ultimate] <description of me> ssb rsa4096/BBBBBBBB <date> [E] 

вывод gpg-connect-agent

> keyinfo --list S KEYINFO <keygrip associated with AAAAAAAA> D - - - P - - - S KEYINFO <keygrip associated with BBBBBBBB> D - - - P - - - OK 

вывод gpg2 -v -r <my email> -e testfile

gpg: using PGP trust model gpg: using subkey BBBBBBBB instead of primary key AAAAAAAA gpg: This key belongs to us gpg: reading from 'testfile' gpg: writing to 'testfile.gpg' gpg: RSA/AES256 encrypted for: "BBBBBBBB <description of me>" 

вывод gpg2 -v -d testfile.gpg

gpg: public key is BBBBBBBB gpg: using subkey BBBBBBBB instead of primary key AAAAAAAA gpg: using subkey BBBBBBBB instead of primary key AAAAAAAA gpg: encrypted with 4096-bit RSA key, ID BBBBBBBB, created <date> "<description of me>" gpg: public key decryption failed: Operation cancelled gpg: decryption failed: No secret key 
17
Did you end up solving this? I'm having the exact same problem. Volker 7 лет назад 0
Nevermind, I fixed it. The needed to use `gpg-agent`, and the pinentry program needed to be set to `pinentry-gtk-2`. Before it was set to `pinentry-gnome3`, which existed on my system, but it didn't work. I had to manually install `pinentry-gtk-2`. Volker 7 лет назад 0

2 ответа на вопрос

18
grawity

… Конечно, gpg2 не может найти секретный ключ, потому что он ищет в неправильном файле.

Это не единственный файл, на который он смотрит.

В GnuPG 1.x (и 2.0) «secring» также имел дублирующую копию открытых данных вашего блока ключей, поэтому он был полностью автономным (и единственная разница между gpg -kи gpg -Kкаким файлом он читал), но в то же время сложнее поддерживать программу.

В GnuPG 2.1 секретные ключи теперь хранятся независимо - они поддерживаются gpg-agent, который их хранит ~/.gnupg/private-keys-v1.d/. Таким образом, и то, gpg -kи другое gpg -Kтеперь должны прочитать информацию OpenPGP из публикации, но последняя дополнительно спрашивает gpg-agent о том, с какими сертификатами связаны секретные ключи. Если вы используете strace, вы должны заметить connect()звонок сразу после прочтения публикации.

Если GnuPG не выполняет автоматическую миграцию ключей, просто импортируйте весь секрет напрямую:

gpg2 --import ~/.gnupg/secring.gpg 

Чтобы проверить содержимое агента вручную:

$ gpg-connect-agent  > keyinfo --list S KEYINFO 926145FFCA32B3E6E079A0CF73EA77C40733A349 D - - - P - - - S KEYINFO BACFB81EAFC864F4AB2926E8B1F55AD579F78D1A D - - - P - - - S KEYINFO FF3D1DD51B9C79E148CCCEA5F7F3E25EC96048B7 D - - - P - - - S KEYINFO 4D29EF1460F164CDB11D0FC0247214660ACDD60F D - - - P - - - S KEYINFO 06B13685B9AA429B9CABCE480930D74B991C8DF0 D - - - P - - - S KEYINFO B28DB8D045654E8A6A40466A07FCD9E432935E29 D - - - P - - - Хорошо > / пока  $ 

Это «набор ключей» - сравните их с секретом GnuPG:

$ gpg --list-secret-keys --with-keygrip /home/fred/.gnupg/pubring.kbx -------------------------------- sec ed25519 2018-08-18 [SC] 2357E133AD5D24F6CB2C1B0CEF4F7ED27E252632 Keygrip = 4D29EF1460F164CDB11D0FC0247214660ACDD60F  uid [ultimate] Фред Фубар <fred@example.com> 
У меня была та же проблема: я попытался сгенерировать ключ usign `gpg --gen-key`, который я хотел использовать с` gopass`. К сожалению, `gopass` использует` gpg2` ... `gpg2 --import` работает как шарм! Спасибо! andiba 6 лет назад 0
Для меня `gpg2 --import ~ / .gnupg / pubring.gpg` это исправило. Dilawar 6 лет назад 0
Ты мой герой Lo-Tan 6 лет назад 0
1
rexroni

В конце концов, я решил, что проблема в том, что я использую нестабильную версию Debian, и было обнаружено несоответствие версий apt-get dist-upgrade. Я полагаю, именно поэтому они называют это "нестабильным".

У меня это тоже есть в Ubuntu LTS. После переключения с Ubuntu Unity на GNOME. nerdoc 6 лет назад 0

Похожие вопросы