在没有 .sig 或 .asc 文件的情况下使用 GPG 验证文件?

eth*_*ice 5 pgp gnupg

根据我对 PGP/GPG 的有限了解,必须有两件事来验证文件:

  • 文件的“签名”(本质上是使用受信任实体的私钥加密的文件的散列;通常作为.sig二进制文件或.ascbase64 文件分发)。

  • 受信任实体的公钥。

它似乎与我使用gpg. 但是,当我尝试验证从 GCC 的镜像站点之一下载的文件时,我有点困惑。在镜像站点列表页面 ( http://gcc.gnu.org/mirrors.html ) 上,它说:

档案(托管在这些镜像上)将由以下 GnuPG 密钥之一签名:

然后它列出了 6 个可能的键:

1024D/745C015A 1999-11-09 Gerald Pfeifer <gerald@pfeifer.com>
Key fingerprint = B215 C163 3BCA 0477 615F 1B35 A5B3 A004 745C 015A

1024D/B75C61B8 2003-04-10 Mark Mitchell <mark@codesourcery.com>
Key fingerprint = B3C4 2148 A44E 6983 B3E4 CC07 93FA 9B1A B75C 61B8

1024D/902C9419 2004-12-06 Gabriel Dos Reis <gdr@acm.org>
Key fingerprint = 90AA 4704 69D3 965A 87A5 DCB4 94D0 3953 902C 9419

1024D/F71EDF1C 2000-02-13 Joseph Samuel Myers <jsm@polyomino.org.uk>
Key fingerprint = 80F9 8B2E 0DAB 6C82 81BD F541 A7C8 C3B2 F71E DF1C

2048R/FC26A641 2005-09-13 Richard Guenther <richard.guenther@gmail.com>
Key fingerprint = 7F74 F97C 1034 68EE 5D75 0B58 3AB0 0996 FC26 A641

1024D/C3C45C06 2004-04-21 Jakub Jelinek <jakub@redhat.com>
Key fingerprint = 33C2 35A3 4C46 AA3F FB29 3709 A328 C3A2 C3C4 5C06 
Run Code Online (Sandbox Code Playgroud)

它提供的只是那些密钥 ID 和指纹(不是实际的密钥本身),页面上(或任何镜像,甚至 4.8.0 tarball 中)都没有.sig/.asc签名文件。

我的问题:我应该如何在没有签名文件且不了解公众的情况下验证这个 tarball(http://gcc.petsads.us/releases/gcc-4.8.0/gcc-4.8.0.tar.gz)密钥,或者不知道 6 个密钥中的哪一个可能已用于对文件进行签名?对GPG有更多了解的人能否解释一下验证此文件的最简单方法?

eth*_*ice 9

从 GNU/GCC 团队收到了关于此的解释,由于文件复制到镜像服务器时出错,.sig 文件丢失。来自团队:

有趣的是,.sig 文件仅在 GNU 服务器上(例如,http : //ftp.gnu.org/gnu/gcc/gcc-4.8.0/)而不在 GCC 服务器上(例如,ftp://gcc .gnu.org/pub/gcc/releases/gcc-4.8.0/)。由于后者由镜子使用,因此它在镜子上也不可用。

我按照他们的建议在 GNU 服务器上找到了 .sig 文件,但后来不得不再挖掘一些才能找到实际验证签名所需的“GNU 密钥环文件”。总而言之,验证过程是:

$ wget http://www.netgull.com/gcc/releases/gcc-4.8.0/gcc-4.8.0.tar.gz
$ wget http://ftp.gnu.org/gnu/gcc/gcc-4.8.0/gcc-4.8.0.tar.gz.sig
$ wget ftp://ftp.gnu.org/gnu/gnu-keyring.gpg
$ gpg --verify --keyring ./gnu-keyring.gpg ./gcc-4.8.0.tar.gz.sig

gpg: Signature made Fri 22 Mar 2013 08:32:29 AM CDT using DSA key ID C3C45C06
gpg: Good signature from "Jakub Jelinek <jakub@redhat.com>"
gpg: Note: This key has expired!
Primary key fingerprint: 33C2 35A3 4C46 AA3F FB29  3709 A328 C3A2 C3C4 5C06
Run Code Online (Sandbox Code Playgroud)

希望这有助于其他任何人尝试验证从 GCC 的镜像站点之一下载的 tarball。

  • 您应该考虑对这些 wget 命令使用 HTTPS (2认同)