提供 asc 文件如何確保我下載了預期的原始碼?
我正在從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文件的連結
我不明白的是:
- 來自同一源 (cmake.org) 的 asc 文件如何確保原始碼的完整性?如果網站提供的原始碼被洩露,攻擊者難道不能同時洩露 asc 文件嗎?
- 我不需要公鑰來真正驗證原始碼下載嗎?我認為 asc 文件應該是公鑰。但是,當我嘗試導入 asc 文件時
gpg --import cmake-3.11.0-rc3-SHA-256.txt.asc
我收到一條錯誤消息,提示“未找到有效的 OpenPGP 數據”
查看文件內部
.asc
,您會看到它以:-----BEGIN PGP SIGNATURE-----
所以這是一個 PGP簽名。這意味著它使用某些特定的 PGP 密鑰對某些內容進行簽名。
- 內容
根據名稱,內容是文件
.txt
,它是與要下載的軟體對應的文件列表,每個文件都有其對應的雜湊值。
- 簽名
如果您同時啟動
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
如果您會收到有關無效簽名的錯誤),因為這樣做他需要有權訪問據說是正確保護的私鑰,而不是無論如何都儲存在網路伺服器上。如果它確實使用另一個密鑰生成它,您會看到它,因為您不會信任這個未知密鑰。但是當然,如果密鑰本身被洩露,整個模型就會崩潰。