PGP(Pretty Good Privacy,中文翻譯為“優良保密協議”)是一套基于RSA公鑰加密體系的郵件加密軟件,采用IDEA的散列算法作為加密與驗證之用。PGP采用了一種RSA和傳統加密的雜合算法,用于數字簽名的郵件文摘算法,加密前壓縮等,還有一個良好的人機工程設計。PGP能夠提供獨立計算機上的信息保護功能,使得這個保密系統更加完備。可以用它對郵件保密以防止非授權者閱讀,它還能對郵件加上數字簽名從而使收信人可以確認郵件的發送者,并能確信郵件沒有被篡改。它可以提供一種安全的通訊方式,而事先并不需要任何保密的渠道用來傳遞密匙。PGP的功能強大,有很快的速度。可以使用PGP接管用戶的共享文件夾本身以及其中的文件,安全性遠遠高于操作系統本身提供的帳號驗證功能。
加密
PGP加密由一系列散列、數據壓縮、對稱密鑰加密,以及公鑰加密的算法組合而成。每個步驟支持幾種算法,可以選擇一個使用。每個公鑰均綁定唯一的用戶名和/或者E-mail地址。這個系統的第一個版本通常稱為可信Web或X.509系統;X.509系統使用的是基于數字證書認證機構的分層方案,該方案后來被加入到PGP的實現中。當前的PGP加密版本通過一個自動密鑰管理服務器來進行密鑰的可靠存放。
兼容性
隨著PGP的版本更新,新版本的PGP系統開始支持新的特征和算法,新系統生成的加密消息不能直接被舊的PGP系統解密,即使是使用舊版存儲的有效私鑰也不行。因此,在PGP通訊中的通信雙方應統一版本,或者至少協商好PGP的具體設置。
機密性
PGP可以用來發送機密消息。這是通過對稱的一組密鑰-公鑰組合來實現的。消息采用對稱加密算法加密,采用一組對稱密鑰加密。每個對稱密鑰只使用一次,所以也叫做會話密鑰。會話密鑰通過接收方的公鑰來加密保護,因此只需確保僅接收方能解密會話密鑰即可。加密的消息和加密的會話密鑰一起發送給接收方。
數字簽名
PGP支持消息認證和完整性檢測。完整性檢測被用來檢查消息在傳輸過程中是否變更過(即驗證消息完整性),而消息認證則是被用來決定消息是否確由某特定的人或實體發出(即數字簽名驗證)。在PGP中,這些特性默認是和消息加密同時開啟的,而且同樣可以被應用到明文的驗證。發送者只需使用PGP為消息創建一個數字簽名(簽名算法采用RSA或DSA算法)。具體步驟為:PGP以數據或信息創建一個散列(參見消息摘要),然后使用發送者的私鑰利用散列生成數字簽名。
信賴網絡
不管是在加密消息時還是在驗證簽名時,都需要注意用來發送消息的公鑰是否確實屬于期望的接收者。簡單的從某個位置下載一個公鑰是沒有保障的。蓄意的或意外冒名頂替是可能的。PGP從它的第一個版本起,總是包含在一個'身份證書'中發布用戶公鑰,身份證書也是經過加密構造的,所以任何的篡改或意外的變動都可以被迅速的檢測出來。但是僅通過創建一個即使最簡單的篡改都會被發現證書仍然不夠,這樣的檢測機制只能在證書創建之后用于避免篡改,而不是創建之前。用戶也必須用某種形式確保證書中的公鑰真正的屬于特定的人/實體。從第一個發行版開始,PGP產品就包含一個內部的'審查方案'來協助。一個信任模型被叫做信賴網絡(Web of Trust)。一個給定的公鑰(如一個用戶名到對應其密鑰的綁定信息)可以被第三方用戶數字簽名,來證明某人(一個用戶名)和一個密鑰關聯。可以在這樣的簽名中包含幾個信任級別,只不過許多程序都會讀寫這個信息,而只有少數會通過信任級別來決定是否信任一個密鑰。
信賴網絡協議(Trusted-Web Protocol)在1992年的PGP2.0手冊中被菲利普·齊默曼(Philip R. Zimmermann)描述為:
隨著時間過去,你累積到許多人的密鑰,其中有些人你也許愿意簽署信賴他們,別人也會簽署一些他們自己信賴的他人密鑰。每個人都逐漸累積到一些他人已簽署信賴的密鑰,然后自己再簽署并散發出去。那么便能期待,下一個拿到這把密鑰的人在簽署名單上總有一兩個是自己信賴的。這最終能形成所有公鑰的分布式防弊的信賴網絡。
信賴網絡機制比S/MIME機制的集中管理的公鑰基礎設施有優勢,但是沒有被網絡普羅大眾普遍采用,一般只在Unix-like的愛好者、開源軟件界、和對隱私特別注意而且有電腦知識的人群之間使用。如何使一般用戶容易使用、樂意接收證書然后手動的驗證它們的有效性,對于這些潛在的推廣上阻礙還沒有找到滿意的解決方案。
近來有一些電子郵件服務業者推出結合于網頁郵件接口的簡便PGP操作,用戶就算不創設自己的PGP密鑰也可以寄出PGP加密信,包括寄給不使用PGP的收信人,并以通關密語的問答來使收信人獲取閱讀權限。每封信可以設置不同的通關密語,并能設置每個密語的有效期限(對于寄信人而言則是無期限的)。收信人甚至可以在回答正確的通關密語后,以勾選選項的方式輕易回復PGP加密信,無需自行創設和管理PGP密鑰。對于一般用戶而言這也許足夠安全,但對于信息安全極度謹慎的人而言,這機制把私鑰也存在寄件人的郵件服務器上,仍存有私鑰外泄的疑慮,不論是政府依法獲取,或是黑客非法入侵后獲取。針對非法入侵,只能信賴電子郵件服務業者的安全防護能力;對于合法途徑則只能透過設置及復雜的通關密語來提高破解難度。
歷史
早期歷史
菲利普·齊默曼(Philip R. Zimmermann)在1991年創造了第一個版本的PGP,其名稱“Pretty Good Privacy”的靈感來自于一個名為“Ralph's Pretty Good Grocery”的雜貨店——電臺主播Garrison Keillor虛構出來的一個名為Lake Wobegon的城市的一個雜貨店。
軟件第一個版本包含一個齊默曼自己設計的對稱密鑰加密算法,與周六夜現場的一個小品BassOmatic同名。作為一個老牌的反核能活躍分子,齊默曼為了讓所有有相似傾向的人們可以安全的使用BBS并且安全存儲消息和文件而創造了PGP加密。在非商業用途上是不需要授權的,無需任何費用,并且在所有的發行中附帶了完整的源代碼。
在2001年6月5號發表的一篇標題為"PGP10周年"的文章中,齊默曼描述了他最初開發PGP時的情景:
1991年的某天,我把PGP的第一版發給我幾個朋友,以便上傳到互聯網。我最先發給Allan Hoeltje,他把這個程序發到了Peacenet,一個針對草根政治組織--特別是“和平運動”--的ISP。當時全球政治活躍分子都能訪問到Peacenet。然后我又把它上傳給了Kelly Goen,他接著就把源碼轉發到了一個專門分發源代碼的Usenet新聞組。基于我的請求,他把該Usenet權限改為了“僅限美國”。Kelly還把PGP傳到了(美國)國內很多BBS上面。我記不太清剛開始在網上貼是6月5號還是6號。
說出來嚇人,1991年的時候,我對Usenet新聞組確是知之甚少。我并不知道那個“僅限美國”的標簽只是個“建議”作用,基本上對貼子的傳播(范圍)毫無影響。當時,我以為這個標簽會控制這個帖子的傳播范圍。當時我不知道如何在新聞組發貼,甚至不明白新聞組究竟是什么。
PGP在互聯網上傳播開來,并且在這個世界上獲得了非常多的擁護者。PGP用戶和支持者也包括在極權主義國家持不同政見的人們(一些給齊默曼的感人信件被發表了,其中一些在美國國會之前被包括到證據中)。在世界其它地方的自由意志主義支持者(參考齊默曼在各個聽證會上發表的證據),以及“自由通訊”激進主義分子,他們稱他們自己為加密愛好者,進行宣傳和分發。
刑事偵察
在發行后不久,PGP加密走出了美國,在1993年二月,齊默爾·曼變成了美國政府針對“沒有授權的軍需品出口”犯罪調查的正式目標。根據美國出口管理法案中的定義,加密系統使用大于40位的密鑰將被認為是軍需品。PGP從沒有使用小于128位的密鑰,因此在那時被如此認定。如果被判有罪,這將會是嚴重的罪行。幾年后,對齊默爾曼的調查未經備案即被關閉,也沒有提起針對他本人或其他任何人的刑事指控。
齊默曼使用了一種富有想象力的方法來對抗這一規定。他將PGP的全套源代碼出版成一本書,由MIT出版社發行,受到了廣泛歡迎。任何想要構建自己的PGP版本的人只需買下這本60美元的書,切掉封面,分離頁面,然后使用OCR(文字掃描識別)程序進行掃描和文字識別(或者直接輸入),生成一系列的源代碼文本文檔。接下來便可以使用自由分發的GCC來編譯程序。PGP就是這樣在全世界變得可用。聲明的原則很簡單:對軍需品——槍支、炸藥、飛機和軟件的出口是被限制的,然而書本出口受到憲法第一修正案(言論自由部分)的保護。這個問題從未再在法庭中檢查過。
商業應用
PGP一般在企業資源規劃(即ERP)軟件連接到銀行系統時使用,防止信息在傳輸過程中被刪改或盜取,從而減少商業秘密泄露和遭遇詐騙的風險。
Open
1997年7月,PGP Inc.與齊默爾曼同意IETF制定一項公開的互聯網標準,稱作OpenPGP,任何支持這一標準的程序也被允許稱作OpenPGP。
許多電子郵件系統提供了OpenPGP兼容的安全性,由RFC 3156來描述。2007年11月發布的規范RFC 4880作為RFC 2440的替代版,指出一套算法,包括非對稱的ElGamal加密算法,Digital 標記 Algorithm,三重數據加密算法以及SHA-1.標準還建議使用PKCS #1v1.5描述的RSA加密算法用作加密與簽名,以及AES-128,CAST-128,IntelliJ IDEA等對稱加密算法。許多其他加密算法也被支持。2009年發布的RFC 5581支持Camellia加密。基于橢圓曲線密碼學(ECDSA,ECDH)的RFC 6637發布于2012年。支持EdDSA被2014年發布的標準支持。
自由軟件基金會開發的OpenPGP程序叫做GnuPG,并有多個圖形用戶界面版本的軟件實現,如KGPG,Seahorse,MacGPG。也有一些商用OpenPGP軟件。
使用ECMAScript編寫的開源庫OpenPGPjs,用于網頁程序,如ProtonMail,Mailfence,GlobaLeaks, andMailvelope.
iOS或Android平臺上的OpenPGP應用程序有iPGMail,OpenKeychain。
參考資料 >