gpg:解密失败:没有密钥

信息安全 gnupg 苹果系统
2021-08-24 21:23:31

我似乎无法让 gnupg 解密用我的密钥加密的文件。我尝试将我的密钥从旧笔记本电脑迁移到新笔记本电脑,但我不断收到相同的错误:

gpg: decryption failed: No secret key

我尝试从旧笔记本电脑中导出我的公共密钥、秘密密钥和子密钥,如下所示:

gpg --export MYKEYID > pub.key
gpg --export-secret-keys MYKEYID > sec.key
gpg --export-secret-subkeys MYKEYID > sub.key

然后我将它们复制到我的新笔记本电脑上,并按如下方式导入它们:

gpg --import pub.key
gpg --import sec.key
gpg --import sub.key

然后我编辑了密钥以赋予它最终的信任:

gpg --edit-key MYKEYID

gpg> trust
...
Your decision? 5
Do you really want to set this key to ultimate trust? (y/N) y

但无论如何,它都无法解密:

gpg --decrypt -v encryptedfile.gpg
gpg: public key is E78E22A13ED8B15D
gpg: encrypted with ELG key, ID E78E22A13ED8B15D
gpg: decryption failed: No secret key

旧笔记本电脑上的版本:

gpg --version
gpg (GnuPG) 2.1.21
libgcrypt 1.7.6

新笔记本电脑版本:

gpg --version
gpg (GnuPG/MacGPG2) 2.2.3
libgcrypt 1.8.1
4个回答

如果您的密钥受密码保护,并且您的 pinentry 程序无法正常工作,也会出现此消息。

在这种情况下,gpg 无法获得用于解锁解密密钥的密码。如果是这种情况,gpg --list-keys将显示正确的键,但gpg -d -v会出现选择正确的键,然后在放弃之前挂起一段时间。这就是它在等待从未真正返回的 pinentry。

这些步骤取决于您的特定环境,但检查(或创建)pinentry-program选项~/.gnupg/gpg-agent.conf是一个不错的起点。在我的情况下(在安装了 Homebrew 的 OS X 上gpgpinentry-mac我必须使用以下内容创建该文件:

pinentry-program /usr/local/bin/pinentry-mac

您可能需要根据您喜欢的 pinentry 程序的需要进行调整。

这完全是我的错。我不确定发生了什么,但我试图解密的文件没有被我的密钥加密。我尝试了一个不同的文件,它工作。

我不确定这是怎么发生的,但是首先在旧机器上测试相同的文件会为我节省大量时间:)。

我随机开始收到错误

gpg: decryption failed: No secret key

同样,在尝试解密文件时。奇怪的是,GPG 告诉我这些文件是用与我自己不同的密钥 ID 加密的(尽管正确识别了我的姓名和密钥的创建日期)。我重新启动计算机,问题就消失了。

我猜有一个错误,GPG 守护进程的内存中的某些位可能会错位,然后需要重新启动。

我得到了错误:

gpg: decryption failed: No secret key

在我用 Ctrl+C 关闭了 gpg 提示符之后,所以可能仍然存在一些状态。

我通过杀死 gpg-agent 进程来修复它:

$ ps aux | grep gpg-agent
user             76882   0.0  0.0  4297004    996   ??  Ss   11:51AM   0:00.02 gpg-agent --homedir /Users/user/.gnupg --use-standard-socket --daemon

$ kill 76882