提供 asc 文件如何确保我下载预期的源代码?

提供 asc 文件如何确保我下载预期的源代码?

我正在安装 cmakecmake.org网站,他们提供了两个文件,我认为这些文件旨在验证源代码下载cmake-3.11.0-rc3.tar.gz

在同一页面上,他们有下载链接cmake-3.11.0-rc3-SHA-256.txt文件和一个cmake-3.11.0-rc3-SHA-256.txt.asc文件

我不明白的是:

  1. 来自同一源 (cmake.org) 的 asc 文件如何确保源代码的完整性?如果该网站提供的源代码被泄露,攻击者是否也无法泄露 asc 文件?
  2. 我不需要公钥来真正验证源代码下载吗?我认为 asc 文件应该是公钥。但是,当我尝试使用以下命令导入 asc 文件时

    gpg --import cmake-3.11.0-rc3-SHA-256.txt.asc
    

    我收到一条错误消息“未找到有效的 OpenPGP 数据”

答案1

查看.asc文件内部,您会看到它以以下内容开头:

 -----BEGIN PGP SIGNATURE-----

所以这是一个 PGP签名。这意味着它使用某些特定的 PGP 密钥对某些内容进行签名。

1)内容

从名称来看,内容就是文件.txt,它是要下载的软件对应的文件列表,每个文件都有其对应的哈希值。

2)签名

如果您gpg在这两个文件上启动,结果如下:

$ gpg --verify cmake-3.11.0-rc3-SHA-256.txt.asc cmake-3.11.0-rc3-SHA-256.txt
gpg: Signature made Fri Mar  9 10:29:10 2018 EST
gpg:                using RSA key 2D2CEF1034921684
gpg: Can't check signature: No public key

那么这一切是如何运作的呢?您应该2D2CEF1034921684在本地钥匙串中有钥匙。你如何获得它,更重要的是你要确保你得到正确的一个? (id 本身是不够的)。这就是 OpenPGP 信任模型网络发生的地方。这里详细说明太长了,但简而言之,理想情况下,您可以访问带外密钥,并且您有办法对其进行身份验证...或者对您知道的某个人的其他密钥进行身份验证,而该人本身已经验证了另一个密钥。和/或您可以在一个或多个地方在线找到它,并通过 HTTPS(使用您信任的证书和 CA)进行保护,并且最好使用 DNSSEC。

如果您拥有公钥,并且您相信它是好的并且不是伪造的(并且通常它对应于您尝试下载的工具的软件开发人员),则上述命令会显示文件.txt尚未被篡改。反过来,这会为您提供所有存档文件的哈希值,因此您可以下载它并重新运行哈希算法(文件名中写入的 SHA256)并将其与文件中存储的值进行比较。

如果有人破坏了服务器并更改了一些档案,正如您自己所说,它也可以.txt使用新的哈希值更改文件,这样您就可以相信文件确实匹配。然而,该第三方将无法生成.asc带有 PGP 签名的正确文件(此时gpg --verify您会收到有关无效签名的错误),因为要做到这一点,他需要访问私钥,而该私钥被认为是受到适当保护的,而不是私钥。无论如何都存储在网络服务器上。如果它确实使用另一个密钥生成它,您将看到它,因为您不会信任这个未知密钥。

当然,如果密钥本身被泄露,整个模型就会崩溃。

相关内容