PGP

PGP（Pretty Good Privacy，直譯：優良保密協議）是一套用於訊息加密、驗證的應用程式。

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

## PGP加密如何工作

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

### 兼容性

<image>

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

### 機密性

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

### 數字簽名

PGP支持消息身份認證和完整性檢查。後者被用來檢查消息在傳輸過程中是否被修改過（即驗證消息完整性），而消息身份認證則是被用來決定消息是否由聲稱為發送者的個人或實體發出（即數字簽名驗證）。由於消息的內容是加密的，因此更改任何消息中的內容都將導緻密鑰解密失敗。在PGP中，這些特性默認是和消息加密同時開啟的，而且同樣可以被應用到明文的驗證。發送者只需使用PGP為消息建立一個數字簽名（簽名演算法採用RSA或DSA）。具體步驟為：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周年" 的文章中，齊默曼描述了他最初開發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不再被認為是軍需品，但仍需符合一般出口產品的實體清單規定，不得出售給特定的國家、實體或個人。

### 司法機關的繞過措施

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

## 商業應用

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

## OpenPGP

1997年7月，PGP Inc.與齊默爾曼同意IETF制定一項公開的網際網路標準，稱作OpenPGP，任何支持這一標準的程序也被允許稱作OpenPGP。

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

自由軟體基金會開發的OpenPGP程序叫做GnuPG，並有多個圖形使用者界面版本的軟體實現，如KGPG, Seahorse, MacGPG. 也有一些商用OpenPGP軟體。

使用JavaScript編寫的開源庫OpenPGPjs,用於網頁程序，如ProtonMail, Mailfence, GlobaLeaks, and Mailvelope.

iOS或Android平台上的OpenPGP應用程式有iPGMail，OpenKeychain。

### 網際網路標準

- PGP
- RFC 1991 PGP Message Exchange Formats (obsolete)
- OpenPGP
- RFC 2440 OpenPGP Message Format (obsolete)
- RFC 4880 OpenPGP Message Format
- RFC 5581 The Camellia Cipher in OpenPGP
- RFC 6637 Elliptic Curve Cryptography (ECC) in OpenPGP
- //tools.ietf.org/html/draft-koch-eddsa-for-openpgp draft-koch-eddsa-for-openpgp EdDSA for OpenPGP
- PGP/MIME
- RFC 2015 MIME Security with Pretty Good Privacy (PGP)
- RFC 3156 MIME Security with OpenPGP

## 外部連結

- PGP公司網站
- The International PGP Home Page
- Web-based PGP Encryption Software

## 基本資料

- 日語原文：PGP
- 域：

<image>

- 開發者：菲爾·齊默爾曼
- proprietary owner：PGP Corporation
- 類型：密碼學