跳至主內容

Pretty Good Privacy (PGP) 指南

發佈日期: 2001年11月01日 4767 觀看次數

PGP 簡介

PGP 是 "Pretty Good Privacy" (良好隱私)的縮寫。

 

PGP 的創始人是美國的 Phil Zimmermann。他創造性地把 RSA 公鑰體系的安全方便和傳統加密體系的高速結合起來,並且在數字簽名和密鑰認証管理機制上有獨到的設計。因此PGP成為世界上最流行的加密軟件包。

 

PGP 目前具有運行于 MS-DOS、UNIX、VAX/VMS等 各種不同類型操作系統上的版本,可以用它來對電子郵件保密以防止非授權者閱讀,或者使用它來在郵件加上數字簽名從而使收信人可以確認郵件是發信人的。它讓 從未見過的人們保密地通信,而事先並不需要任何保密的渠道用來傳遞密鑰。它的功能強大,速度很快。而且,它的源代碼是免費提供的。

 

實際上PGP的功能還不止上面說的那些。它還可以用來加密文件,還可以用它代替 UUencode 生成 RADIX 64 格式(就是MIME 的 BASE64格式)的編碼文件。

 

PGP是一種供大眾使用的加密軟件。加密是為了安全,隱私權是一種基 本人權。在現代社會裡,電子郵件和網絡上的文件傳輸已經成為生活的一部份。郵件的安全問題就日益突出了,大家都知道在互聯網上傳輸的數據是不加密的。如果 你自己不保護自己的信息,第三者就會輕易獲得你的隱秘。還有一個問題就是信息認証,如果讓收信人確信郵件沒有被第三者篡改,就需要數字簽名技術。RSA 公鑰體系的特點使它非常適合用來滿足上述兩個要求:保密性(Privacy)和認証性(Authentication)。

 

 

PGP 的一般用途

  1. 加密的電子郵件

我們一般的 E-mail 是明碼傳送的,在經過互聯網上多個主機轉發後,我們無法保証它不曾被他人截獲過。使用PGP則可以非常安全地發送機密信件。首先通過明碼傳送或查密鑰服務器得到收件人的 "public key"(公鑰),然後用這個 "public key"先加密信件,再發送出去。由於這封信只有與這個 "public key" 對應的 "private key"(私鑰)能解密,而"private key"只掌握在收件人手中,即使別人截獲這封信也不可能解得開,從而保証了信件的安全。

  1. 數字簽名

當你往Internet上發送一篇文章或一個文件時,別人怎麼保証這是你發的而不是別人冒名頂替的呢?用數字簽名就可以解決這個問題。你先用你的 "private key" 加密你的簽名,然後發出去。別人收到以後就用你的 "public key" 去解,如果解開了,那你就是貨真價實的了。解不開的話,肯定是冒名頂替的。因為你的 "private key" 只有你個人才擁有,誰都不可能偽造。

 

在說明數字簽名前先要解釋一下什麼是「信息特徵 証」(message digest),常用的就是對一封郵件用某種算法算出一個最能體現這封郵件特徵的數來,一旦郵件有任何改變,這個數都會變化,那麼這個數加上作者的名字 (實際上在作者的密鑰裡)還有日期等等,就可以作為一個簽名了。確切地說PGP是用一個128位的二進制數作為「信息特徵」的,用來產生它的算法叫 MD5(message digest 5)。

 

回到數字簽名上來,甲用自已的私鑰將上述的128位的特徵值加 密,附加在郵件後,再用乙的公鑰將整個郵件加密。(注意這裡的次序,如果先加密再簽名的話,別人可以將簽名去掉後簽上自已的簽名,從而篡改了簽名)。這樣 這份密文被乙收到以後,乙用自己的私鑰將郵件解密,得到甲的原文和簽名,乙的PGP也從原文計算出一個128位特徵值,用以比較用甲的公鑰解密其簽名所得 到的特徵值,如果兩者符合就說明這份郵件確實是甲寄來的。這樣兩個安全性要求都得到了滿足。

 

PGP可以只簽名而不加密,這適用於公開發表聲明時,聲明人為了証實自已的身份(在網絡上只能如此了),可以用自已的私鑰簽名。這樣就可以讓收件人能確認發信人的身份,也可以防止發信人抵賴自已的聲明,並防止信件在發送途中被篡改。這一點在商業領域有很大的應用前途。

 

 

PGP原理

PGP實際上用來加密的不是RSA本身,而是採用了一種叫IDEA的 單密鑰加密算法。IDEA的加/解密速度比RSA快得多,所以實際上PGP是以一個隨機生成的密鑰(每次不同),用IDEA算法對明文加密,然後用RSA 算法對該密鑰加密。這樣收件人同樣是用RSA解密出這個隨機密鑰,再用IDEA解密郵件本身。這樣的收件鏈式加密就做到了既有RSA體系的保密性,又有 IDEA算法的快捷性。

 

PGP的加密前有個預壓縮處理,PGP內核使用PKZIP算法來壓縮 加密前的明文。一方面對網絡傳輸而言,壓縮後加密再經過7bits編碼密文有可能比明文更短,這就節省了網絡傳輸的時間。另一方面,明文經過壓縮,實際上 相當於經過一次變換,信息更加雜亂無章,對明文攻擊的抵禦能力更強。

  1. 公鑰的管理

一個成熟的加密體系必然要有一個成熟的密鑰管理機制配套。公鑰體制的提出就是為了解決傳統加密體系的密鑰分配過程難以保密的缺點。

PGP建議,由一個大家普遍信任的機構擔當「公鑰服務器」或「密 鑰侍者」,每個由它簽字的公鑰都被認為是真的,這樣大家只要有一份它的公鑰就行了。認証這個機構的公鑰是方便的,因為它的公鑰廣為流傳,假冒它的公鑰是極 困難的。這樣的「權威」適合由計算機組織或政府機構充當,現在已經有很多這樣的機構存在。對於非商業性的應用,PGP更贊成使用私人方式的密鑰轉介方式, 因為這樣的非官方途徑更能反映出人們自然的社會交往,而且人們也能自由地選擇信任的人來介紹,就和不認識的人通過介紹人互相介紹而交往一樣。每個公鑰有至 少一個「用戶名」(User ID),使用者應盡量用自已的全名,再加上本人的Email地址,以免因重名而混淆。

注意,你所必須遵循的一條規則是:在你使用任何一個公鑰之前,一 定要首先認証它!無論你受到甚麼誘惑,你都不要,絕對不要,直接信任一個從公共渠道(尤其是那些看起來保密的)得來的公鑰,記得要用熟人介紹的公鑰,或者 權威機構的認証。同樣你也不要隨便為別人簽字認証他們的公鑰,以你自已的信譽擔保作冒險,就和你在現實生活中一樣,你家裡的門鑰匙只會交給你十分信任的 人。

  1. 私鑰的保存

相對公鑰而言,私鑰不存在被篡改的問題,但存在泄露的問題。 RSA的私鑰是很長的一個數字,用戶不可能將它記住,PGP的辦法是讓用戶為隨機生成的RSA私鑰指定一個相對簡單的的口令(pass phrase),只有通過給出口令才能將私鑰釋放出來使用。用口令加密私鑰的保密程度和PGP本身是一樣的,所以私鑰的安全性問題首先是對用戶口令的保 密。當然私鑰文件本身失密也很危險,因為破譯者所需要的只是用盡方法試探出你的口令,雖說很困難但畢竟是損失了一層安全感。簡單地記住一點:要像任何隱私一樣保藏你的用戶口令,不要讓任何人有機會接觸到它, 最好只在大腦中保存它, 不要寫在紙上.

PGP 在安全性問題上的審慎考慮體現在PGP的各個環節。比如每次加密的實際密鑰是個隨機數,大家都知道計算機是無法產生真正的隨機數的。PGP程序對隨機數的產生是審慎的,關鍵的隨機數像PGP初始密鑰的產生是從用戶敲鍵盤的時間間隔上取得隨機數種子的. 對於磁盤上的randseed.bin文件是採用和郵件同樣強度的加密的。這有效地防止了他人從你的randseed.bin文件中分析出你的加密實際密鑰的規律來。

 

 

節錄自:余建斌編著「黑客的攻擊手段及用戶對策」

人民郵電出版社 , 1998