登入  |  English
感謝您對「自由軟體鑄造場」的支持與愛護,十多年來「自由軟體鑄造場」受中央研究院支持,並在資訊科學研究所以及資訊科技創新研究中心執行,現已完成階段性的任務。 原網站預計持續維運至 2021年底,網站內容基本上不會再更動。本網站由 Denny Huang 備份封存。
也紀念我們永遠的朋友 李士傑先生(Shih-Chieh Ilya Li)。
源碼秘技 使用 GnuPG 建立你的 PGP 金鑰,讓別人能夠私密寄信給你

使用 GnuPG 建立你的 PGP 金鑰,讓別人能夠私密寄信給你

◎本文原載資訊人權貴,原文章連結按此

捍衛私密通訊權利的最佳方式,就是加密。以簡訊/即時通軟體來說,自由軟體界的大大們共同推薦「支援 OTR 的通訊軟體」;以 e-mail 來說,那就非 PGP 莫屬了。1991 年時,反核運動人士 Phil Zimmermann 為了保護社會運動人士的私密通訊權,撰寫了這套加密軟體並釋出。在 linux 上,我們採用自由軟體基金會所撰寫的版本 Gnu Privacy Guard。你可以用 Gnu Privacy Guard (GnuPG) 建立自己的 PGP 金鑰, 方便別人能夠私密寄信給你。本文假設讀者已有非對稱式加解密的粗略概念,並且在 linux (antix 13.1) 命令列上面操作。如果要使用圖形介面,可安裝 kgpg 套件。至於在 Windows 上,可以參考島民 No.86991066 所寫的一篇很詳盡的中文教學,解釋如何使用 Gpg4win。建議兩三個人同時閱讀本文,並且在各自的電腦上實驗,用對方的公鑰加密一段文字寄給對方。


一、建立金鑰

建議讀者:第一次(沒有要公開的)實驗先不必太認真,隨便取個使用者 ID 與密碼即可。等實驗全程走完,了解所有動作之後,再用強度夠高的密碼重新建立一對真正要用的金鑰。下 gpg --gen-key 指令產生你的一對金鑰。然後你會被問幾個問題:選取金鑰種類(加密演算法)、金鑰長度、有效期限。如果你用的是 linux 或 openbsd 等等開放原始碼的作業系統,都選預設值就可以了。如果你的作業系統是 windows 或 Mac OS... 因為 Snowden 爆料 NSA 在 RSA Windows 的亂數產生器裡,都有植入後門;我猜把 GPG 移植到 windows 與 Mac 的自由軟體人士應該不會那麼不小心上當;不過為了保險起見,還是建議選取「DSA 和 Elgamal」而不要選取「RSA 和 RSA」好了。

再來會被問到真實姓名、電子郵件地址、註釋。回答完這三個問題後,你輸入的資料會被合併成一個字串,也就是你的使用者 ID例如你若分別回答 "史奴比 Snoopy" 、 "snoopy@ somewhere.out.there" 、 "萬人迷" (都不要打引號),那麼你的使用者 ID 就是 "史奴比 Snoopy(萬人迷)「snoopy@ somewhere.out.there」; "。這個字串就像是你自選的一組電話號碼,或是自選的註冊代號,但也要考慮你希望別人如何能夠搜尋到你。所以建議拿你在網路上常用的代號來填「註釋」。(以我而言,當初應該要寫「資訊人權貴」才對。)其實你若不想用真名也沒人會管你;不過「給真名」應該是博取網友信任的重要基礎吧。


二、保管金鑰

在 linux 底下,新建立的金鑰會放在 ~/.gnupg 資料夾裡面。這些檔案請備份好;但不要讓別人任意取得。就把它當做鑰匙來保管咩。

如果你怕未來有一天你忘記密碼,可以趁現在先產生一份「撤消憑證」 revocation certificategpg -o revoke-snoopy.asc --gen-revoke 史奴比把產生出來的 revoke-snoopy.asc 當成像是私鑰一樣地安全保存好。將來真的忘記密碼,需要撤消時,再拿著這個撤消憑證來研究這一篇。 


三、釋出你的公鑰

如同白話非對稱式加解密一文所解釋,你必須把你的公鑰分享出去,別人才能用它加密郵件,寄私密訊息給你。所以請: gpg -ao snoopy.asc --export 史奴比注意:這裡的「史奴比」也可以改用「snoopy」或「snoopy@ somewhere.out.there」等等,總之就是你的使用者 ID 的子字串就可以了。這個匯出 (export) 的動作會產生一個 snoopy.asc 裡面就是你的公鑰。目前你先跟同組的朋友交換就好;等你照著本文重做幾次,覺得很滿意自己所設的使用者 ID 與密碼之後,可以貼在自己的網頁上,甚至上傳到金鑰伺服器昭告天下


四、加解密郵件內容或附加檔案

假設你的朋友查理布朗也建立了他專屬的金鑰,並且把他的公鑰放在 charlie.asc 檔案裡面分享給你。那麼你可以把他納入你的「知道的人」的清單: gpg --import charlie.asc 這個「匯入(import)」的動作,會把他的公鑰加入你的公鑰清單 (pubring),這僅僅表示:「我知道有這一號人物」而已。至於他知不知道你?那就要看他有沒有匯入你的公鑰了。又至於如果你想進一步告訴 gpg 「我信任他」,那就要簽署他的金鑰;不過貴哥並沒有這麼認真地在使用 gpg,所以從來還沒簽署過。以上的匯入及簽署都只需要做一次。

以後要傳送加密郵件, 就很簡單了。 比方說你要把 secret.tgz 這個壓縮檔加密, 並寄給查理布朗, 那麼可以這樣下: gpg -ear 查理布朗 secret.tgz.asc 這會產生一個文字檔 secret.tgz.asc 你可以把它的內容貼到 e-mail 裡面, 寄給查理布朗。 查理布朗收到之後, 再把那段內容在他的電腦裡貼成一個文字檔 secret.tgz.asc 然後就可以 gpg -d secret.tgz 回答完密碼後(全世界只有他知道的密碼),就會得到原始的 secret.tgz。即使你的 e-mail 經過許多網站、就算是 NSA 或黃世銘在這些網站佈下側錄封包的監聽爪牙,也無法看懂你寄的文件:-)以上步驟適用於文字檔或各種二進位檔(壓縮檔/圖片/聲音/影片/執行檔/...)。


五、更多教學文

其實網路上早就有很多教學文;我這篇只是想把整個過程寫得比較白話而已。此外,GPG 也可拿來製作數位簽章。想要更深入學習,可以參考:

  1. GnuPG Gentoo 使用者指南(很詳盡的中文教學文)
  2. Gnu 隐私卫士(GnuPG)袖珍 HOWTO(翻譯自官網的簡體中文版手冊)
  3. GNU PG HOWTOs(官網文件索引, 包含許多文件的各種語言連結)
  4. GPG Tutorial(跟我的文章一樣比較口語化, 但豐富很多的英文教學文)
  5. GnuPG(GPG)In Win32 免費檔案加解密軟體概念與常用指令(中文, 如何在 windows 底下使用指令版)



自由軟體鑄造場電子報 : 第 233 期 自由開源軟體預設的不附隨保證與擔保特性

分類: 源碼秘技