PGP
PGP
徠PGP(英語:Pretty Good Privacy,中文翻譯“優良保密協議”)是一套用於消息加密、驗證的應用程序,採用IDEA的散列演演算法作為加密與驗證之用
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)軟體連接到銀行系統時使用,防止信息在傳輸過程中被刪改或盜取,從而減少商業秘密泄露和遭遇詐騙的風險。
1997年7月,PGP Inc.與齊默爾曼同意IETF制定一項公開的網際網路標準,稱作OpenPGP,任何支持這一標準的程序也被允許稱作OpenPGP。
許多電子郵件系統提供了OpenPGP兼容的安全性,由RFC 3156來描述。2007年11月發布的規範RFC 4880作為RFC 2440的替代版,指出一套演演算法,包括非對稱的ElGamal加密演演算法,Digital Signature Algorithm,三重數據加密演演算法以及SHA-1.標準還建議使用PKCS #1v1.5描述的RSA加密演演算法用作加密與簽名,以及AES-128,CAST-128,IDEA等對稱加密演演算法。許多其他加密演演算法也被支持。2009年發布的RFC 5581支持Camellia加密。基於橢圓曲線密碼學(ECDSA,ECDH)的RFC 6637發佈於2012年。支持EdDSA被2014年發布的標準支持。
自由軟體基金會開發的OpenPGP程序叫做GnuPG,並有多個圖形用戶界面版本的軟體實現,如KGPG,Seahorse,MacGPG。也有一些商用OpenPGP軟體。
使用JavaScript編寫的開源庫OpenPGPjs,用於網頁程序,如ProtonMail,Mailfence,GlobaLeaks, andMailvelope.
iOS或Android平台上的OpenPGP應用程序有iPGMail,OpenKeychain。