【问题标题】:verify gpg signature without installing key在不安装密钥的情况下验证 gpg 签名
【发布时间】:2012-02-02 21:48:52
【问题描述】:

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

谢谢, 弗洛里安

【问题讨论】:

    标签: command-line signature gnupg


    【解决方案1】:

    这是我用于此目的的 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 Meering 在得到那个之前生成了多少个密钥。)

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 这对我不起作用(gpg 1.4.16,Linux Mint 17)。 gpg --dry-run coreutils-8.9.tar.gz.sig 给我“gpg: Can't check signature: public key not found”。 (我的钥匙圈里没有 Jim Meering 的钥匙。)
      • 嗯。你是对的。两年后,我无法重现它。我几乎尝试了每一个,例如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 的重点是建立信任:这就是他们让这变得困难的原因。
      • 在 GPG 的辩护中,它确实说“--dry-run”已经实现了一半,这当然是您希望在这样的安全功能中看到的。在这里,空运行会阻止命令添加到密钥环,这意味着验证永远不知道要使用什么密钥(显然)。当我使用它时,我一定已经添加了一个密钥,所以“试运行”基本上什么也没做,我想。 (哦,verify-options pka-lookups 只是添加了额外的检查,它不会自动下载......)
      猜你喜欢
      • 1970-01-01
      • 2022-06-23
      • 2021-12-18
      • 1970-01-01
      • 2016-06-16
      • 1970-01-01
      • 2021-04-12
      • 2019-10-04
      • 2020-02-12
      相关资源
      最近更新 更多