#教學
這篇文章是加密通訊教學系列文第三篇。第一篇是基本原理介紹(務必要讀!),這一篇是教大家如何在 Windows 上使用加密軟體 gpg4win跟WebPG。
在 Windows 上沒有像是 gpgtools 一樣那麼整合那麼完整的解決方案,變成說需要好幾個軟體拼裝一下。我以下介紹的 gpg4win 跟 WebPG 這個組合僅適用於 gmail 用戶。
註一:但是也不是非得這樣組合不可,例如說有在用Thunderbird收信的朋友可以用 gpg4win 和Enigmail 這個組合,如果還有在用 Outlook(現在是不是已經停止支援了?)就不必另外裝外掛了,gpg4win 本身就有支援。
gpg4win 是一套軟體,類似 gpgtools 一樣把很多功能整合進去,包括最核心的加解密服務、內建的加密 email 通訊軟體 Claws Mail 之類的。但是考量到我認識很多使用者是習慣用瀏覽器上網收信(gmail 尤其是大宗),為了不要讓大家改變太多的日常使用習慣會太痛苦,所以我建議使用 WebPG 這個瀏覽器外掛(適用於 Firefox/Chrome,註二)來協助加密郵件的傳送。
註二:IE 用戶抱歉啦,人家沒有開發給 IE 用的版本。可是說認真的,就一般的網路使用安全來說,Firefox、Chrome 或是其他瀏覽器都是比較好的選擇,而且網站顯示的效果也比較「正確」,所以如果真的要安全地通訊的話,忍痛換一下瀏覽器學一下真的很值得。
二、gpg4win 中文使用介紹
功能介紹
gpgtools 是一款 Windows 上的自由加密軟體,功能包括:
- 金鑰與憑證管理(GPA/Kleopatra)
- 文字或檔案加解密、簽章(GnuPG)
- 電子郵件加解密、簽章(Claws Mail)
這套軟體是英文介面的,所以以下介紹如何安裝跟使用這套軟體,我會使用截圖並且加上中文註解。
安裝
- 先到網站下載安裝檔。我下載的是 2.1.1。
- 請按照一般安裝程式的步驟進行,直到最後一步:
把那個框哭先打勾再按 Next 即可。 - 安裝完之後,會多出好幾個程式,我們會用到的是 “GPA"。
建立自己的金鑰
第一篇系列文已經交代什麼是金鑰,這一段要介紹怎麼建立屬於自己的金鑰。
請特別注意:建立金鑰之後,請好好維持電腦作業系統的安全,萬一電腦中毒、被入侵,讓外人取得你的金鑰,那基本上你的所有使用這對金鑰進行加密通訊都會被破解。
- 打開 GPA 這個程式(開始功能表那邊找一下,不然就去桌面上翻)
- 它剛打開來應該會問你要不要建立金鑰,可以按 yes。或者是點這個按鈕:
- 會跳出一個對話視窗,要求你陸續輸入你的全名(我不確定能不能輸入中文,保險起見我會建議使用英文拼音姓名)跟電子郵件信箱(選一個你會拿來做秘密通訊的信箱;如果你有好幾個信箱都會拿來做秘密通訊的話也有辦法解決,但是先選一個再說),輸入完之後都按 "Forward":
到最後會問你說要不要建立一個密鑰備份,這點隨意,但是切記要保管好: - 之後會要你自訂一個「密碼」(Passphrase)。這個密碼只是個認證身分的手續,你以後如果要使用這組金鑰,就必須輸入它,來確認是你本人。請務必牢記密碼,不然你就無法使用這組金鑰:
然後決定一下你的密鑰備份存在哪裡: - 完成啦,恭喜你:
最後,有一件很重要的事情:
因為安全起見,金鑰基本上都有使用期限。gpg4win 做的金鑰基本上設定是不會過期…….但是其實這樣做有點詭異。我自己是建議定期換一下啦。(然後就要重新交換或發佈一次公鑰,然後把已經交換的公鑰作廢)
交換公鑰
接下來就是要交換公鑰了(私鑰要自己留著不能給別人!!),如果要寄出加密訊息,你必須要有所有收信方的公鑰才能加密。通常有兩種方法可以做:
- 直接匯出公鑰,然後附加在 email 裡面,給你要通訊的對象。反正公鑰這種東西不怕給人拿走,所以放在公開的 email 傳送無所謂。
- 把公鑰貼到公布欄(精確地說,是上傳到公鑰交換伺服器),讓大家搜尋你的公鑰,讓程式自己下載下來
這兩種步驟也是在 GPA 裡面做:選擇你要匯出的金鑰,如果是要匯出檔案寄給朋友就按 "Export Keys"(後面跟上面備份的狀況一樣),如果是要貼在公鑰交換伺服器上就選 "Send Keys":
會出現一個確認視窗,不要按 No 就好了。
接下來是把別人的公鑰抓下來,這其實也很簡單:
- 在 "Server” 選單裡面選 “Retrieve Keys":
- 會跳出一個視窗要求你輸入金鑰的 ID(就是你金鑰做出來的時候,底下資訊欄會有個 "Key ID",後面一串八位英數,就是那東西),我以下輸入 gpgtools 官方的公鑰示範:
之後就會跳出一個對話視窗告訴你它抓了幾筆資料下來,按 OK 就好。 - 然後要注意喔:如果你之後更動了金鑰(例如說把第二個電子信箱加進去),就需要更新一次金鑰。(就是重複貼一次,然後叫大家更新這樣)
安裝 WebPG 和傳送加密郵件
以下先介紹如何安裝 WebPG:
- 進到他們網站下載,選擇你的瀏覽器和作業系統版本,我之後操作會用 Chrome 示範:
- 安裝完之後,會在右上角出現 WebPG 的按鈕,按一下之後會出現三個選項,先選 Option 那個:
- 接下來進入這個畫面,請把所有的 Disabled 按鈕按一下,按成 Enabled:
- 再按一下 WebPG 的按鈕,選擇 "Key Management",進去那個畫面之後會先進到 "Private Key” 這個分頁,請選擇你慣用的私鑰,把 Disabled 的按鈕按成 Enabled:
設定完之後就是收發 email 了,Webpg 基本上有特別針對 gmail 做調整(至於其他信箱的朋友就抱歉了,可能要用 gpg4win 的其他服務手動來做了)
- 你的 gmail 撰寫介面會變成這樣:
選擇你要的選項,基本上只要有簽章的功能,都會要求你輸入金鑰的密碼,來驗證是否是你本人: - 你的訊息之後會變成密文,對方收到信會長這樣:
開頭會有個 “BEGIN PGP MESSAGE",結尾會有個 "END PGP MESSAGE” - 收到這種信的時候,解密的步驟是:拉到最底下,選擇 “Decrypt the Message":
之後會要你輸入密碼,密碼輸入正確之後就可以解密了:
人們總是有各種加密通訊跟檔案的理由。我在這系列文章裡大概解釋一下現代加密技術基本原理,然後會交代在 Mac跟 Windows 上,哪些軟體可以達到加密 email 通訊的要求。
(至於 Linux 的朋友就抱歉了,但是大部分的 distro 都有支援 GnuPG 服務,我想精熟的用戶要搞懂,它甚至找到合適的 UI 應該不是問題)
另外,我後面的文章只會介紹「在電腦上做 email 通訊加密」,智慧型手機上面也有一些 App 有加解密 email 的功能,但我沒有用過無法推薦。如果讀者是想要在即時通訊聊天(e.g. Facebook/Google Talk 等等)加密通訊的話,可以參考這篇介紹 OTR 通訊軟體的文章,或是這篇介紹手機加密通訊 App Safeslinger 的文章。
一、現代加密技術基本原理
我知道大家都討厭上技術課,但是相信我,知道一點基本原理對於正確、安全地使用加密軟體非常必要,所以請大家姑且耐點性子看過這段。
然後要先交代:這篇文章除了註一以外,其他註解不需要認真看,除非你真的對技術面很有好奇心。
前情提要
如果兩個人(下稱 A 跟 B)要秘密通訊,其中發送訊息的人(A)會把訊息(下稱「明文」),經過一些複雜的手續(加密),變成一堆外人看不懂的東西(密文),然後再傳送給對方(B)。B 收到密文後,會透過另一套複雜的手續(解密),把密文再轉換成明文,解讀 A 的訊息。
問題就在於,A 跟 B 玩的加密、解密手續,過程中會需要一些關鍵訊息(密碼學的人會叫它「金鑰」,另見註一)。傳統的加解密方法(例如凱撒法或表格法)基本上都會有個問題:A 和 B 手上都要有同一個金鑰、要知道同樣的數學方法,才能正確加、解密。所以問題會變成:如何安全地把金鑰送到對方手上?想想看,在戰爭的過程中,我方的金鑰被敵方截走,所有的秘密通訊就會被看光光。這在密碼學發明千年以來一直都是一場惡夢,直到有人在二十世紀七零年代發展了所謂「非對稱加密法」(註二),這個問題才終於獲得(暫時的)解決(註三)。
註一:然後,金鑰 (key) 跟「密碼」(password/passphrase) 是不一樣的。密碼基本上可以想成像是「芝麻開門」一類的咒語,輸入驗證你的身分後,就可以使用某些服務和工具,像是登入你的 email 帳號之類的;金鑰基本上就只是加密、解密需要用到的關鍵資訊而已。在比較簡單的加密方法裡,密碼可以就是金鑰,但是在複雜的系統中,密碼只是一種驗證手續,讓你可以使用金鑰,做後續你想做的事情。
註二:好啦,其實在更早之前就有發明出類似的東西,但是真的普及推廣是七零年代的事情,有興趣自己去翻 wikipedia。
註三:所有的加密方式都會同樣的問題:我拿不到金鑰,大不了我就暴力去電腦把密文破解明文啊。凱撒法非常好破解,運氣最差就把所有字母試過一輪就好了;表格法其實也有一些統計的方法可以破解,需要費一點功夫。最登峰造極的成就大概就是英國計算科學家Alan Turing在二戰時為了對付德國的密碼機Enigma發展出來的方法。
電腦普及後,大概就是依照加密方法原理硬是暴力算出來(不過其實也可能因為演算法的「缺陷」有些竅門)。所以現在大概常見的狀況是,你電腦很快,那我就還是同樣的加密演算法,但是把金鑰的長度提高,提高一點就讓破解的時間拉長很多,看你有多少力氣跟時間去算(而且值不值得花這個成本去破解可能沒什麼重要性的密文)。
非對稱加解密基本原理
以下介紹的就是各種非對稱加密的最基本原理(至於真槍實彈的數學呢,去找密碼學家不要找我我也不懂)。
首先,這些新方法一次會產生一對金鑰:一個叫做公鑰、另一個叫做私鑰。公鑰顧名思義,就是要公開周知讓大家知道也無所謂,私鑰則是千千萬萬要收好不能弄丟也不能讓你個人以外的其他人知道的。
(因此大家平常還是注意自己的電腦安全喔!該裝的掃毒軟體跟防火牆要裝還要更新、定期掃描,不該裝的怪怪軟體要清理乾淨,平常不要上一些奇奇怪怪的網站,可能有讀,然後可以使用安全的瀏覽器──基本上其他的瀏覽器都比 IE 安全很多啦。)
那加密跟解密的操作概念如下:
當 A 想要寄訊息給 B 的時候,A 可以去一個布告欄上去找 B 公布在上面的公鑰(或者是 B 也可以把他自己的公鑰事先送給 A),然後 A 會透過這個公鑰和數學方法,把訊息變成密文。等到 B 收到密文的時候,就可以用 B 自己私藏的私鑰,把密文解密回明文。
大家可以很明顯地看到,任何人基本上都可以拿到 B 的公鑰,也可以寄送密文給 B,但是因為只有 B 有自己的私鑰,所以只有他本人可以把密文轉換成看得懂的東西,因此解決了我上面說的「要怎麼把金鑰送到對的人手上不會被偷走」的問題。
另外的重要用途:簽章
那除了加密跟解密以外,其實非對稱加密系統有另一個也很重要的功能:簽章。
簽章是什麼意思呢?任何通訊基本上會遇到另一個問題:「我怎麼知道這封訊息是你本人寫的,還是別人假造你名義寫的?」
這個難題,也可以用非對稱加密法解決,過程概念如下:
當 A 要發訊息給 B 的時候,為了要證明「這封信是 A 寫的」,所以,首先 A 會把他的訊息餵給一個電腦工具(叫做「雜湊函數」),生產出一串奇怪的字串,也就是所謂的「摘要」。雜湊函數的特性是,只要輸入的訊息有一點點不一樣(例如說被動過手腳),跑出來的字串就會差很多。
接下來,A 會把摘要,透過 A 自己的私鑰,加密成「簽章」這個東西。然後,他就會把他訊息的「密文」跟「簽章」,一道寄給 B。
B 收到密文跟簽章之後,一方面用 B 自己的私鑰解出訊息的明文,另一方面,B 會用 A 的公鑰把簽章還原成一串奇怪的字串(暫且稱為「摘要 X」好了)。這時候,B 還會把解出來的明文,再餵進雜湊函數裡。如果這次跑出來的「摘要 Y」,跟上面還原出來的「摘要 X」比對後內容一模一樣的話,B 就可以相信:
「這篇訊息的明文是 A 發給我的沒錯,而且內容沒有被更改過」。
小結,還有加解密軟體的任務
上面介紹了加、解密跟簽章這兩種用途,基本上通常是一起使用的:
- 當 A 寄信給 B 時,A 會「拿 B 的公鑰對明文做加密變成密文」+「拿 A 自己的私鑰對明文簽章」
- 當 B 收到 A 的信時,B 會「拿 B 自己的私鑰對密文解密變成明文」+「拿 A 的公鑰,對簽章做還原變成摘要,並且把上頭解出的明文餵進雜湊函數結果跟摘要比對」
好了,原理說完了。所以基本上大家下載加解密軟體,要做的事情就是:
- 生產出屬於自己的公鑰跟私鑰
- 把公鑰貼在公布欄上,私鑰留在自己電腦裡
- 去公布欄把好麻吉(和會通訊的對象)的公鑰抓下來
- 把訊息、檔案傳給別人時,用別人的公鑰加密內容,用自己的私鑰簽章
- 接收到別人的訊息、檔案時,用自己的私鑰把內容解密,用別人的公鑰還原簽章並且核對
好消息是,除了 1, 2, 3 以外,4, 5 程式大都可以幫你自動做好。接下來兩篇文章分別會介紹 gpgtools (Mac) 和 Windows 上幾個程式的使用方法。我基本上會盡量選擇開源軟體(換句話說:免費,而且程式碼是公開的,通常這也代表這些程式有點信用,不會被偷偷埋漏洞),操作要上手也不太困難──很不幸的是這些軟體操作介面大多都是英文的!我會附上中文的說明跟有中文註解的截圖,讓大家熟悉怎麼操作。
然後還是要提醒:如果你的電腦不乾淨,不管你使用再好的加密程式也是白搭。千萬不要在自己不信任的電腦上登入 email 或留下任何的個人資訊。至於如何安全地保護自己的電腦,可以參考Security in a Box(簡體中文)這篇文章(雖然說我覺得它有些建議有點太嚴格,在台灣不太需要啦),然後也要學會如何使用 email 或社群網站的兩階段驗證服務(據我所知 Google,facebook和蘋果都有)。