17

Я использую 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

2 ответа2

19

… Конечно, 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 - - -
OK
> /bye
$ 

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

$ gpg --list-secret-keys --with-keygrip
/home/fred/.gnupg/pubring.kbx
--------------------------------
sec   ed25519 2018-08-18 [SC]
      2357E133AD5D24F6CB2C1B0CEF4F7ED27E252632
      Keygrip = 4D29EF1460F164CDB11D0FC0247214660ACDD60F 
uid           [ultimate] Fred Foobar <fred@example.com>
1

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .