Debian

使用智能卡時,GnuPG 無法找到預設的簽名密鑰,但我只有一個。我究竟做錯了什麼?

  • February 19, 2020

我正在使用基於 Debian 的 Docker 映像,並且密鑰環中只有一個可用密鑰:

$ gpg -K
/tmp/test-keyring/pubring.kbx
-------------------------------
sec>  rsa2048 2012-01-16 [C] [expires: 2024-05-15]
     CB522FE0379DDF40A93400D7E4BC91FACDA9A65B
     Card serial no. = 00nn 00nnnnnn
uid           [ unknown] John Doe <username@example.com>
ssb#  rsa2048 2012-01-16 [S] [expires: 2024-05-14]
ssb   rsa3072 2012-01-16 [S] [expires: 2024-05-15]

正如您在此處看到的,共有三個鍵:

  • 帶有 標記的主鍵>位於智能卡上。它被標記為僅證書密鑰,因此不能用於簽名。
  • 標記為 的第二個輔助簽名密鑰的私有部分在#此處不存在。因此它不能用於簽名。
  • 第三個輔助簽名密鑰有一個可用的私有部分。這是此處唯一可用於簽名的密鑰。

同樣,這裡的最後一個密鑰是唯一可用於簽名的密鑰。

唉,出於某種原因,GnuPG 看不到它:

$ echo test | gpg --clearsign
gpg: no default secret key: Unusable public key
gpg: [stdin]: clear-sign failed: Unusable public key

但是,如果我直接指定使用者 ID,則簽名沒有問題:

$ echo test | gpg --clearsign --default-key username@example.com
gpg: using "username@example.com" as default secret key for signing
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512

test
-----BEGIN PGP SIGNATURE-----

手冊說它應該開箱即用:

–default-key name 使用名稱作為簽名的預設使用者 ID。如果不使用,則預設使用者 ID 是在密鑰環中找到的第一個使用者 ID。

我正在使用 GnuPG 2.2.19:

$ gpg --version
gpg (GnuPG) 2.2.19
libgcrypt 1.8.5

我已經應用了一個已知的 Docker 解決方法GPG_TTY,但無濟於事。

我該怎麼做才能讓它發揮作用?

如果我沒看錯:您有兩個用於簽名的子密鑰,但一個處於離線狀態:

ssb#  rsa2048 2012-01-16 [S] [expires: 2024-05-14]
ssb   rsa3072 2012-01-16 [S] [expires: 2024-05-15]

我希望看到: ssb>on both,這確認子鍵已被stubs替換。這可能就是gnupg感到困惑的原因。

來自同一來源:

表示該密鑰的私鑰根本不可用。離線主密鑰就是這種情況。

我的設置是這樣的,帶有 3 個用於簽名、加密和身份驗證的子密鑰。請注意,所有 3 個子項都位於智能卡上:

sec#  rsa4096 2011-01-15 [C]
     xxxxxxxxxxxxxxxxxxxx
uid           [ unknown] xxxxxxxxxxxxx
ssb>  rsa4096 2011-01-15 [S]
ssb>  rsa4096 2011-01-15 [E]
ssb>  rsa4096 2011-01-15 [A]

我想知道當您嘗試簽名操作時智能卡是否在讀卡器中。

您可以投入default-key username@example.comdefault-key CB522FE0379DDF40A93400D7E4BC91FACDA9A65B投入~/.gnupg/gpg.conf以解決該問題。

引用自:https://unix.stackexchange.com/questions/567880