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

21

Я использую 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
rexroni
источник
Вы в конечном итоге решили это? У меня точно такая же проблема.
Фолькер
Неважно, я это исправил. Необходимые для использования gpg-agent, и программа pinentry должна быть установлена ​​на pinentry-gtk-2. До этого было установлено pinentry-gnome3, что существовало в моей системе, но не работало. Пришлось вручную установить pinentry-gtk-2.
Фолькер

Ответы:

22

… Конечно, 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
> / пока 
$

Это «набор ключей» - сравните их с секретом 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>
user1686
источник
У меня была та же проблема: я попытался сгенерировать ключ, gpg --gen-keyкоторый я хотел бы использовать gopass. К сожалению, gopassиспользует gpg2... gpg2 --importработал как шарм! Благодарность!
Андиба
Для меня gpg2 --import ~/.gnupg/pubring.gpgэто исправлено.
Dilawar
Ты мой герой
Ло-Тан
1

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

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