PGP

數據加密和解密計算機程序

PGP(英語:Pretty Good Privacy,直譯:優良保密協定)是一套用於訊息加密、驗證的應用程式。

PGP
PGP軟件截圖(Windows
開發者菲爾·齊默爾曼
目前版本
  • 1.0
  • 2.0
  • 2.3
  • 2.5(1994年5月)[1]
  • 2.6.2i(1994年10月24日)[2]
  • 2.7.1
  • 2.6.3i(1996年1月18日)[1]
  • 2.3a
  • 2.4
  • 5.0(1999)[3]
  • 8.0.3(2003)[3]
  • 6.5.8(2000)[3]
  • 7.0.3
  • 6.5(1999年4月5日)[4]
  • 8.1
  • 5.5
  • 2.6(1994年5月26日)[5]
編輯維基數據連結
類型密碼學
網站www.broadcom.com/products/advanced-threat-protection/encryption 編輯維基數據

PGP的主要開發者是菲爾·齊默曼。齊默曼於1991年將PGP在互聯網上免費發佈。PGP本身是商業應用程式;開源並具有同類功能的工具名為GnuPG(GPG)。PGP及其同類產品均遵守OpenPGP數據加解密標準(RFC 4880)。

PGP加密如何工作

PGP加密由一系列雜湊數據壓縮對稱金鑰加密,以及公鑰加密的演算法組合而成。每個步驟均支援幾種演算法,用戶可以選擇一個使用。每個公鑰均繫結一個用戶名和/或者E-mail地址。該系統的最初版本通常稱為可信網或X.509系統;X.509系統使用的是基於數碼證書認證機構的分層方案,該方案後來被加入到PGP的實現中。當前的PGP加密版本通過一個自動金鑰管理伺服器來進行金鑰的可靠存放。[6]

相容性

 
PGP工作原理圖示

隨着PGP的發展,支援更新功能和演算法的版本能夠建立舊PGP系統無法解密的加密訊息,即使使用有效的私鑰也是如此。因此,PGP通訊中的夥伴必須了解彼此的能力或至少就PGP設置達成一致。

機密性

PGP可用於傳送機密訊息。為此,PGP結合了對稱金鑰加密和公鑰加密。PGP使用對稱加密演算法對訊息進行加密,該演算法需要對稱金鑰。每個對稱金鑰也稱為對談金鑰僅被使用一次。訊息及其對談金鑰被傳送到接收方。 對談金鑰必須被傳送給接收方以解密訊息,但是為了在傳輸過程中保護它,它使用接收方的公鑰進行加密。只有屬於接收方的私鑰才能解密對談金鑰。

數碼簽章

PGP支援訊息身份認證和完整性檢查。後者被用來檢查訊息在傳輸過程中是否被修改過(即驗證訊息完整性),而訊息身份認證則是被用來決定訊息是否由聲稱為傳送者的個人或實體發出(即數碼簽章驗證)。由於訊息的內容是加密的,因此更改任何訊息中的內容都將導緻密鑰解密失敗。在PGP中,這些特性預設是和訊息加密同時開啟的,而且同樣可以被應用到明文的驗證。傳送者只需使用PGP為訊息建立一個數碼簽章(簽章演算法採用RSADSA)。具體步驟為:PGP以數據或資訊建立一個雜湊(參見訊息摘要),然後使用傳送者的私鑰利用雜湊生成數碼簽章。

信賴網路

不管是在加密訊息時還是在驗證簽章時,都需要注意用來傳送訊息的公鑰是否確實屬於期望的接收者。簡單的從某個位置下載一個公鑰是沒有保障的,故意(或偶然)的假冒是有可能發生的。PGP從它的第一個版本起,在'身份證書'中發佈用戶公鑰,身份證書也是以加密方式構造的,所以任何的篡改或意外的變動都可以被迅速的檢測出來。但是僅僅有一個任何對於證書的修改都會被檢測出來的機制不夠的,這樣的檢測機制只能在證書建立之後用於避免篡改,而不是建立之前。用戶還必須用某種形式確保證書中的公鑰真正的屬於特定的人/實體。從第一個發行版開始,PGP產品就包含一個內部的'審查方案'來協助它,一個被叫做信賴網路(GOOGLE)# 的信任模型。對於一個給定的公鑰(具體來說就是一個用戶名到對應其金鑰的繫結資訊)可以被第三方用戶數碼簽章,來證明某人(實指用戶名)和一個金鑰的關聯,而該簽章中包含對該關聯不同程度的信任度。雖然有許多程式都會讀寫這個資訊,而只有少數會通過信任度來決定是否信任一個金鑰。

信賴網路協定在1992年的PGP 1.0手冊中被菲利普·齊默曼(Christal Danti)首次提及並描述為:

隨着時間的推移,您將積累來自其他人的金鑰,您可能希望將其指定為可信賴的介紹人。每個人都會選擇自己值得信賴的介紹人。每個人都會逐漸積累並用他們的鑰匙分發來自其他人的一系列認證簽章,期望任何接收它的人都會至少信任一個或兩個簽章。這將形成一個針對所有公鑰的容錯信任網。

信賴網路機制比S/MIME方案的集中管理的公鑰基礎設施有優勢,但是沒有被網絡普通大眾普遍採用,一般只在Unix-like的愛好者、開源軟件界、和對私隱特別注意而且有電腦知識的人群之間使用。如何使一般用戶容易並且樂意使用、接收證書然後手動的驗證它們的有效性,這些潛在的推廣阻礙目前還沒有滿意的解決方案。

證書

在最近的OpenPGP規範里,信任簽章可被用於支援受信任的證書頒發機構,一個信任簽章表示公鑰屬於其聲明的所有者,並且公鑰的所有者簽署的下一級公鑰也是可信的。 零級簽章與信賴網絡簽章相當,因為只有其公鑰的有效性得到認證。一級簽章類似於證書頒發機構,因為擁有一級公鑰者能夠發出無限數量的零級簽章。 二級簽章非常類似於用戶在使用預設證書頒發機構列表時必須依賴的信任假設(如Web瀏覽器中包含的那些);它允許金鑰的所有者製作其他公鑰證書頒發機構。

所有版本的PGP都包含一種取消(「復原」)證書的方法。如果該用戶的私鑰遺失或者被破解則他必須採用這種取消證書的方法以繼續保證通訊的安全性。這種方式基本等同於集中式PKI方案的證書復原列表。最新的的PGP版本也支援設置證書的自動過期日期。

並不僅是PGP有如何正確判斷特定公鑰屬於特定的用戶的問題。所有採用公鑰/私鑰加密的加密系統都有這個問題,並且目前並沒有令人滿意的解決方案。最初的PGP方案至少可以讓用戶選擇是否使用其背書/審批系統,而對於其他PKI方案,它們要求用戶必須採信所有被中央證書頒發機構證實的證書。

歷史

早期歷史

菲利普·齊默曼(Philip R. Zimmermann)在1991年創造了第一個版本的PGP,其名稱「Pretty Good Privacy」的靈感來自於一個名為「Ralph's Pretty Good Grocery」的雜貨店——電台主播Garrison Keillor虛構出來的一個名為Lake Wobegon的城市的一個雜貨店。

軟件第一個版本包含一個齊默曼自己設計的對稱金鑰演算法,與周六夜現場的一個小品BassOmatic同名。作為一個老牌的反核能活躍分子,齊默曼為了讓所有有相似傾向的人們可以安全的使用BBS並且安全儲存訊息和檔案而創造了PGP加密。在非商業用途上是不需要授權的,無須任何費用,並且在所有的發行中附帶了完整的原始碼

在2001年6月5號發表的一篇標題為"PGP 10周年" [7]的文章中,齊默曼描述了他最初開發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的全套原始碼出版成一本書,[8]MIT 出版社發行,受到了廣泛歡迎。任何想要構建自己的PGP版本的人只需買下這本60美元的書,切掉封面,分離頁面,然後使用OCR(文字掃描辨識)程式進行掃描和文字辨識(或者直接輸入),生成一系列的原始碼文字文件。接下來便可以使用自由分發的GCC來編譯程式。PGP就是這樣在全世界變得可用。聲明的原則很簡單:對軍需品——槍支、炸藥、飛機和軟件的出口是被限制的,然而書本出口受到第一修正案(言論自由部分)的保護。這個問題從未再在法庭中檢查過。後來,在另外兩個案件(伯恩斯坦訴合眾國案榮格訴戴利案)中,法院皆判定加密軟件的原始碼是受第一修正案保護的,享有言論自由。如今PGP不再被認為是軍需品,但仍需符合一般出口產品的實體清單規定,不得出售給特定的國家、實體或個人。

司法機關的繞過措施

由於PGP尚無破解方法,使得被指控犯罪的人士青睞使用PGP加密敏感數據,執法部門採證時便會遇到困難。對此,英國通過一項名為2000年調查權力規範法案英語Regulation of Investigatory Powers Act 2000(RIPA)的法案迫使這些人士交出密碼,拒不配合則會面臨牢獄之災[9];而美國則是通過一項具體判例(布社案英語In re Boucher)確定執法機關有此權力。因此,使用PGP來加密敏感數據雖然在技術上是安全的,實際上卻並非高枕無憂。一種可行的對抗方式是改用可否認加密

商業應用

PGP一般在企業資源規劃(即ERP)軟件連接到銀行系統時使用,防止資訊在傳輸過程中被刪改或盜取,從而減少商業秘密泄露和遭遇詐騙的風險。

OpenPGP

1997年7月,PGP Inc.與齊默爾曼同意IETF制定一項公開的互聯網標準,稱作OpenPGP,任何支援這一標準的程式也被允許稱作OpenPGP。[10]

許多電子郵件系統提供了OpenPGP相容的安全性,由RFC 3156來描述。2007年11月發佈的規範RFC 4880作為RFC 2440的替代版,指出一套演算法,包括非對稱的ElGamal加密演算法, 數碼簽章演算法, 三重資料加密演算法以及SHA-1. 標準還建議使用PKCS #1 v1.5 描述的RSA加密演算法用作加密與簽章,以及AES-128, CAST-128英語CAST-128IDEA等對稱加密演算法。許多其他加密演算法也被支援。 2009年發佈的RFC 5581支援Camellia加密。 基於橢圓曲線密碼學 (ECDSA, ECDH)的RFC 6637發佈於2012年。支援EdDSA被2014年發佈的標準支援。 draft-koch-eddsa-for-openpgp-00頁面存檔備份,存於互聯網檔案館

自由軟件基金會開發的OpenPGP程式叫做GnuPG,並有多個圖形化使用者介面版本的軟件實現,如KGPG, Seahorse英語Seahorse (software), MacGPG. 也有一些商用OpenPGP軟件。

使用JavaScript編寫的開源庫OpenPGPjs,[11]用於網頁程式,如ProtonMail, Mailfence, GlobaLeaks, and Mailvelope.

iOS或Android平台上的OpenPGP應用程式有iPGMail[12] ,OpenKeychain[13]

參考文獻

  1. ^ 1.0 1.1 https://web.archive.org/web/web.pa.msu.edu/reference/pgp-readme-1st.html.
  2. ^ https://web.archive.org/web/web.mit.edu/network/pgp262-announce.html.
  3. ^ 3.0 3.1 3.2 http://openpgp.vie-privee.org/latest.html.
  4. ^ https://rjmarq.org/pgp/pgp5.html.
  5. ^ https://web.archive.org/web/web.mit.edu/afs/net/mit/jis/www/pgpfaq.html.
  6. ^ PGP如何運作?. Jedi's BLOG. 2003-05-09 [2016-11-02]. (原始內容存檔於2016-03-14) (中文(臺灣)). 
  7. ^ PGP Marks 10th Anniversary. Phil Zimmermann. [2010-08-23]. (原始內容存檔於2011-05-14). 
  8. ^ Zimmermann, Philip. PGP Source Code and Internals. MIT Press. 1995. ISBN 0-262-24039-4. 
  9. ^ 009 10 Table.xls. www.whatdotheyknow.com. [2021-12-09]. (原始內容存檔於2022-04-12). 
  10. ^ By Eric Geier, PCWorld. 「How to use OpenPGP to encrypt your email messages and files in the cloud頁面存檔備份,存於互聯網檔案館).」 August 22, 2014. September 3, 2014.
  11. ^ OpenPGPjs-Team. OpenPGPjs. [2017-07-06]. (原始內容存檔於2017-07-09). 
  12. ^ iPGMail. iPGMail. [2020-09-26]. (原始內容存檔於2020-09-22). 
  13. ^ OpenKeychain-Team. OpenKeychain. openkeychain.org. [2020-09-26]. (原始內容存檔於2020-08-14). 
  14. ^ 14.0 14.1 存档副本. [2017-07-06]. (原始內容存檔於2017-07-07). 

外部連結