解密文件尝试使用子密钥,然后出现“无密钥”错误

解密文件尝试使用子密钥,然后出现“无密钥”错误

使用:gpg(GnuPG)2.0.22 libgcrypt 1.5.3

我正在尝试解密来自远程站点的文件。我将我们的密钥导出到文件。gpg <filename>返回:(密钥 ID 已更改)

pub 2048R/656CC421 2018-04-19
sub 2048R/99F89J32 2018-04-19

我将其发送给发件人并要求他们导入、签名并信任它。

他们给我发了两个不同的密钥文件。使用gpg <filename>返回:

1. pub 2048R/62568LK1 2015-09-03

2. pub 2048R/J561VE25 2015-09-23

如果我执行编辑键,我会得到以下信息:

我的钥匙:

Secret key is available.

pub 2048R/656CC421 created: 2018-04-19 expires: never usage: SC
trust: ultimate validity: ultimate
sub 2048R/99F89J32 created: 2018-04-19 expires: never usage: E
[ultimate] (1).

他们的钥匙:

1. pub 2048R/62568LK1 created: 2015-09-23 expires: never usage: SCE
trust: full validity: full
[ full ] (1).

2. pub 2048R/99F89J32 created: 2015-09-03 expires: never usage: SC
trust: full validity: full
[ full ] (1).

我正在使用以下参数在 bash 脚本中运行解密命令。

echo $passphrase | /usr/bin/gpg --verbose --passphrase-fd 0 --no-tty --output $output_file --recipient myuser --decrypt $input_file

以下是该命令的输出:

Version: GnuPG v1.2.4 (MingW32)
gpg: armor header:
gpg: public key is 99F89J32
gpg: using subkey 99F89J32 instead of primary key 656CC421
gpg: using subkey 99F89J32 instead of primary key 656CC421
gpg: cancelled by user
gpg: encrypted with 2048-bit RSA key, ID 99F89J32, created 2018-04-19
"usrname (Description) <[email protected]>"
gpg: public key decryption failed: Operation cancelled
gpg: decryption failed: No secret key

我从所有这些得出的结论是,发送者需要以我发送给他们的相同格式向我发送他们的公钥。例如:

pub 2048R/J561VE25 2015-09-23

sub 2048R/SOM3NUMB 2015-09-23

我认为他们发送给我的密钥文件没有相应的发布/订阅信息,因此 gpg 无法验证,因为我只有他们密钥对信息的一部分。

谁能告诉我我的想法是否正确或者我的想法是否错误?

谢谢!

答案1

Version: GnuPG v1.2.4 (MingW32)

圣球这是旧的版本——1.2.4 版发布于2003。看起来,发件人并不太关心更新他们的安全软件。

(您自己的 2.0.22 并没有好多少,发布日期是 2013 年。)

gpg: public key is 99F89J32
gpg: using subkey 99F89J32 instead of primary key 656CC421
gpg: using subkey 99F89J32 instead of primary key 656CC421

这是正常的。“主”密钥对仅用于签署(即认证)其他密钥;通常也用​​于签署消息。它不可用于加密 - 您始终有一个子密钥用于此目的。

(这种分离还允许进行离线签名或频繁加密密钥轮换等操作。)

gpg: cancelled by user
gpg: encrypted with 2048-bit RSA key, ID 99F89J32, created 2018-04-19 "usrname (Description) <[email protected]>"
gpg: public key decryption failed: Operation cancelled
gpg: decryption failed: No secret key

听起来 GnuPG 试图显示密码提示来解锁你的密钥对,但密码窗口无法打开,或者您自己不小心取消了它。

密码提示由 GnuPG 的松树入口组件本身通过以下方式启动gpg-代理。我真的不知道从哪里开始在 Windows 上排除故障——也许更新版本效果会更好。(您的 GnuPG 2.0.22 于 2013 年发布。)

从 GnuPG 2.1 开始,较新的版本支持“环回 pinentry”模式,该模式可以在没有松树入口组件。如果升级本身没有帮助,请尝试激活此选项。

发送者需要向我发送他们的公钥

发送者的公钥对于解密无用,仅对于签名验证有必要。

例如:

pub 2048R/J561VE25 2015-09-23

我认为他们发送给我的密钥文件没有相应的发布/订阅信息,因此 gpg 无法验证,因为我只有他们密钥对信息的一部分。

不。这些信息是为了,用户——它概括了密钥的类型、短(无用)ID 和到期日期。GnuPG 可以完美地从密钥本身中提取这些信息,尽管它不需要这样做。

答案2

经过多次反复,我通过两处修改找到了解决方案。

  1. 需要将 gpg-agent.confpinentry-program /usr/bin/pinentry-curses添加到其中。

  2. 脚本编写者需要添加--batch他的命令行。

一旦完成后,gpg 就能够获取密钥并解密。

感谢 Grawity 的回复。感谢您抽出时间。

相关内容