1. 程式人生 > >PGP工作原理及其安全體制

PGP工作原理及其安全體制

打印 公鑰 密鑰環 see 特性 壓縮加密 解密 復制 bin

現代信息社會裏,當電子郵件廣受歡迎的同時,其安全性問題也很突出。實際上,電子郵件的傳遞過程是郵件在網絡上反復復制的過程,其網絡傳輸路徑不確定,很容易遭到不明身份者的竊取、篡改、冒用甚至惡意破壞,給收發雙方帶來麻煩。進行信息加密,保障電子郵件的傳輸安全已經成為廣大E-mail用戶的迫切要求。PGP的出現與應用很好地解決了電子郵件的安全傳輸問題。將傳統的對稱性加密與公開密鑰方法結合起來,兼備了兩者的優點。PGP提供了一種機密性和鑒別的服務,支持1024位的公開密鑰與128位的傳統加密算法,可以用於軍事目的,完全能夠滿足電子郵件對於安全性能的要求。

1 操作描述

PGP的實際操作由五種服務組成:鑒別、機密性、電子郵件的兼容性、壓縮、分段和重裝。

1.1 鑒別

如圖1。步驟如下:

(1)發送者創建報文;

(2)發送者使用SHA-1生成報文的160bit散列代碼(郵件文摘);

(3)發送者使用自己的私有密鑰,采用RSA算法對散列代碼進行加密,串接在報文的前面;

(4)接收者使用發送者的公開密鑰,采用RSA解密和恢復散列代碼;

(5)接收者為報文生成新的散列代碼,並與被解密的散列代碼相比較。如果兩者匹配,則報文作為已鑒別的報文而接收。

另外,簽名是可以分離的。例如法律合同,需要多方簽名,每個人的簽名是獨立的,因而可以僅應用到文檔上。否則,簽名將只能遞歸使用,第二個簽名對文檔的第一個簽名進行簽名,依此類推。
技術分享圖片
1.2 機密性

在PGP中,每個常規密鑰只使用一次,即對每個報文生成新的128bit的隨機數。為了保護密鑰,使用接收者的公開密鑰對它進行加密。圖2顯示了這一步驟,描述如下:

(1)發送者生成報文和用作該報文會話密鑰的128bit隨機數;

(2)發送者采用CAST-128加密算法,使用會話密鑰對報文進行加密。也可使用IDEA或3DES;

(3)發送者采用RSA算法,使用接收者的公開密鑰對會話密鑰進行加密,並附加到報文前面;

(4)接收者采用RSA算法,使用自己的私有密鑰解密和恢復會話密鑰;

(5)接收者使用會話密鑰解密報文。

除了使用RSA算法加密外,PGP還提供了DiffieHellman的變體EIGamal算法。

1.3 常規加密和公開密鑰結合的好處

(1)常規加密和公開密鑰加密相結合使用比直接使用RSA或E1Gamal要快得多。

(2)使用公開密鑰算法解決了會話密鑰分配問題。

(3)由於電子郵件的存儲轉發特性,使用握手協議來保證雙方具有相同會話密鑰的方法是不現實的,而使用一次性的常規密鑰加強了已經是很強的常規加密方法。

1.4 機密性與鑒別

如圖3所示,對報文可以同時使用兩個服務。首先為明文生成簽名並附加到報文首部;然後使用CAST-128(或IDEA、3DES)對明文報文和簽名進行加密,再使用RSA(或E1Gamal)對會話密鑰進行加密。在這裏要註意次序,如果先加密再簽名的話,別人可以將簽名去掉後簽上自己的簽名,從而篡改簽名。
技術分享圖片
1.5 電子郵件的兼容性

當使用PGP時,至少傳輸報文的一部分需要加密,因此部分或全部的結果報文由任意8bit字節流組成。但由於很多的電子郵件系統只允許使用由ASCII正文組成的塊,所以PGP提供了radix-64(就是MIME的BASE 64格式)轉換方案,將原始二進制流轉化為可打印的ASCII字符。

1.6 壓縮

PGP在加密前進行預壓縮處理,PGP內核使用PKZIP算法壓縮加密前的明文。一方面對電子郵件而言,壓縮後再經過radix-64編碼有可能比明文更短,這就節省了網絡傳輸的時間和存儲空間;另一方面,明文經過壓縮,實際上相當於經過一次變換,對明文攻擊的抵禦能力更強。

1.7 分段和重裝

電子郵件設施經常受限於最大報文長度(50000個)八位組的限制。分段是在所有其他的處理(包括radix-64轉換)完成後才進行的,因此,會話密鑰部分和簽名部分只在第一個報文段的開始位置出現一次。在接收端,PGP必須剝掉所在的電子郵件首部,並且重新裝配成原來的完整的分組。

2 加密密鑰和密鑰環

2.1 會話密鑰的生成

PGP的會話密鑰是個隨機數,它是基於ANSI X.917的算法由隨機數生成器產生的。隨機數生成器從用戶敲鍵盤的時間間隔上取得隨機數種子。對於磁盤上的randseed.bin文件是采用和郵件同樣強度的加密。這有效地防止了他人從randseed.bin文件中分析出實際加密密鑰的規律。

2.2 密鑰標誌符

允許用戶擁有多個公開/私有密鑰對:(1)不時改變密鑰對;(2)同一時刻,多個密鑰對在不同的通信組交互。所以用戶和他們的密鑰對之間不存在一一對應關系。假設A給B發信,B就不知道用哪個私鑰和哪個公鑰認證。因此,PGP給每個用戶公鑰指定一個密鑰ID,這在用戶ID中可能是唯一的。它由公鑰的最低64bit組成(Kua mod 2 64),這個長度足以使密鑰ID重復概率非常小。

2.3 密鑰環

密鑰需要以一種系統化的方法來存儲和組織,以便有效和高效地使用。PGP在每個結點提供一對數據結構,一個是存儲該結點年月的公開/私有密鑰對(私有密鑰環);另一個是存儲該結點知道的其他所有用戶的公開密鑰。相應地,這些數據結構被稱為私有密鑰環和公開密鑰環。

3 公開密鑰管理

3.1 公開密鑰管理機制

一個成熟的加密體系必然要有一個成熟的密鑰管理機制配磁。公鑰體制的提出就是為了解決傳統加密體系的密鑰分配過程不安全、不方便的缺點。例如網絡黑客們常用的手段之一就是“監聽”,通過網絡傳送的密鑰很容易被截獲。對PGP來說,公鑰本來就是要公開,就沒有防監聽的問題。但公鑰的發布仍然可能存在安全性問題,例如公鑰被篡改(public key tampering),使得使用公鑰與公鑰持有人的公鑰不一致。這在公鑰密碼體系中是很嚴重的安全問題。因此必須幫助用戶確信使用的公鑰是與他通信的對方的公鑰。
技術分享圖片
以用戶A和用戶B通信為例,現假設用戶A想給用戶B發信。首先用戶A就必須獲取用戶B的公鑰,用戶A從BBS上下載或通過其它途徑得到B的公鑰,並用它加密信件發給B。不幸的是,用戶A和B都不知道,攻擊者C潛入BBS或網絡中,偵聽或截取到用戶B的公鑰,然後在自己的PGP系統中以用戶B的名字生成密鑰對中的公鑰,替換了用戶B的公鑰,並放在BBS上或直接以用戶B的身份把更換後的用戶B的“公鑰”發給用戶A。那A用來發信的公鑰是已經更改過的,實際上是C偽裝B生成的另一個公鑰(A得到的B的公鑰實際上是C的公鑰/密鑰對,用戶名為B)。這樣一來B收到A的來信後就不能用自己的私鑰解密了。更可惡的是,用戶C還可偽造用戶B的簽名給A或其他人發信,因為A手中的B的公鑰是仿造的,用戶A會以為真是用戶B的來信。於是C就可以用他手中的私鑰來解密A給B的信,還可以用B真正的公鑰來轉發A給B的信,甚至還可以改動A給B的信。

3.2 防止篡改公鑰的方法

(1)直接從B手中得到其公鑰,這種方法有局限性。

(2)通過電話認證密鑰:在電話上以radix-64的形式口述密鑰或密鑰指紋。密鑰指紋(keys fingerprint)就是PGP生成密鑰的160bit的SHA-1摘要(16個8位十六進制)。

(3)從雙方信任的D那裏獲得B的公鑰。如果A和B有一個共同的朋友D,而D知道他手中的B的公鑰是正確的。D簽名的B的公鑰上載到BBS上讓用戶去拿,A想要獲得B的公鑰就必須先獲取D的公鑰來解密BBS或網上經過D簽名的B的公鑰,這樣就等於加了雙重保險,一般沒有可能去篡改而不被用戶發現,即使是BBS管理員。這就是從公共渠道傳遞公鑰的安全手段。有可能A拿到的D或其他簽名的朋友的公鑰也是假的,但這就要求攻擊者C必須對三人甚至很多人都很熟悉,這樣的可能性不大,而且必需經過長時間的策劃。

只通過一個簽名證力度可能是小了一點,於是PGP把用不同私鑰簽名的公鑰收集在一起,發送到公共場合,希望大部分從至少認識其中一個,從而間接認證了用戶(A)的公鑰。同樣用戶(D)簽了朋友(A)的公鑰後應該寄回給他(A)(朋友),這樣可以讓他(A)通過該用戶(D)被該用戶(D)的其他朋友所認證。與現實中人的交往一樣。PGP會自動根據用戶拿到的公鑰分析出哪些是朋友介紹來的簽名的公鑰,把它們賦以不同的信任級別,供用戶參考決定對它們的信任程度。也可指定某人有幾層轉介公鑰的能力,這種能力隨著認證的傳遞而遞減的。

(4)由一個普通信任的機構擔當第三方,即“認證機構”。這樣的“認證機構”適合由非個人控制的組織或政府機構充當,來註冊和管理用戶的密鑰對。現在已經有等級認證制定的機構存在,如廣東省電子商務電子認證中心(WWW.cnca.net)就是一個這樣的認證機構。對於那些非常分散的用戶,PGP更贊成使用私人方式的密鑰轉介。

3.3 信任的使用

PGP確實為公開密鑰附加侂任和開發信任信息提供了一種方便的方法使用信任。

公開密鑰環的每個實體都是一個公開的密鑰證書。與每個這親的實體相聯系的是密鑰合法性字段,用來指示PGP信任“這是這個用戶合法的公開密鑰”的程度;信任程度越高,這個用戶ID與這個密鑰的綁定越緊密。這個字段由PGP計算。與每個實體相聯系的還有用戶收集的多個簽名。反過來,每個簽名都帶有簽名信任字段,用來指示該PGP用戶信任簽名者對這個公開密鑰證明的程度。密鑰合法性字段是從這個實體的一組簽名信任字節中推導出來的。最後,每個實體定義了與特定的擁有者相聯系的公開密鑰,包括擁有者信任字段,用來指示這個公開密鑰對其他公開密鑰證書進行簽名的信任程度(這個信任程度是由該用戶指定的)。可以把簽名信任字段看成是來自於其他實體的擁有者信任字段的副本。

例如正在處理用戶A的公開密鑰環,操作描述如(1)當A在公開密鑰環中插入了新的公開密鑰時,PGP為與這個公開密鑰擁有者相關聯的信任標誌賦值,插入KUa,則賦值=1終極信任;否則,需說明這個擁有者是未知的、不可任信的、少量信任的和完全可信的等,賦以相應的權重值1/x、1/y等。

(2)當新的公開密鑰輸入後,可以在它上面附加一個或多個簽名,以後還可以增加更多的簽名。在實體中插入簽名時,PGP在公開密鑰環中搜索,查看這個簽名的作者是否屬於已知的公開密鑰擁有者。如果是,為這個簽名的SIGTRUST字段賦以該擁的者的OWNERTRUST值。否則,賦以不認識的用戶值。

(3)密鑰合法性字段的值是在這個實體的簽名信任字段的基礎上計算的。如果至少一個簽名具有終極信任的值,那麽密鑰合法性字段的設置為完全;否則,PGP計算信任值的權重和。對於總是可信任的簽名賦以1/x的權重,對於通常可信任的簽名賦以權重1/y,其中x和y都是用戶可配置的參數。當介紹者的密鑰/用戶ID綁定的權重總達到1時,綁定被認為是值得信任的,密鑰合法性被設置為完全。因此,在沒有終極信任的情況下,需要至少x個簽名總是可信的,或者至少y個簽名是可信的,或者上述兩種情況的某種組合。如圖4所示。
總之,PGP采用了RSA和傳統加密的雜合算法,用於數字簽名的郵件文摘算法、加密前壓縮等,可以用來加密文件,還可以代替Uuencode生成RADIX 64格式(就是MIME的BASE 64格式)的編碼文件。PGP創造性地把RSA公鑰體系的方便和傳統加密體系的高速度結合起來,並且在數字簽名和密鑰認證管理機制上有巧妙的設計。這是目前最難破譯的密碼體系之一。
用戶通過PGP的軟件加密程序,可以在不安全的通信鏈路上創建安全的消息和通信。PGP協議已經成為公鑰加密技術和全球範圍內消息安全性的事實標準。因為所有人都能看到它的源代碼,從而查找出故障和安全性漏局。

PGP工作原理及其安全體制