在不安装密钥的情况下验证GPG签名

9

如何在不安装公钥的情况下验证gpg签名(使用cli或node js)?我有公钥,但不想将其添加到密钥环中。有什么提示吗?

谢谢, Florian

2个回答

8
这是我用于此目的的一个shell脚本。它创建一个临时密钥环,将指定的公钥安装在其中,运行指定的命令,然后删除临时密钥环。
请注意,这将从密钥服务器安装密钥。很容易将其调整为使用您已经在磁盘上的密钥(我应该添加一个选项来实现这一点)。
更新:请参见https://github.com/Keith-S-Thompson/gpg-tmp
#!/bin/sh

keyid=$1
shift
case "$keyid" in
    ????????)
        ;;
    *)
        echo "Usage: $0 key args..." 1>&2
        exit 1
esac

tmp_keyring=$HOME/$keyid-keyring.gpg

gpg --no-default-keyring --keyring $tmp_keyring --recv-keys $keyid
gpg --no-default-keyring --keyring $tmp_keyring "$@"
rm -f $tmp_keyring

它的功能类似于gpg命令,但需要一个额外的初始参数来指定8位数字密钥ID。
示例用法:
$ gpg coreutils-8.9.tar.gz.sig
gpg: Signature made Tue 04 Jan 2011 07:04:25 AM PST using RSA key ID 000BEEEE
gpg: Can't check signature: public key not found
$ gpg-tmp 000BEEEE coreutils-8.9.tar.gz.sig
gpg: keyring `/home/kst/000BEEEE-keyring.gpg' created
gpg: requesting key 000BEEEE from hkp server subkeys.pgp.net
gpg: key 000BEEEE: public key "Jim Meyering <jim@meyering.net>" imported
gpg: no ultimately trusted keys found
gpg: Total number processed: 1
gpg:               imported: 1  (RSA: 1)
gpg: Signature made Tue 04 Jan 2011 07:04:25 AM PST using RSA key ID 000BEEEE
gpg: Good signature from "Jim Meyering <jim@meyering.net>"
gpg:                 aka "Jim Meyering <meyering@gnu.org>"
gpg:                 aka "Jim Meyering <meyering@redhat.com>"
gpg: WARNING: This key is not certified with a trusted signature!
gpg:          There is no indication that the signature belongs to the owner.
Primary key fingerprint: 155D 3FC5 00C8 3448 6D1E  EA67 7FD9 FCCB 000B EEEE

记住,这并不能告诉你密钥的可信度,但它作为完整性检查是有用的。
(我想知道Jim Meyering在生成那个密钥之前生成了多少个密钥。)

1

我不需要太多,gpg --dry-run(或gpg -n)对我来说已经足够了。我在Mac上通过Homebrew运行gpg 1.4.12,但它似乎是一个标准选项。不知道它与这里提到的其他方法相比如何。


对我来说这行不通(gpg 1.4.16,Linux Mint 17)。gpg --dry-run coreutils-8.9.tar.gz.sig 给出了 "gpg: 无法检查签名:未找到公钥"。 (我的密钥环中没有Jim Meyering的密钥。) - Keith Thompson
嗯,你说得对。两年后,我无法再现它。我尝试了几乎所有的方法,例如 gpg --dry-run --trust-model direct --keyserver-options auto-key-retrieve --auto-key-locate keyserver --keyserver keys.gnupg.net --verify-options pka-lookups --verify coreutils-8.9.tar.gz.sig coreutils-8.9.tar.gz 但它仍然显示 gpg: Can't check signature: public key not found。好吧,我想如果你真的想避免脚本,你可以编写命令来使用临时 home/keyring,并在之后删除它。但 GPG 的目的是建立信任:这就是为什么他们让这个过程变得困难的原因。 - Louis St-Amour
在保护GPG的角度来看,它确实表示“--dry-run”已经实现了一半,这当然是你希望在这种安全功能中看到的。在这里,“dry-run”阻止命令添加到密钥环,这意味着验证永远不会知道要使用哪个密钥(显然)。当我使用它时,我必须已经添加了一个密钥,所以“dry-run”基本上没起到任何作用,我想。 (哦,而verify-options pka-lookups只是添加了额外的检查,不会自动下载……) - Louis St-Amour

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接