PGP中的每個公鑰和私鑰都伴隨著壹個密鑰證書。它壹般包含以下內容:
密鑰內容(用長達百位的大數字表示的密鑰)
密鑰類型(表示該密鑰為公鑰還是私鑰)
密鑰長度(密鑰的長度,以二進制位表示)
密鑰編號(用以唯壹標識該密鑰)
創建時間
用戶標識 (密鑰創建人的信息,如姓名、電子郵件等)
密鑰指紋(為128位的數字,是密鑰內容的提要表示密鑰唯壹的特征)
中介人簽名(中介人的數字簽名,聲明該密鑰及其所有者的真實性,包括中介人的密鑰編號和標識信息)
PGP把公鑰和私鑰存放在密鑰環(KEYR)文件中。PGP提供有效的算法查找用戶需要的密鑰。
PGP在多處需要用到口令,它主要起到保護私鑰的作用。由於私鑰太長且無規律,所以難以記憶。PGP把它用口令加密後存入密鑰環,這樣用戶可以用易記的口令間接使用私鑰。
PGP的每個私鑰都由壹個相應的口令加密。PGP主要在3處需要用戶輸入口令:
需要解開受到的加密信息時,PGP需要用戶輸入口令,取出私鑰解密信息
當用戶需要為文件或信息簽字時,用戶輸入口令,取出私鑰加密
對磁盤上的文件進行傳統加密時,需要用戶輸入口令
2.以上介紹了PGP的工作流程,下面將簡介與PGP相關的加密、解密方法以及PGP的密鑰管理機制。
PGP是壹種供大眾使用的加密軟件。電子郵件通過開放的網絡傳輸,網絡上的其他人都可以監聽或者截取郵件,來獲得郵件的內容,因而郵件的安全問題就比較突出了。保護信息不被第三者獲得,這就需要加密技術。還有壹個問題就是信息認證,如何讓收信人確信郵件沒有被第三者篡改,這就需要數字簽名技術。RSA公匙體系的特點使它非常適合用來滿足上述兩個要求:保密性(Privacy)和認證性(Authentication)。
RSA(Rivest-Shamir-Adleman)算法是壹種基於大數不可能質因數分解假設的公匙體系。簡單地說就是找兩個很大的質數,壹個公開即公鑰,另壹個不告訴任何人,即私鑰。這兩個密匙是互補的,就是說用公匙加密的密文可以用私匙解密,反過來也壹樣。
假設甲要寄信給乙,他們互相知道對方的公匙。甲就用乙的公匙加密郵件寄出,乙收到後就可以用自己的私匙解密出甲的原文。由於沒別人知道乙的私匙,所以即使是甲本人也無法解密那封信,這就解決了信件保密的問題。另壹方面由於每個人都知道乙的公匙,他們都可以給乙發信,那麽乙就無法確信是不是甲的來信。這時候就需要用數字簽名來認證。
在說明數字簽名前先要解釋壹下什麽是“郵件文摘”(message digest)。郵件文摘就是對壹封郵件用某種算法算出壹個最能體現這封郵件特征的數來,壹旦郵件有任何改變這個數都會變化,那麽這個數加上作者的名字(實際上在作者的密匙裏)還有日期等等,就可以作為壹個簽名了。PGP是用壹個128位的二進制數作為“郵件文摘”的,用來產生它的算法叫MD5(message digest 5)。 MD5是壹種單向散列算法,它不像CRC校驗碼,很難找到壹份替代的郵件與原件具有同樣的MD5特征值。
回到數字簽名上來,甲用自己的私匙將上述的128位的特征值加密,附加在郵件後,再用乙的公匙將整個郵件加密。這樣這份密文被乙收到以後,乙用自己的私匙將郵件解密,得到甲的原文和簽名,乙的PGP也從原文計算出壹個128位的特征值來和用甲的公匙解密簽名所得到的數比較,如果符合就說明這份郵件確實是甲寄來的。這樣兩個安全性要求都得到了滿足。
PGP還可以只簽名而不加密,這適用於公開發表聲明時,聲明人為了證實自己的身份,可以用自己的私匙簽名。這樣就可以讓收件人能確認發信人的身份,也可以防止發信人抵賴自己的聲明。這壹點在商業領域有很大的應用前途,它可以防止發信人抵賴和信件被途中篡改。