作者 | Konstantin Ryabitsev
譯者 | kimii ? ? 共計翻譯:9 篇 貢獻時間:125 天
在本系列文章中,我們將深度探討如何使用 PGP 確保軟體完整性。這些文章將為工作於自由軟體專案的開發者提供實用指南,並且將包含以下主題:
我們使用與“Freedom”含義相同的詞項 “Free”,但這個系列中列出的指南也可以被任何其它型別的依賴於分散式團隊開發者貢獻的軟體中。如果你編寫進入公共源倉庫的程式碼,你可以從瞭解和遵循這篇指南中受益。
結構
每節分為兩個部分:
清單優先順序
每個清單中各項包含著優先順序,用來幫助指導你的決定:
記住,這些只是指導。如果你感到這些優先順序不能反映你專案提交的安全,你應該根據自己的需要調整它們。
PGP 基本概念和工具
清單
考慮事項
自由軟體社群長期依賴於 PGP 確保它生產的軟體產品的真實性和完整性。你可能沒有註意到,但無論你是一個 Linux 、Mac 和 Windowas 使用者,你都曾依賴 PGP 來確保你電腦環境的完整性:
這與工作於專有平臺的程式員使用的開發者證書或程式碼簽名機制非常相似。實際上,這兩種技術背後的核心概念非常相似 —— 儘管它們在實現的技術層面和它們委託信任方式的大多不同。PGP 不依賴於集中式認證機構,而是讓每個使用者為每個證書賦予自己的信任。
我們的標的是使你的專案透過使用 PGP 來進行程式碼起源和完整性追蹤,遵循最佳實踐並遵守基本的安全預防措施。
極其基本的 PGP 操作概括
你不需要知道 PGP 如何工作的具體細節 —— 理解核心概念足以成功地達到我們的目的。PGP 依賴於公鑰密碼學來將明文轉換為密文。這個過程需要兩種不同的金鑰:
加密
對加密來說,PGP 使用擁有者的公鑰創造一條只能透過擁有者私鑰解密的訊息:
要解密:
簽名
為了建立簽名,PGP 私鑰或公鑰會以相反的方式使用:
要驗證簽名:
結合使用
通常,加密訊息也被髮送者自己的 PGP 金鑰簽名。無論何時使用加密訊息,這應當是預設的,因為沒有認證的加密沒有很大意義(除非你是一個告密者或秘密代理並且需要可行的可否認性)
理解金鑰身份
每個 PGP 金鑰必須有一個或多個與之關聯的身份。通常,“身份”指的是以下格式中的人物全名和郵件地址:
Alice Engineer <alice.engineer@example.com>
有時也會在括號中包含說明,來告訴終端使用者關於該特定金鑰的更多資訊:
Bob Designer (obsolete 1024-bit key) <bob.designer@example.com>
由於人們可以和多個職業和個人物體相關聯,因此在同一金鑰上可以有多個身份:
Alice Engineer <alice.engineer@example.com>
Alice Engineer <aengineer@personalmail.example.org>
Alice Engineer <webmaster@girlswhocode.example.net>
當使用多個身份時,其中之一將被標記為“primary identity”來讓檢索更簡單。
理解金鑰有效性
為了能使用其他人的公鑰來加密或驗證,你需要確保它確實屬於正確的人(Alice)而不屬於冒牌的(Eve)。在 PGP 中,這被稱為“金鑰有效性”:
Web of Trust (WOT) 與 Trust on First Use (TOFU)
PGP 使用了一種信任委託機制叫“Web of Trust”。它的核心是嘗試替代 HTTPS/TLS 世界中對集中式認證機構的需求。PGP 把這個責任交給了每個使用者,而不是各種軟體開發商來決定誰應該是你的可信認證物體。
不幸的是,很少有人理解 Web of Trust 的是如何工作的,能使用它的人更少。它仍然是 OpenPGP 規範的一個重要方面,但 GnuPG 的近期版本(2.2 及以上)已經實現了一種替代機制叫“Trust on First Use”(TOFU)。
你可以把 TOFU 當作類似 SSH 的信任方式。使用 SSH,當你第一次連線到遠端系統,它的金鑰指紋會被記錄和儲存。如果將來金鑰改變,SSH 客戶端將會提醒你並拒絕連線,迫使你決定是否信任已改變的的金鑰。
同樣,當你第一次匯入某人的 PGP 金鑰,它被假定可信。如果在將來的任何時候,GnuPG 碰巧發現另一同樣身份的金鑰,過去匯入的金鑰和新金鑰都將被標記為無效,並且你需要手動指出保留哪個。
安裝 OpenPGP 軟體
首先,理解 PGP、OpenPGP、GnuPG 和 gpg 之間的不同很重要:
今天,“PGP”這個詞幾乎被普遍用來表示開放的 OpenPGP 標準,而不是最初的商業軟體,因此“PGP”和“OpenPGP”是可以互換的。“GnuPG”和“pgp”這兩個詞應該僅在提及工具時使用,而不用於它們產生的輸出或它們實現的 OpenPGP 功能。舉例:
理解這一點應該可以保護你免受來自你遇到的其他 PGP 使用者“實際上”不可避免的迂腐。
安裝 GnuPG
如果你正在使用 Linux,你應該已經安裝過了 GnuPG。在 Mac 上,你應該安裝 GPG-Suite[1],或者使用 brew
安裝 gnupg2
。在 Windows 上,你應該安裝 GPG4Win[2],並且為了可以工作,你可能需要調整指南中的部分命令,除非你設定了類似 Unix 的環境。對其他平臺來說,你需要自行查詢正確的地址來下載和安裝 GnuPG。
GnuPG 1 vs. 2
GnuPG v.1 和 GnuPG v.2 都實現了同樣的標準,但它們提供不相容的庫和命令列工具,所以許多發行版都帶有了舊的版本 1 和最新的版本 2。你需要確保你總是使用 GnuPG v.2。
首先,執行:
$ gpg --version | head -n1
如果你看到 gpg (GnuPG) 1.4.x
,說明你正使用 GnuPG v.1。嘗試下 gpg2
命令:
$ gpg2 --version | head -n1
如果你看到 gpg (GnuPG) 2.x.x
,說明你可以繼續了。這篇指南將假設你使用 GnuPG 2.2 版本(或更新)。如果你正使用 GnuPG 的 2.0 版本,本指南中某些命令可能無效,你應該考慮安裝 GnuPG 最新的 2.2 版本
確保你總是使用 GnuPG v.2
如果你 gpg
和 gpg2
命令都有,你應該確保總是使用 GnuPG v.2,而不是舊的版本。你可以透過設定別名來確保這一點:
$ alias gpg=gpg2
你可以把它放在你的 .bashrc
中,以確保它在你使用 gpg
命令時總是被載入。
在本系列的第 2 部分中,我們將介紹生成和保護你的 PGP 主金鑰的基本步驟。
透過 Linux 基金會和 edX 的免費“Introduction to Linux” [3]課程瞭解關於 Linux 的更多資訊。
via: https://www.linux.com/blog/learn/2018/2/protecting-code-integrity-pgp-part-1-basic-pgp-concepts-and-tools
作者:Konstantin Ryabitsev[5] 譯者:kimii 校對:wxy
本文由 LCTT 原創編譯,Linux中國 榮譽推出