web-dev-qa-db-ja.com

gpg2:秘密鍵なし

Enigmailを1年以上問題なく使用してきましたが、今日は機能しません。

次の興味深い事実を見つけました。

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は間違ったファイルを探しているため、秘密鍵を見つけることができません。

gpgが正常に機能しているときに、gpg2がどのように失敗しますか?秘密鍵の読み取り元を指定するオプションが表示されません。

誰かアイデアはありますか?


@ 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
21
rexroni

最終的に、私はDebian Unstableを使用していて、apt-get dist-upgrade。それが彼らがそれを「不安定」と呼ぶ理由だと思います。

1
rexroni

…もちろん、gpg2は間違ったファイルを検索しているため、秘密鍵を見つけることができません。

それはonlyファイルではありません。

GnuPG 1.x(および2.0)では、「保護」はキーブロックのパブリックデータの複製コピーも使用していたため、完全に自己完結型でした(そして、gpg -kgpg -Kの唯一の違いは、どのファイルでしたか読む)、しかし同時にプログラムを維持することはより困難です。

GnuPG 2.1では、秘密鍵は独立して保存されるようになりました。秘密鍵はgpg-agentによって維持され、~/.gnupg/private-keys-v1.d/に保持されます。したがって、gpg -kgpg -Kの両方は、公開からOpenPGP情報を読み取る必要がありますが、後者はさらに、どの証明書に秘密鍵が関連付けられているかについてgpg-agentを尋ねます。 straceを使用している場合は、公開を読んだ直後にconnect()が呼び出されることに注意してください。

GnuPGがキーを自動的に移行しなかった場合は、セキュリティ全体を直接インポートするだけです。

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

エージェントの内容を手動で確認するには:

$ gpg-connect-agent > keyinfo --list
 S KEYINFO 4D29EF1460F164CDB11D0FC0247214660ACDD60F D---P---
OK
> /さようなら

これらは「キーグリップ」です– GnuPGのセキュリティと比較してください:

$ gpg --list-secret-keys --with-keygrip
/home/fred/.gnupg/pubring.kbx 
 ----------------------------- --- 
 sec ed25519 2018-08-18 [SC] 
 2357E133AD5D24F6CB2C1B0CEF4F7ED27E252632 
 Keygrip = 4D29EF1460F164CDB11D0FC0247214660ACDD60F 
 id Fulbaratecomuldate [ultimate] 
22
user1686