Linux 透過 GPG(GNU Privacy Guard)建立了一套基於加密的信任系統,確保軟體包的完整性與來源的可信度。以下是它如何運作的主要機制:
GPG 基於公開密鑰加密(Public Key Cryptography),其中有兩組密鑰:
在軟體包管理中,套件來源(repository)擁有自己的 GPG 私鑰與公開鑰,並利用私鑰簽署他們的軟體包,公開鑰則用於讓客戶端(如 Ubuntu 系統)驗證簽名。
每個套件來源都會使用其私鑰對軟體包進行簽署。簽署是一種將原始資料(例如軟體包的摘要)與私鑰進行運算,生成的簽章(signature)可以唯一識別該包,並保證內容沒有被竄改。當套件來源簽署軟體包時,它同時會提供簽章文件。
當你在 Linux 系統上安裝新軟體或更新套件時,系統中的套件管理器(如 apt)會執行以下驗證:
/usr/share/keyrings/
或 /etc/apt/trusted.gpg.d/
。信任是透過 GPG 金鑰鏈(keyring)來維護的。當你將公開鑰導入系統的 keyring 時,表示你信任該鑰對應的私鑰擁有者。此信任關係確保了你下載的軟體來自可信任的來源。
在新的 Linux 安全最佳實踐中,每個套件來源的公開鑰都被儲存在獨立的 .gpg
檔案中,並且在 /etc/apt/sources.list.d/
中每個 .list
檔案都指向對應的公開鑰,增加了可信任性。這種隔離機制確保不同套件來源之間不會相互干擾,並減少公開鑰被濫用的風險。
鑰匙可能會有過期、被撤銷或輪替的情況。套件管理器有能力檢查這些狀態。當公開鑰不再有效時,需要使用新的鑰來重新驗證,確保系統一直信任最新的密鑰。
透過這樣的機制,Linux 能有效地保證從套件來源下載的軟體包是完整且來自可信的來源,防止中間人攻擊和惡意軟體的注入。
延伸閱讀:使用 GnuPG 確保傳輸重要檔案或文件的過程能確保機密性與完整性 | The Will Will Web
Pop!_OS
)都使用 GPG 來簽署並驗證軟體包和套件來源。pacman
作為套件管理器,並依賴 GPG 來驗證軟體包的完整性。.deb
或 .rpm
軟體包的發行版都使用 GPG 或類似的簽署機制來建立信任系統。FreeBSD 和 OpenBSD: 這些 BSD 發行版有自己的套件管理工具(如 pkg
),並使用 PGP/GPG 簽署來保護軟體包。FreeBSD 的 pkg
工具與 Linux 的 apt
或 yum
類似,並提供套件簽署與驗證功能。
macOS:
Android: Android 使用 APK 簽署機制。每個 APK 文件都必須由開發者的簽署金鑰進行簽署,並在安裝時由系統驗證簽署的完整性。Google Play Protect 進一步加強了應用的安全性。
iOS: iOS 具有非常嚴格的簽署和審核機制。所有應用必須通過 Apple 開發者帳號簽署,並在上架 App Store 之前經過審核。這保證了應用的完整性與安全性,並避免不受信任的軟體執行。