2014-12-02

[圖文教程] 在openSUSE下玩轉GPG

關於這個話題最早首先是瑪格麗特·蘇在微博上貼圖求助,同時也讓我有興趣好好去了解了解,特別是當時我又感興趣於GPG與智能卡的交互。後來我曾在2014年openSUSE.Asia Summit上做過一個workshop,但效果不是很好,很多朋友覺得講的不夠細緻,確實,GPG的命令行操作對初學者比較難,上手困難。

後來我就花費了一些時間考察了常用的一些GPG圖形前端,最終選定了本文我要介紹的這個軟體——Kleopatra。沒錯,名字就是來源於「埃及豔后」克里奧佩特拉(Cleopatra)。我選定Kleopatra有幾個原因,第一是因為它比較簡潔明了,容易上手。第二是因為功能豐富,除了常用的GPG/OpenPGP密鑰操作以外,還支持x509個人證書等。第三是通用性,Kleopatra可以在包括Linux/BSD/Windows等操作系統上使用,Windows可以通過安裝gpg4win來安裝Kleopatra,這一點就超過了同樣非常強大也非常簡潔的GNOME Seahorse和Kgpg。

本文力求簡明扼要地講述如何在openSUSE下玩轉GPG(其他Linux發行版、BSD和Windows也可以應用本文所有例子),力求一句話講明與GPG相關的一些概念和操作,比如常用的加密/解密以及文件和密鑰的簽名及其校驗。關於與電子郵件的結合,我會推薦使用Thunderbird+Engimail的組合,但不會過多詳述。

相關概念

  • PGP (Pretty Good Privacy):可以簡單理解為是一種數據加密解密和驗證的應用程序。使用散列演算法。此軟體是閉源商業軟體。
  • OpenPGP:這是一種數據加密演算法的開放標準,也就是一種加密協議(RFC 4880)。而PGP也是這個標準的實現之一。
  • GnuPG(GPG):是OpenPGP標準的開源實現,使用GPL協議的自由軟體。
  • 散列演算法(Hashing,哈希演算法):可以簡單理解為是對一段數據(可能是文件、也可能是流)取其摘要的數學運算方法,這種運算有個特性,就是不可逆性,無法根據已經摘要的數據(即哈希值或散列值)恢復成原數據。常用的散列演算法有MD5、SHA-1、SHA-256、SHA-512等等。可以用這種演算法來驗證數據的一致性,也可為數據生成數字指紋。
  • 非對稱加密:先來說「對稱加密」,就是在加密和解密過程中使用的是相同的密鑰。而非對稱加密,就是在加密和解密的過程中使用的是不同的密鑰。一個公鑰,一個私鑰。使用公鑰加密,使用私鑰解密,因為公鑰只是用來加密,甚至可以隨處散播。而私鑰就必須妥善且私密的保管好,否則就無法解密了。同時私鑰還可以用來對文件進行數字簽名,也就是對文件或信息生成一個散列值,若文件在傳輸過程中發生更改,再做散列操作以後,這個值就變了,這樣就有了形似古時通信用「封印」的效果。我們常用的非對稱加密演算法有DSA和RSA等。

安裝 Kleopatra

這個軟體包一般在kdeim組件包內,有些發行版會單獨打包,比如OpenMandriva/Debian/Ubuntu,可以單獨安裝Kleopatra包。若沒有可以從源碼編譯。

Windows用戶可以選擇安裝gpg4win這個軟體,選擇下載完整版包含Kleopatra的就行。Mac OS 用戶可以安裝gpgtool,但只有命令行版。

創建個人openPGP密鑰對

打開 Kleopatra 之後選擇文件—>新建認證,打開新建認證對話框。可以看到有兩個大按鈕,因為Kleopatra除了支持常用的OpenPGP協議以外,還可以用來生成個人站點x509證書。這裡我們選擇「創建個人 OpenPGPG 密鑰對」

然後填入個人信息。特別注意名字和郵件地址不要填錯。注釋建議留空。之後我們按「高級設置」按鈕,配置更多選項。

在這個高級設置對話框中,我們可以選擇生成的演算法,保持默認的RSA即可。為了更高的安全性,我們選擇4096比特,這是目前gpg支持的最大位數,也是最安全的。另外就是證書有效期(也就是密鑰的有效期),這裡注意,為了安全起見,也為了防止密鑰丟失造成的損失,這裡推薦還是為密鑰增加有效期,一般三年左右就行。這並不是不可修改的,還可以修改,建議逐年增加。如圖所示:

然後選「下一步」。之後會有個確認信息,確認生成的密鑰對是否如你所願,特別注意名稱和電子郵件地址不要寫錯。然後點選「創建密鑰」按鈕。

在創建密鑰的過程中,會要求你輸入一個密碼,這個密碼是個密鑰的本地密碼,強烈建議設置一個密碼,不要為空!假設你的私鑰丟失,落入他人之手,因為他沒有此密碼,也無法使用你的私鑰。

密鑰被創建以後,可以看到一個密鑰的指紋,此指紋是對密鑰對進行散列演算法得到一個為了便於記憶和識別的編碼。這裡可以點選生成密鑰對的副本,也可以郵件發送證書,目前不建議把證書(這裡其實是你的公鑰)上傳到伺服器。

如圖所示,綠色陰影所在的密鑰就是剛剛生成的密鑰對。

雙擊此密鑰可以獲得密鑰相關的細節。我們可以對其進行修改,修改好之後可以選擇上傳到密鑰伺服器,這裡只會上傳公鑰,這樣可以有更多人知道你的GPG公鑰。之後別人就可以根據你的GPG公鑰,給你發送加密信息了。

導入導出密鑰

導出公鑰的操作非常簡單,只要在主界面上選中預導出的密鑰,然後再按上面的「導出證書」按鈕,之後就可以把此公鑰另存到另一個地方了。也可以把此公鑰發送給別人,也可以放到自己的網站供人下載上等等。可以下載我的個人公鑰,在我個人網站的右側欄里可以找到下載我GPG公鑰的地方(如下圖)。

在預導出的密鑰上點右鍵,還有一個操作是「導出到密鑰伺服器」,這會將公鑰上傳到公共的密鑰伺服器上,這樣大家下載起來也就更方便了。特別提醒,導出到伺服器的公鑰不能修改和刪除,請確定你檢查沒問題了再上傳。

若想導出公鑰和私鑰,可以在預導出的密鑰上選右鍵,選擇「導出私密證書」(也就是私鑰),之後選擇要導出的位置,建議勾選「ASCII形式」可提高一些安全性。這個操作還會把子密鑰也一起導出(如果有的話)。

導入操作也很簡單,直接點選主界面上的「導入證書」,之後選擇你要導入的密鑰備份文件即可。

如何導入公共密鑰伺服器中別人的公鑰呢?只需點選在”在伺服器上查詢證書”,在彈出的對話框中搜索你要導入的公鑰的名稱、電子郵件、指紋、指紋標識(其實就是指紋的最後8位)等。如果是指紋或者指紋標號,需要有「0x」前綴。如下圖所示:

常用的加密/解密和簽名操作

加密和的操作大同小異,非常簡單。從文件—>加密/簽名打開加密對話框,選擇要加密的文件。如圖所示,我一般會勾選「文本輸出(ASCII形式)」,稍微增加一些安全性,也方便後續文本操作(比如拷貝粘貼)。如果你需要加密之後再歸檔打包也可以勾選相關的歸檔選項。

然後選擇加密用的公鑰,選中誰然後點選「添加」按鈕,就會加入到下面的列表中。注意,如果你使用收件人的公鑰加密,一定要記得把自己的公鑰也加進去,否則這個文件你自己無法解密。在這個列表裡若只有公鑰,則會以正常字體現實,若公鑰和私鑰都存在,則會顯示為粗體。

之後按「下一步」就會提示你加密成功。

可以看到原文件和加密以後的差別。

為文件簽名與上面加密操作幾乎一樣,這裡不再重複,但在最會一步會讓你輸入私鑰的密碼,也就是剛才我們創建密鑰對的時候設置的密碼。

簽名以後的簽名文件test.asc是下圖這樣。畢竟只是原文的散列,也就是原文的摘要,所以會顯得很少。

如果要解密文件,則從文件—>解密/驗證打開解密和驗證對話框,選擇要解密的文件,並選擇要把解密以後的文件存放在何處。

驗證文件簽名,需要原文件和該文件的簽名文件,本例是test文件及test.asc文件。這樣才能進行驗證。從文件—>解密/驗證打開解密和驗證對話框,選擇要驗證的文件簽名和文件。直接選下一步即可。結果會直接顯現。

為別人的GPG公鑰簽名

除了上述所有這些,還可以給別人的GPG公鑰簽名,這樣的好處對別人進行認證,以幫助其增加信譽度。一個人被人簽名越多,其自身的信譽也就水漲船高。

我們可以先導入某人的GPG公鑰,用上面的方法。然後在他的公鑰上點右鍵,選擇「認證證書」。第一步要求你選擇要認證的用戶編號,如果某人有多個用戶編號,根據情況勾選。然後別忘了勾選最下面的「我已驗證此指紋」。這裡要注意,為了防止某人騙取你的簽名,需要做一些基本的驗證:其一他的用戶編號,也就是UID是不是他本人所掌握的郵件地址,只認證可信的用戶編號。其二,讓他提供給你一份全部長度的密鑰指紋,至少16位,並仔細核對。其三,當面簽署,最好能驗證其身份證上的信息與用戶標號(UID)一致。

之後第二步,選擇你的私鑰,如果你有兩個或兩個以上私鑰時,注意不要看錯。下面選擇簽名方式,一種是本地簽名,一種是可導出的簽名。這裡選擇第二種——認證所有可查看證書的人。可以勾選「稍候將認證的證書發送到伺服器」,也可以不選,如果不選,就需要再為他做一步「導出到伺服器」操作。

因為需要用你的私鑰來簽名,因此會要求你輸入密碼。之後認證成功會有一個提示,可以看到最終結果。

可以雙擊那個你簽名的公鑰,轉到”用戶編號和證書”選項卡,就可以看到我給此公鑰新添加的簽名了。

openPGP與電子郵件的結合

Kleopatra與電子郵件的結合不夠好,若需要解密電子郵件,可能需要客戶端先把郵件導出,然後再使用Kleopatra來處理。對於加密和簽名,我們雖然可以把加密和簽名的內容拷貝到正文里,不過畢竟這不太方便。所以各個郵件客戶端都有與OpenPGP的結合,比如GNOME下的Evolution就可以很方便的直接與OpenPGP結合,相應的KDE下的Kmail搭配Kpgp也是同樣的功能。

不過從跨平台通用性考慮可以使用 Thunderbird + Enigmail。網上這類文章很多了,這裡不再贅述。特別要說明的是,Engimail可以完成上面所說的所有功能,但其生成密鑰的方法略有點複雜,選項比較多,不利於初學者快速掌握。此文很不錯,可以做參考

最後,Kleopatra的功能是非常強大的,除本文所介紹之外,還可以檢查文件的校驗和等等。可以說是一款不可多得的個人加密工具前端。我花了點之間,錄製了一段操作視頻,解釋了一下以上各操作。

牆內鏡像(非高清):http://v.youku.com/vshow/idXODM5NzAzNTY0.html

You may also like...