Gpg

提供 asc 文件如何確保我下載了預期的原始碼?

  • March 16, 2018

我正在從cmake.org網站安裝 cmake,他們提供了兩個文件,我認為這些文件旨在驗證原始碼下載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 數據”

查看文件內部.asc,您會看到它以:

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

所以這是一個 PGP簽名。這意味著它使用某些特定的 PGP 密鑰對某些內容進行簽名。

  1. 內容

根據名稱,內容是文件.txt,它是與要下載的軟體對應的文件列表,每個文件都有其對應的雜湊值。

  1. 簽名

如果您同時啟動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如果您會收到有關無效簽名的錯誤),因為這樣做他需要有權訪問據說是正確保護的私鑰,而不是無論如何都儲存在網路伺服器上。如果它確實使用另一個密鑰生成它,您會看到它,因為您不會信任這個未知密鑰。

但是當然,如果密鑰本身被洩露,整個模型就會崩潰。

引用自:https://unix.stackexchange.com/questions/430534