如何验证 gpg 签名是否与公钥文件匹配?

2024-02-25

我知道如何使用 gpg 验证,如下所示:

$ gpg --verify somefile.sig
gpg: Signature made Tue 23 Jul 2013 13:20:02 BST using RSA key ID E1B768A0
gpg: Good signature from "Richard W.M. Jones <[email protected] /cdn-cgi/l/email-protection>"
gpg:                 aka "Richard W.M. Jones <[email protected] /cdn-cgi/l/email-protection>"
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: F777 4FB1 AD07 4A7E 8C87  67EA 9173 8F73 E1B7 68A0

但我真正想做的是根据特定的公钥文件验证该文件。

其动机是作为从网站下载大文件的程序的一部分,并且需要在使用它们之前验证它们没有被篡改。该网站将包含文件和签名。该程序将附带 GPG 公钥。当我将文件上传到网站时,我将使用相应的私钥(显然未分发)对它们进行签名。看起来该程序应该能够执行以下操作:

gpg --no-default-keyring --verify file.sig \
    --is-signed-with /usr/share/program/goodkey.asc

But gpg没有这样的选择。看起来唯一的方法是解析打印输出gpg命令看起来非常不安全(它包含由攻击者控制的文本)。

编辑:我不知道这里回答自己的问题的礼仪是什么,但我找到的答案是使用 --status-fd 标志。该标志生成很好的可解析输出,我可以检查所需的指纹:

gpg --status-fd <N> --verify file.sig

在 fd N 上产生:

[GNUPG:] SIG_ID rpG8ATxU8yZr9SHL+VC/WQbV9ac 2013-07-23 1374582002
[GNUPG:] GOODSIG 91738F73E1B768A0 Richard W.M. Jones <[email protected] /cdn-cgi/l/email-protection>
[GNUPG:] VALIDSIG F7774FB1AD074A7E8C8767EA91738F73E1B768A0 2013-07-23 1374582002 0 4 0 1 2 00 F7774FB1AD074A7E8C8767EA91738F73E1B768A0
[GNUPG:] TRUST_UNDEFINED

例如,perl 的 GnuPG 库就是这样工作的。


使用特定公钥文件(如密钥环)的唯一方法是该文件采用 GPG (OpenPGP) 文件格式而不是 ASCII 装甲版本(例如 pubkey.gpg 而不是 pubkey.asc)。

所以这将验证该文件:

gpg --no-default-keyring --keyring /path/to/pubkey.gpg --verify /path/to/file.txt.gpg

这不会:

gpg --no-default-keyring --keyring /path/to/pubkey.asc --verify /path/to/file.txt.gpg

编辑:对于超级用户网站上的类似问题,我对此进行了更详细的介绍:

https://superuser.com/questions/639853/gpg-verifying-signatures-without-creating-trust-chain/650359#650359 https://superuser.com/questions/639853/gpg-verifying-signatures-without-creating-trust-chain/650359#650359

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何验证 gpg 签名是否与公钥文件匹配? 的相关文章

  • 如何选择 maven-gpg-plugin 用于签署工件的 GnuPG 密钥?

    我正在使用 maven gpg plugin 来签署 Maven 工件 这工作正常 但我的 GnuPG 密钥环中有几个密钥 并且想要使用与 GnuPG 选择的密钥不同的密钥 如果有多个键 GnuPG 如何选择 默认 键 是否可以指定在 ma
  • 使用 Python 对多部分电子邮件进行 PGP 签名

    我目前正在尝试添加 PGP 签名支持我的小电子邮件发送脚本 它使用 Python 3 x 和python gnupg模块 签署消息的代码是 gpg gnupg GPG basetext basemsg as string replace n
  • 查看 Maven 工件上的 PGP 签名

    我想手动验证来自 Central 的 Maven 工件上的 PGP 签名 但我不知道从哪里开始 我在 Apache 上看到将工件上传到中央存储库的指南它说 我们要求您为所有工件提供 PGP 签名 我看到 Sonatype 的 Nexus P
  • 在 ruby​​ gpgme 中使用密码回调

    我正在使用 ruby gpgme gem 1 0 8 我的密码回调未被调用 def passfunc args fd args last io IO for fd fd w io puts mypassphrase io flush end
  • 如何在Ubuntu上验证Github? git: 'credential-netrc' 不是 git 命令

    I read this我已经检查了我的凭据 但仍然无法 git Push git push set upstream origin master git credential netrc is not a git command See g
  • Python - GPG 解密有效,但 GNUPG 无效

    我正在使用 pythons gnupg 来解密我用 python 下载的文件 gpg gnupg GPG gnupghome home myname gnupg with open updates filelist i r as f pri
  • 如何在Windows中的jcenter bintray中生成gpg签名密钥

    I am unable to get GPG signing keys Please any one tell me Thanks How to generate gps signing keys in windows for jcente
  • 让 BouncyCastle 解密 GPG 加密的消息

    如何让 BouncyCastle 解密 GPG 加密的消息 我已经在 CentOS 7 命令行中使用以下命令创建了 GPG 密钥对gpg gen key 我选择 RSA RSA 作为加密类型 并使用导出密钥gpg export secret
  • gpg2 导入 gpg1 密钥失败(gpg 2.1.15、Ubuntu 17.10)

    当我尝试使用 gpg2 导入导出良好的 gpg1 密钥时 公钥导入工作正常 gpg import path to publickey gpg gpg directory home me gnupg created gpg new confi
  • gpg:找不到 keyblock 资源 pubring.kbx,因为存储库路径以 gnupg home 为前缀

    我曾经让我的提交由 gpg 签名 一切正常 但我突然收到了这条消息 gpg keyblock resource c Users username path to project C Users username gnupg pubring
  • 如何使用 gpg 命令行检查密码是否正确

    我正在尝试使用自动化备份duplicity 但是当我测试结果时 我得到 gpg 公钥解密失败 密码错误 我想检查我使用的密码是否实际上是与相应 gpg 密钥关联的密码 但无论如何我在 gpg 命令行选项中都看不到 不要加密或解密任何内容 只
  • 使用 OpenPGP 子项签名提交失败

    我想使用我的 GPS 2 子项之一在 Git 中签署提交 标签 即 我新创建的 RSA4096 仅签名密钥 其长 ID B0 sec ed25519 9F 2016 01 07 expires 2023 01 05 Key fingerpr
  • 使用 C# 命令行 GPG 解密 - 密码?

    我正在使用命令行来加密我发送的文件 但我正在尝试找出如何使用相同的方法来解密它们 如果我运行该命令 系统会提示输入密码 但我看不到使用命令行传递密码的方法 这是我加密文件的方法 var proc new Process proc Enabl
  • gpg --homedir 更改目录不起作用

    我们有一台 Windows Server 2008 R2 服务器 我们安装了 gpg4win 并且它可以工作 我们可以创建公钥和私钥 并为那些拥有我们的公钥的人解密消息 问题 gnu 安装默认为我的用户配置文件 我们希望它位于通用配置文件下
  • 无法使用 gpg-agent 作为 ssh 代理

    我一直在尝试让 gpg agent 作为 ssh 代理工作 但没有任何运气 我正在运行 Linux Mint Sarah 的 KDE 版本 首先 我在 etc X11 Xsession options 中禁用了内置 ssh 代理 Id Xs
  • PHP gnupg'导入失败'

    我一直在尝试在 PHP 中使用 gnupg 来加密将上传到 ftp 文件夹的文件 我目前正在使用 MAMP 在 mac 上运行 并且我相信 gnupg 已正确安装 我有来自文件接收者的公钥 当我尝试导入该密钥 无论是作为字符串文字还是从文本
  • 将 OpenPGP 签名添加到已签名的文档中? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 我们想要实现一个需要多人对文档进行数字签名的工作流程 如果我自己的钥匙串中有多个秘密密钥 我可以做一些简单的事情 gpg sign u userid1
  • Erlang - 导入 GPG 公钥

    我正在尝试在 Erlang 中做一些与公钥相关的事情 它们要求我跟踪公钥 根据这一页 http www erlang org doc apps public key using public key html id61611 我应该能够通过
  • 有没有办法让 gpg 签署所有以前的提交?

    正如标题所示 我正在寻找一种方法来 gpg 签署存储库中我以前的所有提交 最好不要为每次提交输入密码 我的方法是 git rebase exec git commit amend no edit n S i 8fd7b22 所有提交从下一个
  • 如何将pgp私钥传输到另一台计算机? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 I read 本文 http www robertsosinski com 2008 02 18 working with pgp and mac o

随机推荐