![使用 GPG 验证文件,没有 .sig 或 .asc 文件?](https://linux22.com/image/1361543/%E4%BD%BF%E7%94%A8%20GPG%20%E9%AA%8C%E8%AF%81%E6%96%87%E4%BB%B6%EF%BC%8C%E6%B2%A1%E6%9C%89%20.sig%20%E6%88%96%20.asc%20%E6%96%87%E4%BB%B6%EF%BC%9F.png)
从我对 PGP/GPG 的有限了解来看,验证文件必须具备两点条件:
文件的“签名”(本质上是使用受信任实体的私钥加密的文件的哈希值;通常以
.sig
二进制或.asc
base64 文件的形式分发)。受信任实体的公钥。
它似乎与我使用 看到的示例一致gpg
。但是,当我尝试验证从 GCC 的一个镜像站点下载的文件时,我有点困惑。在镜像站点列表页面 (http://gcc.gnu.org/mirrors.html), 它说:
档案(托管在这些镜像上)将由以下 GnuPG 密钥之一签名:
然后它列出了 6 个可能的键:
1024D/745C015A 1999-11-09 Gerald Pfeifer <[email protected]>
Key fingerprint = B215 C163 3BCA 0477 615F 1B35 A5B3 A004 745C 015A
1024D/B75C61B8 2003-04-10 Mark Mitchell <[email protected]>
Key fingerprint = B3C4 2148 A44E 6983 B3E4 CC07 93FA 9B1A B75C 61B8
1024D/902C9419 2004-12-06 Gabriel Dos Reis <[email protected]>
Key fingerprint = 90AA 4704 69D3 965A 87A5 DCB4 94D0 3953 902C 9419
1024D/F71EDF1C 2000-02-13 Joseph Samuel Myers <[email protected]>
Key fingerprint = 80F9 8B2E 0DAB 6C82 81BD F541 A7C8 C3B2 F71E DF1C
2048R/FC26A641 2005-09-13 Richard Guenther <[email protected]>
Key fingerprint = 7F74 F97C 1034 68EE 5D75 0B58 3AB0 0996 FC26 A641
1024D/C3C45C06 2004-04-21 Jakub Jelinek <[email protected]>
Key fingerprint = 33C2 35A3 4C46 AA3F FB29 3709 A328 C3A2 C3C4 5C06
它提供的只是那些密钥 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 的人可以解释一下验证此文件的最简单方法吗?
答案1
收到 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 <[email protected]>"
gpg: Note: This key has expired!
Primary key fingerprint: 33C2 35A3 4C46 AA3F FB29 3709 A328 C3A2 C3C4 5C06
希望这可以帮助其他试图验证从 GCC 镜像站点之一下载的 tarball 的人。
答案2
您需要 sig 文件。唯一的其他方法是,如果文件本身是“.gpg”并且带有附加签名。如果消息显示“它们将被签名”并且镜像没有 .sig,则 .sig 已从镜像中删除。
您可以使用任何其他镜像来验证签名,只需从其中一个获取 .sig - 除非 .gz 被修改,否则签名仍然适用。