PGP Suite

產生金鑰對、加密一則訊息、解密一則訊息、為一段文字簽署讓任何人都能證明它來自你、驗證別人傳來的簽章、在信任一把金鑰之前先檢查它——人們實際開啟 GnuPG 要做的五件事,不用命令列。全部操作都在本瀏覽器分頁內本機執行:你的私鑰和通關密語從不上傳、從不記錄、從不離開你的裝置,因為一個讓你把私鑰貼到伺服器上的工具,已經輸掉了它唯一重要的考試。關掉分頁,金鑰隨之消失——離開之前先保存你產生的東西。

產生金鑰對

Curve25519 是現代預設選擇:金鑰小、運算快,也是目前 GnuPG 為新金鑰所做的選擇。只有當對方工具老到需要它時才選 RSA-4096。通關密語用於加密靜止狀態下的私鑰——只要你打算把金鑰存到任何地方,就設一個。

通關密語從不離開這個分頁。設了又忘記,私鑰便無法復原——我們不行,任何人都不行。

加密訊息

貼上收件人的公鑰和訊息。只有相符的私鑰能打開加密結果,所以密文可以經由你不信任的渠道傳送。

解密訊息

貼上你的私鑰、它的通關密語,以及加密訊息。明文只出現在這裡,別處不會出現——它不會被儲存,關分頁之前先複製好。

簽署與驗證

明文簽章讓訊息保持可讀,同時讓任何持有你公鑰的人都能證明它出自你手且未被改動。在左側用你的私鑰簽署;在右側用簽署者的公鑰驗證一則已簽署訊息。

檢查金鑰

在用別人給你的金鑰加密之前,先看看它:它聲稱屬於誰、用的什麼演算法、何時建立、是否過期,以及要在帶外比對的指紋——透過電話、當面、任何不是遞送金鑰那個渠道的方式。

本工具由 OpenPGP.js 驅動,未經修改,依 GNU 寬通用公共授權 v3.0 或更高版本(LGPL-3.0-or-later)使用。完整原始碼見 OpenPGP.js 倉庫。

為什麼這件事在瀏覽器裡做,以及它做不到什麼

PGP 存活了三十年,是因為它的信任模型不需要伺服器:金鑰由其所有者產生,加密在寄件人的機器上完成,解密在收件人的機器上完成。每一個打破這種形態的網頁表單——上傳你的私鑰、我們來幫你解密——都重新引入了 PGP 本要移除的中間人,所以本套件反其道而行:OpenPGP.js 程式庫作為程式碼下載一次,然後你的金鑰、通關密語、明文和密文都由這段程式碼在你的分頁中處理,從不傳輸。這裡同樣沒有帳戶、沒有金鑰託管。在上方產生的金鑰,在你保存之前只存在於它出現在其中的文字框裡;誠實的工作流程是:下載兩半,把私鑰存放於加密的地方,把公鑰發布到人們會找你的地方,並把任何聲稱「幫你線上保管金鑰」的服務當作威脅而非補救。配套指南不用命令列的 PGP 加密完整走了一遍這套流程,包括在第一則訊息之前如何核對指紋。

誠實的限制與功能同樣重要。本頁面只製作明文簽章——它不為檔案做分離簽章,也不加密檔案,因為檔案工具同樣絕不能上傳其輸入,那值得單獨一頁,而不是臨時拼湊。它不管理金鑰環、不從金鑰伺服器取鑰、也不檢查撤銷:在這裡檢查的金鑰就是貼進來的那把金鑰,其指紋才是要在別處核對的部分。它也救不回遺失的通關密語——沒有復原機制,這是設計使然。在套件周圍,相鄰的工具負責相鄰的工作:憑證與金鑰配對器為 TLS 憑證做同樣的配對檢查,密碼產生器能產生你的私鑰值得擁有的強而唯一的通關密語——兩者和本頁面一樣,都不讓任何東西離開你的瀏覽器。

常見問題

把私鑰貼到這裡真的安全嗎?

在本頁面,是的——理由是架構性的,不是口頭承諾。本頁面在解密或簽署時不發出任何網路請求:OpenPGP.js 程式碼在你的瀏覽器分頁中執行,金鑰在記憶體中使用,從不傳輸、儲存或記錄。你可以自己驗證:載入頁面、斷網,一切照常運作。這與伺服器端的「線上 PGP」表單是完全不同的物種——在那裡,金鑰真的會去到別人的機器上;凡是要緊的金鑰,永遠不要那樣用。

Curve25519 還是 RSA-4096 — 應該產生哪種?

新用途一律選 Curve25519。它是目前 GnuPG 與 OpenPGP.js 的預設,金鑰和簽章都要小得多,產生是即時的,而不是幾秒鐘的質數搜尋,也沒有 RSA 弱參數的坑。RSA-4096 在這裡是為相容而留的:非常老的郵件外掛、遺留的 HSM 工作流程和少數企業工具仍然讀不了橢圓曲線金鑰。如果你不確定自己需不需要 RSA,那就是不需要。

忘了私鑰通關密語會怎麼樣?

金鑰就此遺失。通關密語加密的是私鑰材料本身,沒有它,任何人都做不了這道數學題——本站做不到(它從未見過通關密語)、OpenPGP.js 做不到、GnuPG 也做不到。這種不可挽回正是安全機制在按設計運作。產生一對新金鑰、發布新公鑰;如果失去存取的代價很大,把通關密語存進密碼管理器——用同類本機工具產生,而不是靠記憶重複使用。

驗證說簽章不符。這是什麼意思?

這意味著你面前的訊息與被簽署的訊息不是逐位元相同的那一則——或者簽章塊本身在傳輸中被損壞了。郵件用戶端和聊天工具會重新折行、轉換破折號、吞掉行尾空白,而明文簽章覆蓋的是確切的位元組,所以傳輸損壞是最常見的原因;故意改動在驗證者看來與此完全一樣,這正是簽署的意義所在。請對方以檔案附件形式重傳訊息;若內容要緊,再透過帶外渠道比對指紋。

能用我已有的金鑰嗎 — 來自 GnuPG、Mailvelope 或金鑰伺服器的?

可以。匯出 ASCII 裝甲塊(公鑰用 gpg --armor --export [email protected],私鑰用 --export-secret-keys),貼到本頁面的任何位置即可;檢查器也能讀取其他 OpenPGP 軟體產生的金鑰,因為格式是標準,而不是本站的發明。反之亦然:在這裡產生的金鑰能乾淨地匯入 GnuPG 及每個相容用戶端,所以你在這裡做的任何東西都不會把你鎖死。