公開金鑰加密和 PGP 簡介

PGP 代表優良保密協定 (Pretty Good Privacy),而且它的隱私保護確實做得相當不錯。如果使用得當,即使是資金充足的政府監控計劃也不能存取您的訊息、文字甚至檔案。當 Edward Snowden 說「加密真的有用」,他說的正是 PGP 及其相關軟體。但必須注意的是,政府從私人電腦竊走私密金鑰仍時有所聞 (藉由將電腦帶走,或將惡意程式透過實體存取或網路釣魚攻擊植入),他們會解除電腦安全性保護,甚至能讀取舊郵件。這相當於您的門上有一個無法撬開的鎖,但仍有人可以在街上扒走您的金鑰,然後複製它,再放回您的口袋,從而在不用撬開鎖的情況下,進入您的房子。

遺憾的是,PGP 非常不容易理解,也很難操作。PGP 使用的強式加密:公開金鑰加密(public key encryption),非常巧妙,但很難理解。PGP 軟體和 Microsoft Windows 早期的版本一樣復古,它自 1991 年發布,並從那時起介面就沒有太大變化。

好訊息是,現在有很多可用的程式可以隱藏古老的 PGP 設計,讓操作變得更容易,特別是在加密和認證電子郵件,這也是 PGP 的主要用途。我們已經在其他地方納入安裝和操作這個軟體的指引。

在使用 PGP 或其他使用相關程式之前,花點時間去理解公開金鑰加密的基本知識:它可以為您做什麼、不能做什麼,以及什麼時候該使用它,對您使用 PGP 將有所助益。

兩把鑰匙的故事 Anchor link

當我們用加密對抗監控時,以下是我們會努力做的事情:

我們以一則清晰可讀的訊息,如「嗨,媽媽」為例說明。當我們把它加密成一則沒有人看得懂的編碼訊息後 (例如「OhsieW5ge+osh1aehah6」),再經由網路傳輸,可能會有很多人在網路上看到它,但因為經過加密,所以我們希望沒有人會讀得懂。等訊息到達目的地,只有我們的預期收件人有辦法將編碼訊息解密回原始訊息。

為什麼我們的收件人知道如何解碼訊息,其他人卻不知道?這一定是因為他們有一些別人不知道的額外資訊,我們稱之為解碼金鑰,因為它解鎖了編碼中的訊息。

收件人是怎麼知道這組金鑰的?這主要是因為寄件人先前已經告訴過他們這組解碼金鑰,它可能是「試著把訊息照鏡子」,還是「把每個字母轉換成字母表中的下一個字母」。然而,這個策略有一個問題:如果您擔心在發送編碼訊息時受到監視,那麼要如何在對話不會被監視的情況下,向收件人發送金鑰呢?如果您的攻擊者已經知道解碼金鑰,發送加密再巧妙的訊息也毫無意義。而且,如果您有祕密方法能發送解碼金鑰,何不把它應用於所有的祕密訊息呢?

公開金鑰密碼學有一個很棒的解決方案。對話中的每個人都有建立兩組金鑰的方法,一組是他們自己保存、永遠不讓別人知道的私密金鑰,另一組是公開金鑰,可以發送給任何想與他們通訊的人。誰能看到公開金鑰並不重要,您可以把它放在網路上,讓每個人都看到。

這些「鑰匙」本身其實是非常大的數字,具有一定的數學性質。公開金鑰和私密金鑰是成對相關的。如果使用公開金鑰對某些內容進行編碼,則其他人可以使用與其相符的私密金鑰對內容進行解碼。

讓我們來看看公開金鑰密碼學是怎麼運作的。假設您想發送一個祕密訊息給 Aarav。Aarav 有一組私密金鑰,就和其他優秀的公開金鑰加密使用者一樣,Aarav 把和私密金鑰成對的公開金鑰放在他的網頁上。您下載了公開金鑰,使用它加密訊息,並將訊息發送給 Aarav。由於 Aarav 有相應的私密金鑰,所以他可以對訊息進行解碼,其他人則辦不到。

時代象徵 Anchor link

公開金鑰密碼學擺脫了得將解密金鑰偷偷拿給訊息接收者的問題,因為接收者已經有了金鑰。雖然接收方可以將公開金鑰發送給包括間諜在內的任何人,但由於公開金鑰僅用於編碼訊息,對任何試圖解碼訊息的人都沒有用處,所以您只要好好掌握那把和私密金鑰相符的公開金鑰即可。

但是等等!如果您使用特定的公開金鑰對訊息進行編碼,則只能藉由相符的私密金鑰進行解碼。反之亦然:如果您使用某個私密金鑰對訊息進行編碼,則只能使用與其相符的公開金鑰進行解碼。

這樣的話,公開金鑰密碼學有什麼用處?乍看之下,用一個人人能破解(或至少每個有公開金鑰的人)的私密金鑰來發送祕密資訊,似乎沒有什麼好處。但是,假設我寫了一則訊息說:「我答應支付 Aazul $100」,然後用我的私密金鑰把它變成祕密訊息,任何人都可以解碼,但只可能有一個人寫下這個訊息:擁有私密金鑰的人。如果我把我的私密金鑰安全地保存好了,那這個人就會是我,也只會是我。實際上,藉由使用我的私密金鑰進行編碼,我就能確保這個訊息只可能是由我發出。換句話說,就像我們在現實世界中簽名一樣,我對這個數位訊息也做了同樣的事情。

簽名也能防止訊息遭到篡改。如果有人試圖將「我答應支付 Aazul $100」改為「我答應支付 Bob $100」,他們將無法使用我的私密金鑰重新簽名。所以,簽名的訊息可保證訊息來自某個來源,而不會在傳輸過程中遭到竄改。

所以,公開金鑰密碼學可讓您加密訊息,並將訊息安全地發送給您知道有公開金鑰的任何人。如果其他人知道您的公開金鑰,他們可以發送訊息給您,只有您可以解碼。如果他人知道您的公開金鑰,您可以為訊息簽名,以便這些人知道訊息只有可能從您那裡來。如果您知道別人的公開金鑰,您可以解碼他們簽名的訊息,並知道訊息只有可能來自他們。

現在,您應該已清楚地知道:公開金鑰密碼學愈有用,就會有愈多人知道您的公開金鑰。您應該也發現,您需要將您的私密金鑰保護得非常好,因為如果其他人得到您私密金鑰的副本,他們就可以冒充您,並為訊息簽名,聲稱是您寫的。PGP 有一個功能,可讓您「撤銷」私密金鑰,並警告他人金鑰已不再可信,但這不是一個很好的解決方案。使用公開金鑰密碼學系統最重要的一點,還是非常小心地保護您的私密金鑰。

PGP 如何運作 Anchor link

優良保密協定主要關注建立、使用公開金鑰及私密金鑰的細節。您可以用 PGP 建立一個公開金鑰/私密金鑰對,以密碼保護私密金鑰,用私密金鑰和公開金鑰簽名及加密文字。PGP 也可讓您下載他人的公開金鑰,並將您的公開金鑰上傳到「公開金鑰伺服器」(public key servers),讓其他人在這個儲存庫裡找到您的金鑰。請參閱我們的指引,在您的電子郵件軟體中安裝與 PGP 相容的軟體。

如果您要從這個概述中學到一件事,那就是:您應該將私密金鑰存放在安全的地方,並使用長密碼保護。您可以把您的公開金鑰交給任何您想通訊的對象,或是想確認訊息是真的由您發出的人。

先進的 PGP:信任網 Anchor link

您可能已經發現了公開金鑰密碼學的潛在缺陷。假設我開始發布一個我說來自歐巴馬的公開金鑰,如果大家相信我,可能就會開始向歐巴馬發送經過這組金鑰加密的祕密訊息,或以為用這個金鑰簽名的任何事情都是來自歐巴馬的保證。這種事情非常罕見,但卻真實發生在現實生活中一些人身上,包括本文的一些作者——有些傳送訊息給他們的人被愚弄了!在這些情況下,我們並不知道某些製作假金鑰的人是否真的能夠攔截並讀取傳送中的資訊,或者只是一種造成加密對話時不便的惡作劇。

另一種暗中攻擊,是攻擊者坐在兩個線上交談的人之間,竊聽他們的全程對話,偶爾把攻擊者自己的誤導訊息插入對話中。由於網際網路的設計是一個藉由許多不同的電腦與私人方傳送資訊的系統,這種攻擊是完全可能的。在這種情況下 (稱為「攔截式攻擊」),沒有事先協議就交換金鑰,可能會非常危險。「這是我的金鑰」,一個聲稱是歐巴馬的人,向您發送一個公開金鑰檔案。但是如果有人在那之前,攔截歐巴馬的金鑰傳送,然後換成自己的金鑰呢?

我們如何證明某組金鑰確實屬於某個人?一種方法是直接從他們身上獲得金鑰,但這並不比我們最初的挑戰好到哪裡去,也就是在沒人監視的情況下,私下取得金鑰。但是,目前還是有人會私底下和在公開加密聚會 (cryptoparty) 交換公開金鑰。

PGP 有一個更好的解決方案,稱為「信任網」(web of trust)。在信任網中,如果我相信某個金鑰屬於某個人,那麼我可以對該金鑰簽名,然後將金鑰 (和簽名) 上傳到公開金鑰伺服器,這些金鑰伺服器便會把簽名的金鑰傳給任何向其索取的人。

簡單一點說,愈多我信任的人簽了一組金鑰,我就愈有可能相信這把鑰匙真的屬於其聲稱的對象。PGP 可以讓您簽署其他人的金鑰,也可以讓您信任其他簽名者,所以如果他們簽了一個金鑰,您的軟體會自動相信該金鑰是有效的。

不過,信任網仍有自己的挑戰,各個組織如 EFF 還在研究更好的解決方案。但如果您需要一個將金鑰親自交給他人的替代方案,目前信任網和公開金鑰伺服器網路還是您的最佳選擇。

中繼資料PGP 的限制 Anchor link

PGP 的主要功能是保密訊息內容,維持其真實性,不被竄改。但您所要顧慮的隱私問題不只這些。如前所述,攸關訊息的資訊所能揭露的事情,可能和訊息的內容一樣多(請參閱「中繼資料」)。如果您正在與您所在國家的異議分子交換 PGP 訊息,即使這些訊息沒有解碼,只要您與其通訊,您也可能處於危險之中。有些國家甚至會因為您拒絕將加密訊息解密,而將您監禁。

PGP 不會掩飾您正在與誰交談,或者您正在使用 PGP 這麼做。如果您上傳您的公開金鑰到金鑰伺服器上,或簽署其他人的鑰匙,您就向全世界說明了您的金鑰是什麼,以及您認識誰。

但您可以不必這樣做。您可以保持低調,只將您的 PGP 公開金鑰交給您信任的人,並告訴他們不要上傳到公開金鑰伺服器。您也不需要將您的名字附加到金鑰上。

要掩飾您在與一個特定人士溝通是更為困難的。一種方法是你們都使用匿名電子郵件帳戶,並使用 Tor 存取它們。如此一來,PGP 仍將發揮功用:既保持您電子郵件訊息的私密性,也能向彼此證明,訊息沒有遭到篡改。

上次查閱: 
2014 年 11 月 7 日