GnuPG 如何信任 keyserver.ubuntu.com?

GnuPG 如何信任 keyserver.ubuntu.com?

據我所知,任何 OpenPGP 憑證的有效性都基於該憑證由信任網路中的受信任方進行驗證。

然而,對於大多數不每天使用 GnuPG 的人來說,他們只會一次性獲得密鑰keyserver.ubuntu.com,並相信它們是準確的。例如當跟隨「如何驗證」指南在 Ubuntu.com 上:

gpg --keyserver hkp://keyserver.ubuntu.com --recv-keys "8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092" "C598 6B4F 1257 FFA8 6632 CBA7 4618 1433 FBB7 5451"

雖然這種溝通會發生透過普通的未加密 HTTP,我相信我們從密鑰伺服器返回的證書將由密鑰伺服器本身簽名,因此只要我們知道密鑰伺服器的可信任證書,我們就可以信任該回應。

但是,基於僅運行此命令一次,我們如何才能信任密鑰伺服器,因為我不相信 GnuPG 會建立檔案trustdb? GnuPG 是否有一個它信任的內建憑證列表,其中包括 的憑證keyserver.ubuntu.com?如果是這樣,我怎麼能找到這個清單來檢查情況是否如此?

如果沒有這個可信列表,我的所有通信是否都可能被同一個中間人 (MITM) 攔截,然後該中間人可能會同時向我提供虛假keyserver.ubuntu.com證書給我一個偽造的簽名包(例如操作系統 ISO 本身)?

答案1

接收密鑰的參數是兩個密鑰的完整指紋:

  • 8439 38DF 228D 22F7 B374 2BC0 D94A A3F0 EFE2 1092
  • C598 6B4F 1257 FFA8 6632 CBA7 4618 1433 FBB7 5451

指紋是根據公鑰計算出來的(I在超級用戶上討論了 OpenPGP 金鑰 ID,如果您想要更多參考)。如果接收到的金鑰的計算指紋與請求的指紋不匹配,GnuPG 將意識到傳回了錯誤的金鑰。換句話說:您可能不信任金鑰伺服器(它們由隨機個人操作,很可能具有惡意目標),但您不必這樣做,從金鑰伺服器收到的所有資訊都必須經過驗證。可能的指紋範圍非常非常大:找到衝突(另一個金鑰的相同指紋)是不可行的,即使您擁有像國家安全局這樣的機構那樣的強大運算能力)。不過,不要相信短密鑰 ID。

基於同樣的原因,在搜尋郵件收件者或使用者 ID 時,您可能不信任金鑰伺服器的結果。密鑰伺服器操作員不僅可以返回惡意訊息,而且密鑰伺服器根本不驗證任何內容(每個人都可以上傳任意郵件地址的密鑰)。您始終必須自己驗證密鑰。GnuPG 中沒有預設信任的金鑰,甚至 GnuPG 維護者的金鑰也是如此。如果您信任列出 Ubuntu 金鑰指紋的來源,您可以對它們進行簽名,以使 GnuPG 知道您驗證了這些金鑰。

還有HKPS(HKP over HTTPs),但是考慮到缺少關鍵伺服器資訊的驗證,這並沒有改變任何東西; HKPS 的引入只是為了讓中間人無法記錄您從金鑰伺服器檢索到的金鑰。

相關內容