Encryption

gpg 無法解鎖無密碼密鑰:“gpg:公鑰解密失敗:未提供密碼”

  • May 14, 2019

我有一個從舊 gpg 版本開始的 gpg 設置,當時我沒有使用密碼。當提示輸入時,我會直接輸入。我不確定這是否意味著密鑰未加密,或者是否使用空密碼加密。

無論如何,當我嘗試解密最近發送給我的東西時,gpg 需要訪問我的私鑰並提示我輸入密碼,但現在我不能再使用空密碼了。gpg 失敗:

$ gpg -d foo.asc
(X dialog that prompts me for passphrase, I just press enter)
gpg: public key decryption failed: No passphrase given
gpg: decryption failed: No secret key

我希望能夠再次使用我的密鑰。我不介意從現在開始設置密碼,但我不知道如何:

$ gpg --passwd xxxxxxx@xxxxxxx.com
(X dialog that prompts me for current passphrase, I just press enter)
gpg: key xxxxxxxxxxxxxxxx/aaaaaaaaaaaaaaaa: error changing passphrase: No passphrase given
gpg: key xxxxxxxxxxxxxxxx/bbbbbbbbbbbbbbbb: error changing passphrase: No passphrase given
gpg: error changing the passphrase for 'xxxxxxx@xxxxxxx.com': No passphrase given

我在 openSUSE 15.0 上執行 gpg (GnuPG) 2.2.5 和 libgcrypt 1.8.2。

我通過使用具有密鑰的舊系統解決了這個問題。

  • 我在空密碼輸入有效的舊系統上設置了一個新密碼。
  • 導出舊系統私鑰並將其複製到新系統上
  • 清理新系統的 gpg 狀態(將 .gnupg 移動到 .gnupg.bak)
  • 導入非空密碼私鑰

這是我執行的命令:

# put a non-empty passphrase on current key
me@old$ gpg --passwd xxxx@xxxx.com
(leave empty on first prompt)
(put a new non-empty passphrase on 2nd)
(confirm new passphrase)

# now we export it

me@old$ gpg --list-secret-keys                               
/home/xxxxx/.gnupg/secring.gpg
-------------------------------
sec   4096R/AAAAAAAA 2015-01-01
uid                  Foo Bar <xxxx@xxxxx.com>
uid                  Bar Foo <xxxx@yyyyy.com>
ssb   4096R/BBBBBBBB 2015-01-01

# I've used the first key id (should be 8 hex digits)
me@old$ gpg --export-secret-keys AAAAAAAA > priv.key

# copy key over new system

# backup .gnupg dir just in case
me@new$ mv .gnupg .gnupg.back
# import new priv key
me@new$ gpg --import priv.key
(type new passphrase set previously)

# done!

為了完整起見,這裡是兩個系統的軟體版本,也許可以幫助某人:

新系統(不能輸入空密碼)軟體版本:

  • gpg (GnuPG) 2.2.5
  • libgcrypt 1.8.2
  • pinentry-curses (pinentry) 1.1.0

舊系統(可輸入空密碼)軟體版本:

  • gpg (GnuPG) 2.0.24
  • libgcrypt 1.6.1
  • pinentry-curses (pinentry) 0.8.3

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