事實上,我在花了這麼多時間研究這個問題後不得不問這個問題,這一事實已經告訴我,這兩個陳述中至少有一個是正確的:
- 我正在做一些非常錯誤的事情。
- PGP/GPG 絕對是一團糟,故意讓它變得盡可能困難和混亂。
基本上,我的系統會自動匯入發送給我的任何 PGP 公鑰區塊,以便能夠在訊息發出時自動對其進行加密(作為回復由我發送)。
當您使用 PGP/GPG 加密明文訊息時,您告訴程式要使用哪個「接收器」。這個令人困惑的術語實際上指的是儲存在 GPG 中的公鑰中的「全名 + 電子郵件地址」欄位(由於某種原因稱為「使用者名稱」)。
好吧,當我「導入」這樣一個 PGP 公鑰區塊(有效)時,我不知道「用戶名」欄位是什麼,如果我不知道,我實際上無法使用它,因為加密功能希望我引用正確的「儲存的公鑰」。
但是我如何從公鑰中實際提取“用戶名”欄位呢?你可能會認為當你執行 --import 命令時它會返回這個,但據我所知,它不會。我已經在手冊中挖掘了幾個小時,但沒有找到與此相關的任何內容。
作為記錄,我確實找到了這個 StackOverflow 線程:https://security.stackexchange.com/questions/50965/extracting-the-gpg-userid-from-the-public-key-file ……但這對我來說完全沒有意義。 「解決方案」已經知道並指定了某種 id,這似乎違背了整個觀點,因為這本質上就是我們想要找到的(除了它是「用戶名」欄位)。
我見過各種“常見/有用的 PGP/GPG 命令”,但他們都沒有提到這一點。啊?這就像是最基本、最關鍵的任務……我很困惑。為什麼 --import 指令不給我任何類型的 id 來使用?是嗎,但是以某種複雜的方式?
答案1
為什麼 --import 指令不給我任何類型的 id 來使用?是嗎,但是以某種複雜的方式?
確實如此,您對「可用 ID」的期望大多是錯誤的。
當您使用 PGP/GPG 加密明文訊息時,您告訴程式要使用哪個「接收器」。這個令人困惑的術語實際上指的是儲存在 GPG 中的公鑰中的「全名 + 電子郵件地址」欄位(由於某種原因稱為「使用者名稱」)。
此欄位稱為「使用者 ID」。它不稱為“用戶名”。
許多程序(主要是gpg
是包裝它的所有工具)將要也可以僅透過電子郵件地址、使用者 ID 的任何其他子字串比對、完整的 160 位元公鑰指紋或「金鑰 ID」(32/64 位元截斷指紋)接受收件者。例如:
gpg --recipient [email protected] --encrypt
gpg --recipient EA708A76F932CCEAF60D364375F1129BE6E591E4 --encrypt
gpg --recipient "EA70 8A76 F932 CCEA F60D 3643 75F1 129B E6E5 91E4" --encrypt
gpg --recipient fred --encrypt
gpg --recipient 0x75F1129BE6E591E4 --encrypt
(您可以透過將其傳遞給 來測試匹配gpg --list-keys
,例如gpg -k fred
。)
其中,透過指紋指定收件者是最安全的選擇。如果您使用 Web of Trust 或有其他方法來區分合法的「Fred Foobar」金鑰和假冒的「Fred Foobar」金鑰,「使用者 ID」欄位(無論完整或部分)只是一個安全識別碼。
好吧,當我「導入」這樣一個 PGP 公鑰區塊(有效)時,我不知道「用戶名」欄位是什麼,如果我不知道,我實際上無法使用它,因為加密功能希望我引用正確的「儲存的公鑰」。
GnuPG 始終將此欄位顯示為gpg --import
輸出的一部分(以及 64 位元「密鑰 ID」)。例如:
$ gpg --status-fd=2 --import < /tmp/test.key GPG:鑰匙75F1129BE6E591E4:公鑰”測試用戶 <[電子郵件受保護]>」進口的 gpg:處理總數:1 GPG:導入:1
要在自動化工具中使用它,請使用--status-fd
它為您提供完整的 160 位元指紋。例如:
$ gpg --status-fd=2 --import < /tmp/test.key [GNUPG:]IMPORT_OK 0 EA708A76F932CCEAF60D364375F1129BE6E591E4 [GNUPG:] KEY_CONSIDERED EA708A76F932CCEAF60D364375F1129BE6E591E4 0 [GNUPG:] IMPORT_RES 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0
如果您正在使用其他一些 PGP 軟體(即不是 GnuPG)並且它沒有向您顯示有關其剛剛導入的金鑰的任何信息,那麼這是其他 PGP 軟體中的 UI 問題。