使用 gpg 验证下载的文件

信息安全 gnupg 打开pgp
2021-09-12 21:42:29

我正在尝试按照说明在此处验证下载的文件:

http://www.pps.univ-paris-diderot.fr/~jch/software/pgp-validating.html

获取签名密钥的本地副本

您需要知道要确认的密钥的密钥 ID。如果您使用的是 ASDF-Install,ASDF-Install 将抱怨未知密钥,并告诉您 ID。否则,下载 tarball 和签名文件,并将签名文件传递给 GnuPG:

gpg cl-yacc-0.2.tar.gz.asc
GnuPG will complain about an unknown key, and tell you the ID. At that point, do

gpg --recv id
to download a local copy of the key.

我正在尝试验证下载的文件:

libevent-2.0.22-stable.tar.gz

我有这个签名文件:

libevent-2.0.22-stable.tar.gz.asc

按照上面的步骤,这就是我得到的:

~/Downloads$ gpg libevent-2.0.22-stable.tar.gz.asc 
gpg: assuming signed data in 'libevent-2.0.22-stable.tar.gz'
gpg: Signature made Mon Jan  5 08:16:20 2015 MST using RSA key ID 8D29319A
gpg: Good signature from "Nick Mathewson <nickm@alum.mit.edu>" [unknown]
gpg:                 aka "Nick Mathewson <nickm@wangafu.net>" [unknown]
gpg:                 aka "Nick Mathewson <nickm@freehaven.net>" [unknown]
gpg:                 aka "[jpeg image of size 3369]" [unknown]
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: B35B F85B F194 89D0 4E28  C33C 2119 4EBB 1657 33EA
     Subkey fingerprint: EF00 F369 1387 FCC5 8CD6  8E13 9103 97D8 8D29 319A

~/Downloads$ gpg --recv 8D29319A
gpg: requesting key 8D29319A from hkps server hkps.pool.sks-keyservers.net
gpg: key 165733EA: "Nick Mathewson <nickm@alum.mit.edu>" not changed
gpg: Total number processed: 1
gpg:              unchanged: 1

接下来,它说:

从独立来源确认密钥

您现在需要确认来自独立来源的密钥,即既不是签名文件也不是密钥服务器。

了解更多关于钥匙的信息

有了您感兴趣的密钥的 ID,在您最喜欢的密​​钥服务器界面上检查密钥(选择“详细索引”)。您将找到签署密钥的人以及签署该密钥的人的所有 uid(电子邮件地址)。

据我所知,带有您感兴趣的密钥 ID 的短语是指:8D29319A. 无论如何,我尝试在该链接的密钥服务器界面中输入每个数字、指纹和 ascii 装甲公钥,但我只是在一个又一个异常中得到异常。

我究竟做错了什么?

$ gpg --version
gpg (GnuPG/MacGPG2) 2.0.28
libgcrypt 1.6.3
Copyright (C) 2015 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Home: ~/.gnupg
Supported algorithms:
Pubkey: RSA, RSA, RSA, ELG, DSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
        CAMELLIA128, CAMELLIA192, CAMELLIA256
Hash: MD5, SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
$
2个回答

你没有做错什么。签名正确,但 GnuPG 无法验证密钥的有效性,因此该签名被视为无效。换句话说,GnuPG 向您解释,虽然签名是由完全有效的密钥颁发的,但密钥可能由任何人颁发(您可以为任意邮件地址创建密钥,没有中央实例验证它们,尤其是密钥服务器不这样做!)。

现在你有两个选择:

  • 您可以尝试通过信任网络验证密钥(这意味着从您已经信任的密钥到作者的密钥中找到“信任路径”,并且还将删除“未验证”消息)或
  • 通过其他方式进行验证,例如通过将指纹或至少长密钥 ID 与另一个受信任的来源进行比较(短密钥 ID 不安全,因此不要使用它们来验证密钥)。这基本上意味着您有另一个受信任的来源(基本验证将通过产品的网站列出密钥 ID/指纹,因为它至少是通过使用 HTTPs 的加密连接接收的)以及 GnuPG 用于签名的公钥输出:

    Primary key fingerprint: B35B F85B F194 89D0 4E28  C33C 2119 4EBB 1657 33EA
    

    (长键 ID 为后 16 个字符21194EBB165733EA,短 ID 为后 8 个字符165733EA)。

对真正问题的简单回答:在搜索字符串中使用十六进制表示法。

看来你的想法是对的:

据我所知,带有您感兴趣的密钥 ID 的短语是指:8D29319A。

您需要使用0x8D29319A搜索框中的链接在链接站点或其他密钥服务器界面上搜索该 ID 该网站没有这样说,尽管其他人这样做,并且您遵循的说明没有具体说明。gpg为检索密钥而访问的站点有一个基于 Web 的界面,它确实说在按 ID 搜索密钥时使用十六进制表示法。

顺便说一句:无论何时使用明显的,甚至可能的十六进制值;如果一种方法不起作用,请尝试在数字前加上“0x”并再次测试。

正如您遵循的说明所述,您的下一步是从独立来源确认密钥。从链接的密钥服务器获取信息背后的想法是找到被质疑证书的其他签名者,并尝试找到一条从您信任的人到信任新密钥的人的信任路径。缺乏您可以尝试与密钥签名者进行“带外”联系以验证它。(面对面当然是最好的方法。验证密钥需要走多远取决于您的判断,以及您的情况的安全需求。

在你的努力中得到光明的祝福。