我正在安装 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文件
我不明白的是:
- 来自同一源 (cmake.org) 的 asc 文件如何确保源代码的完整性?如果该网站提供的源代码被泄露,攻击者是否也无法泄露 asc 文件?
我不需要公钥来真正验证源代码下载吗?我认为 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
您会收到有关无效签名的错误),因为要做到这一点,他需要访问私钥,而该私钥被认为是受到适当保护的,而不是私钥。无论如何都存储在网络服务器上。如果它确实使用另一个密钥生成它,您将看到它,因为您不会信任这个未知密钥。
当然,如果密钥本身被泄露,整个模型就会崩溃。