數據加密、摘要算法

1.加密的歷史

作爲保障數據安全的一種方式,對於信息的加密技巧起源於歐洲,公元前2000年,埃及人是最先使用象形文字作爲信息編碼的人。隨着時間推移,巴比倫、美索不達米亞和希臘文明都開始使用一些方法來保護他們的書面信息(明文)。後來,被Julias Caesar(凱撒大帝)使用,也曾用於歷次戰爭中,包括美國獨立戰爭、美國內戰和兩次世界大戰。
最廣爲人知的編碼機器是德國的German Enigma,在第二次世界大戰中德國人利用它創建了加密信息系統,從而解決軍事信息的保密通訊問題。此後,由於Alan Turing和Ultra計劃以及其他工程技術人員的不泄努力,盟軍終於對德國人的密碼成功破譯了,進而導致第二次世界大戰結束。
當初,美國人對於計算機的研究,主要目的是用於破解德國人的通訊密碼,這在當時,人們並沒有意識到計算機技術此後的發展會影響世界歷史進程,從而在全球引發了一場信息革命。隨着計算機的發展,運算能力的增強,傳統的密碼知識和技能都變得十分簡單了而很容易被人破解,於是人們又不斷地研究出了新的數據加密方式,如私有密鑰算法和公共密鑰算法。可以說,是計算機技術的飛速發展在推動了數據加密技術的發展。

2.什麼是數據加密

儘管加密技術被首先使用在軍事通信領域,但是人們或許出於安全的考量,開始逐漸對於商業機密、政府文件等重要信息實施加密手段。數據加密應運而生。其基本原理是:
對明文(可讀懂的信息)進行翻譯,使用不同的算法對明文以代碼形式(密碼)實施加密。該過程的逆過程稱爲解密,即將該編碼信息轉化爲明文的過程。
從事數據加密研究的人稱爲密碼編碼者(Cryptographer),而從事對密碼解密的專業人士稱爲密碼分析者(Cryptanalyst)。如今數據加密技術被廣泛地應用與國民經濟各個領域,特別是政府機關和國防情報部門,此外才是科學研究機關、商業部門、新聞出版、金融證券、交通管制與電力輸送等部門。

3.爲什麼需要對數據進行加密?

因特網是不安全的信息傳輸載體,它所遵循的通訊協議(TCP/IP協議)是脆弱的,當初設計該協議的初衷並非是對信息安全的考慮,而是出於對通信自由的考量。因此,一些基於TCP/IP協議的服務也是極不安全;另一方面,因特網給衆多的商家帶來了無限的商機,許多網絡黑客依照經濟利益或個人愛好,往往專門跟蹤Internet的特殊羣體或個別敏感用戶,盜取他們的網絡身份或銀行帳戶信息,再冒充合法用戶的身份,進一步侵入信息系統,非法盜取經濟、政治、軍事機密。爲了保證因特網的安全和充分發揮其商業信息交換的價值,人們選擇了數據加密技術的對訪問Internet網絡的用戶實施身份認證。
加密技術在網絡上的應用概括起來有:①數據加密 ②身份認證 ③數字簽名和防止個人的否認事實(撒謊)行爲。其次就是對於黑客的非法入侵行爲在網絡上進行攔截。許多安全防護體系是基於密碼的,密碼一旦泄露出去可以導致很多的安全隱患,甚至導致網絡的全面崩潰。
當人在網絡上進行訪問時必須進入第一道門口——登錄,你所鍵入的密碼(Password)以明文的形式被傳輸到用戶服務器上,系統自動對你的用戶身份進行鑑別,這就是身份認證。確定你的身份後才容許你訪問或通訊。
在網絡上的竊聽是一件極爲容易的事情,今天在Internet網上到處充斥着各種各樣的黑客程序,很多是基於訪問控制的攻擊型程序。因此很有可能會有黑客嗅探並竊得用戶的密碼,如果用戶是Root用戶或Administrator用戶,那後果將是極爲嚴重的。網絡上的數據被嗅探和劫持必將或給網絡帶來安全隱患。
解決類似的網絡攻擊行爲的防護措施之一就是對數據加密,加密的口令即使被黑客獲得也是不可讀的,除非加密密鑰或加密方式十分脆弱,黑客很容易破解。不管怎樣,加密的使用使黑客不會輕易獲得口令。
身份認證是基於加密技術的,它的作用就是用來確定用戶是否是真實的。
簡單的例子就是電子郵件,當用戶收到一封電子郵件時,郵件上面標有發信人的姓名和信箱地址,很多人可能會簡單地認爲發信人就是信上說明的那個人,但實際上僞造一封電子郵件對於一個通常人來說是極爲容易的事。在這種情況下,用戶需要用電子郵件源身份認證技術來防止電子郵件僞造,這樣就有理由用戶寫信的人就是信頭上說明的人,有些站點提供入站FTPWWW服務,當然用戶通常接觸的這類服務是匿名服務,用戶的權力要受到限制,但也有的這類服務不是匿名的,如公司爲了信息交流提供用戶的合作伙伴非匿名的FTP服務,或開發小組把他們的Web網頁上載到用戶的WWW服務器上,現在的問題就是,用戶如何確定正在訪問用戶服務器的人就是合法用戶呢?採用身份認證便可以解決這個問題。
有些時候,用戶可能需要對一些機密文件進行加密,並不一定因爲要在網絡間進行傳輸,而是要防止別人竊得計算機密碼而獲得該機密文件,因此要對數據實行加密,從而實現多重保護。例如,在UNIX系統中可以用crypt(3)命令對文件進行加密,儘管這種加密手段如今已不是那麼先進,甚至有被破解的可能,但是最起碼可以保證文件的完整無誤地傳輸到信息接受方。

4.加密密鑰

加密算法通常是公開的,比較常用的密碼體制有DESIDEA等。一般把受保護的原始信息稱爲明文,編碼後的數據就是密文。儘管大家都知道加密方法是公開的,但對密文進行破譯是需要專一的密鑰的,密鑰是保密的不是任何人都可以輕易拿到的。一旦你獲得專一的密鑰祕密對於你就是公開的了。

(一)保密密鑰和公開(私有)密鑰

有兩類基本的加密算法可供對文件加密者選擇:保密密鑰和公開/私有密鑰。在保密密鑰中,加密者和解密者使用相同的密鑰,被稱爲非對稱密鑰,這類算法有DESIDEA。這種加密算法的問題是,用戶必須讓接收信息者知道自己所使用的密鑰,這個密鑰需要雙方共同保密,任何一方的失誤都會導致機密的泄露。而且在告訴收件人密鑰過程中,還需要的防止任何人發現或竊取密鑰,這個過程被稱爲密鑰發佈。有些認證系統在會話初期用明文傳送密鑰,這就存在密鑰被截獲的可能性。
需要使用保密密鑰對加密密鑰的信息再加密。
另一類加密技術是公開/私有密鑰,與非對稱密鑰體制不同的是,它使用相互關聯的一對密鑰,一個是公開的密鑰,任何人都可以知道,另一個是私有密鑰(專一密鑰),只有擁有該對密鑰的人才有,其他人並沒有保管它。假如某甲發信給保存專一密鑰的乙方,乙接收到加密信息後,就用他自己保存的密鑰進行解密,而且只有乙方持有的私有密鑰可以解密。這種加密方式的好處顯而易見。密鑰只有一個人持有,也就更加容易進行保密,因爲不需在網絡上傳送私人密鑰,也就不用擔心別人在認證會話初期劫持密鑰。
下面把公開/私有密鑰技術總結爲以下三個要點:
1、公開鑰/私有密鑰有兩個相互關聯的密鑰。
2、公開密鑰加密的文件只有私有密鑰能解開。
3、私有密鑰加密的文件只有公開密鑰能解開,這一特點被用於PGPpretty good privacy)。

二)摘要函數(MD2MD4MD5-----數字簽名

摘要是一種防止數據被私自改動的方法,其中用到的函數叫摘要函數。這些函數的輸入可以是任意大小的消息,而輸出是一個固定長度的摘要。摘要有這樣一個性質,如果改變了輸入消息中的任何東西,甚至只有一位,輸出的摘要將會發生不可預測的改變,也就是說輸入消息的每一位數字對輸出摘要都會有影響。總之,摘要算法從給定的文本塊中產生一個數字簽名(fingerprintmessage digest),數字簽名可以用於防止有人從一個簽名上獲取文本信息或改變文本信息內容。摘要算法的數字簽名原理在很多加密算法中都被使用,如S/KEYPGPpretty good privacy)。
現在流行的摘要函數有MD4MD5,下面就來討論一下它們。記住,客戶機和服務器必須使用相同的算法,無論是MD4還是MD5,MD4客戶機不能和MD5服務器交互。
MD2摘要算法的設計是出於下面的考慮:利用32RISC結構來最大其吞吐量,而不需要大量的替換表(substitution table)。
MD4算法是把消息的給予,對長度而言作爲一個輸入,產生一個128位的"指紋""消息化"。要產生兩個具有相同消息化的文字塊或者產生任何具有預先給定"指紋"的消息,都被認爲在計算上是不可能的。
MD5摘要算法是個數據認證標準。MD5的設計思想是要找出速度更快但更不安全的MD4中潛在的不安全,MD5的設計者通過使MD5在計算上慢下來,以及對這些計算做了一些基礎性的改動來解決這個問題。MD5RFC1321中給出文檔描述,是MD4算法的一個擴展。

5.密鑰的管理和分發

一、使用同樣密鑰的時間範圍
   用戶可以一次又一次地使用同樣原密鑰與別人交換信息,但要考慮以下的情況:
    1.如果某人偶然地接觸到了用戶的密鑰,那麼用戶曾經和另一個人交換的每一條消息都不再是保密的了。
    2.使用一個特定密鑰加密的信息越多,提供給竊聽者的材料也就越多,這就增加了他們成功的機會。
    因此,一般強調僅將一個對話密鑰用於一條信息中或一次對話中,或者建立一種按時更換密鑰的機制,以減小密鑰暴露的可能性。
 二、保密密鑰的分發
     假設在某機構中有100個人,如果他們任意兩人之間可以進行祕密對話,那麼總共需要多少密鑰呢?每個人需要知道多少密鑰呢?很容易得出答案,十個連網用戶需要45個密鑰,如果是100人中的任意兩人之間要用不同的密鑰對話,則該羣體總共需要4950對密鑰,而且每個人應記住99個密鑰。如果機構的人數是100010000人或更多呢,顯然這種方式過於愚蠢了,管理密鑰將是一件可怕的事情。
Kerberos提供了一種較好的密鑰管理解決方案,它是由美國MTI (麻省理工學院)發明的,使密鑰的管理和分發變得十分方便,但該方法本身還存在一定的缺陷。爲能在因特網上提供一個實用的解決方案 Kerberos建立了一個安全的、可信任的密鑰分發中心(Key Distribution Center, KDC),每個用戶只要知道一個和KDC進行通訊的密鑰就可以了,而不需要知道成百上千個不同的密鑰。發放密鑰和生成密鑰由KDC負責。方式如下:
     假設A想要和B進行祕密通信,則A先和KDC通信,使用只有AKDC知道的密鑰進行加密 A告訴KDC他想和B通信,KDC會爲AB之間的會話隨機選擇一對對話密鑰,比如“wa6lkj9ds5bc”,並生成一個標籤,這個標籤由KDCB之間的密鑰進行加密,並在A啓動與B對話時,A會把這個標籤交給B。爲什麼會生成這樣一個標籤呢?這個標籤的作用是讓A確信和他交談的人就是B,而不是冒充者。因爲這個標籤是由只有BKDC知道的密鑰進行加密的,所以即使冒充者得到A發出的標籤也不可能進行解密,只有B收到後才能夠進行解密,從而確定了與A對話的人就是B
     KDC生成標籤和隨機發放,就會把它們用只有AKDC知道的密鑰進行加密,然後把標籤和發放的密鑰傳給A,加密的結果可以確保只有A能得到這個信息,只有A能利用這個會話密鑰和B進行通話(唯一性)。同理,KDC會把會話密碼用只有KDCB知道的密鑰加密,並把會話密鑰傳給B
A會啓動一個和B的會話行爲,並用得到的會話密鑰加密自己和B的會話,於此同時還要把KDC傳給A的標籤再發給B,以確定B 的身份。然後AB之間就可以用會話密鑰進行安全會話了,而且爲了保證安全,這個會話密鑰是一次性的,這樣黑客就更難進行破解了。

6.一次性密碼

通常使用的計算機口令是靜態的,也就是說在一定時間內是不變的,而且可重複使用。前面已經提到過,口令極易被網上嗅探劫持,有鑑於此,人們發明的一次性密碼。難道在每次會話後修改一次密碼嗎?顯然這樣做是極其愚蠢的,那樣太累人了。事實上,人們已經發明瞭一種產生一次性口令的技術,稱之爲挑戰/ 回答(challenge/response
    口令,不管是靜態口令還是一次性口令,都是基於"用戶知道什麼"這一理論的。比如說,靜態密碼是用戶和機器之間共享的一種信息,而其他人不知道,這樣用戶若知道這個口令,就說明用戶是機器所確認的那個人。一次性口令也一樣,用戶和機器之間必須共知一條通行短語,而這條通行短語對外界是完全保密的。和靜態口令不同的是,這個通行短語並不在網絡上進行傳輸,所以黑客通過網絡竊聽是絕對截獲不了的。每次的口令是三個因數按一定算法計算得到的結果,這三個因子分別是種子、迭代值和通行短語。
種子(seed:決定於用戶,一般在一臺機器上,一個種子對應於一個用戶,也就是說,種子在一個系統中應具有唯一性,這是祕密的而是公開的。
    迭代值iteration):迭代值是不斷變化的,而種子和通行短語是相對不變的,所以迭代值的作用就是使口令發生變化。
    通行短語phrase:通行短語是保密的,而迭代值是公開的,這樣就決定了口令的機密性。
     當用戶登錄時,系統會向用戶提出挑戰,包括種子和迭代值,然後用戶用得到的種子和迭代值再加上自己知道的通行短語計算出一個答覆,並傳送給系統,因爲系統也知道這個通行短語,所以系統可以驗證答覆正確與否。

7.數據加密標準Data Encryption Standard

最著名的保密密鑰(或對稱密鑰)加密算法DES (Data Encryption Standard ) 是由IBM公司在70年代發展起來的,並經政府的加密標準篩選後,於197611月被美國政府採用,DES隨後被美國國家標準局和美國國家標準協會(American National Standard Institute,ANSI)承認並給予公佈。
DES使用56位密鑰對64位的數據塊進行加密,並對64位的數據塊進行16輪編碼。與每輪編碼時,一個48位的"每輪"密鑰值由56位的完整密鑰得出來。DES用軟件進行解碼需用很長時間,而用硬件解碼速度非常快。幸運的是,當時大多數黑客並沒有足夠的設備製造出這種硬件設備。在1977年,人們估計要耗資兩千萬美元才能建成一個專門計算機用於DES的解密,而且需要12個小時的破解才能得到結果。當時DES被認爲是一種十分強壯的加密方法。
但是,當今的計算機速度越來越快了,製造一臺這樣特殊的機器的花費已經降到了十萬美元左右,而用它來保護十億美元的銀行間線纜時,就要仔細斟酌了。另一方面,如果只用它來保護一臺服務器,那麼DES確實是一種好的辦法,因爲黑客絕不會僅僅爲入侵一個服務器而花那麼多的錢破解DES密文。由於現在已經能用二十萬美元製造一臺破譯DES的特殊的計算機,所以現在對要求"強壯"的加密場合已經不再適用了。
三重DES
     確定一種新的加密體制是否真正的安全是極爲困難的事情,何況DES的密碼學缺點是密鑰長度相對比較短,現階段之所以人們並沒有完全放棄使用DES,是它的優勢還很明顯。改進其長度的方法,就是採用三重DES,。這種方法用兩個密鑰對明文進行三次加密,假設兩個密鑰是K1K2。加密方法是:
   1.用密鑰K1進行DES解密。
   2.K2對步驟1結果進行DES解密。
   3.用步驟2的結果使用密鑰K1進行DES加密。
   這種方法的缺點,是要花費原來三倍,但從另一方面來看,三重DES112位密鑰長度是很"強壯"的加密方式了。

8.電子商務與加密技術

電子商務(E-business)的最大特點就是顧客可以在網上進行交易,不必擔心自己的信用卡會被人盜用。但是,假如用戶的號碼和合同被竊賊獲到,盜竊者便可通過電話訂貨,而且冒用用戶的名義使用信用卡進行結算。這種交易的高風險性長期阻礙着電子商務的發展,於是人們開始用RSA(一種公開/私有密鑰)提高信用卡交易的安全性,從而使電子商務走向實用成爲可能。
      許多人認爲NETSCAPE公司是Internet商業中領先技術的提供者,該公司提供了一種基於RSA和保密密鑰的應用於因特網的技術,被稱爲安全插座層Secure Sockets Layer,SSL。也許很多人知道Socket,它是一個編程界面,並不提供任何安全措施,而SSL不但提供編程界面,而且向上提供一種安全的服務,SSL3.0現在已經應用到了服務器和瀏覽器上,SSL2.0則只能應用於服務器端。SSL3.0用一種電子證書(electric certificate)的措施來實行身份認證,之後,雙方就可以用保密密鑰進行安全的會話了。
     基於SSL3.0提供的安全保障,用戶就可以自由的從商務網站訂購商品,並且輸入信用卡號,也可以在網上和合作伙伴交流商業信息並且讓供應商把訂單和收貨單從網上發送過來,這樣可以節省大量的紙張,降低商品銷售成本,併爲公司節省大量的電話、傳真費用。在過去,電子信息交換(Electric Data Interchange,EDI)、信息交易(information transaction)和金融交易(financial transaction)都是在專用網絡上完成的,使用專用網的費用大大高於因特網。正是由於Internet的巨大誘惑,才使人們開始發展因特網上的電子商務,但不要忘記數據加密。

9.虛擬專用網絡(VPN,Virtual Private Network

現在,越多越多的公司走向國際化,一個公司可能在多個國家都有辦事機構或銷售中心,每一個機構都有自己的LANLocal Area Network局域網),但人們不會只滿足這此。用戶可能會要求將這些LAN連結在一起組成一個跨越地區和國界的公司廣域網。事實上,今天的IBM、微軟等國際知名企業公司都已經這樣做了,但他們一般使用租用線路(leased line)來連結這些局域網 ,因爲他們考慮到網絡安全問題。現在具有加密/解密功能的路由器使人們使用因特網作爲連接這些局域網的通道成爲可能,這就是虛擬專用網絡的概念(Virtual Private Network ,VPN)。
當數據離開發送者所在的局域網時,這些數據被連接到因特網路由器上進行加密,數據在Internet上是以加密的形式傳送,當加密數據到達目的LAN的路由器時,該路由器自動地對加密數據進行解密,這樣目標LAN中的用戶就可以看到真實的信息了。

10.PGP加密軟件 具有非常好的隱祕性

PGPPretty Good Privacy)是一個基於RSA公鑰加密體制的郵件加密軟件。可用它對郵件加密以防止非授權者閱讀,PGP還能對用戶的郵件加上數字簽名(fingerprint,指紋),從而使收信人可以確信該郵件是由該用戶發出的。它讓用戶可以安全地和從未見過面的人們通信,事先並不需要任何保密通道來傳遞密鑰。
PGP採用以下技術:審慎的密鑰管理、一種RSA和傳統加密的雜合算法,用於數字簽名的郵件摘要函數算法和加密的雜合算法、用於數字簽名的郵件往往不加密前壓縮等,還有一個良好的人機工程設計。它功能強大、速度很快,而且其源代碼是免費的。
實際上PGP的功能還不止上面說的,PGP可以用來加密文件,還可以用PGP代替UUencode生成RADIX64格式(就是MIMEBASE 64格式)的編碼文件。
     PGP的創始人是美國的Phil Zimmermann。他的創造性在於他把RSA公鑰體系的方便和傳統加密體系的高速度結合起來,並且在數字簽名和密鑰認證管理機制上有巧妙的設計。因此PGP成爲幾乎最流行的公鑰加密軟件包。
     PGP是一種供大衆使用的加密軟件。
加密是爲了安全,私私權是一種基本人權。在現代社會裏,電子郵件和網絡上的文件傳輸已經成爲生活的一部分。郵件的安全問題也就突出了,大家都知道在因特網上傳輸的數據是不保密的。如果用戶不採取相應措施,來保護自己的數據,第三者(或黑客)就會輕易獲得用戶的隱私,進一步達到要挾或恐嚇正常用戶的目的。還有一個問題就是信息認證,如何讓收信人確信郵件沒有被第三者篡改,就需要使用數字簽名技術。RSA公鑰體制的特點使它非常適合用來滿足上述兩個要求:保密性(privacy)和認證性(authentication)。

RSA(Rivest-Shamir-Adleman)算法

基於大數不可能被質因數分解假設的公鑰體系。簡單地說就是找兩個很大的質數。一個公開給世界,一個不告訴任何人。一個稱爲"公鑰",另一個叫"私鑰"Prblic key & Secret key or Private key)。這兩個密鑰是互補的,也就是說用公鑰加密的密文可以用私鑰解密。反之同理。假設甲要寄信給乙,他們互相知道對方的公鑰。甲就用乙的公鑰加密郵件寄出,乙收到後就可以用自己的私鑰解密出甲的原文。由於別人不知道乙的私鑰,所以即使是甲本人也無法解密那封信,這就解決了信件保密的問題。另一方面,由於每個人都知道乙的公鑰,他們都可以給乙發信,那麼乙確信是不是由甲發過來的信。認證便出現了,這時就要使用數字簽名。

郵件文摘message digest

  在說明數字簽名前,先要解釋一下什麼是"郵件文摘"message digest),簡單地講就是對一封郵件用某種算法找出一個最能體現這封郵件屬性特徵的的數來,一旦郵件有任何改變這個數都會跟着起變化,那麼這個數加上用戶的名字(實際上在用戶的密鑰裏)和日期等等,就可以作爲一個數字簽名。確切地說PGP是用一個128位的二進制數進行爲"郵件文摘"的,用它來產生的算法叫MD5(Message Digest 5)MD5的提出者是Ron RirestPGP中使用的代碼是由Colin Plumb 編寫的,MD5本身是公用軟件,所以PGP的法律條款中沒有提到它。MD5是一種單向散列算法,(它不像校驗碼),可獲得一份替代的郵件與原件具有同樣的MD5特徵值。
假如,甲用自己的私鑰將上述的128位值加密(數字簽名),附加在郵件後,再用乙的公鑰將整個郵件加密(注意這裏的次序,如果先加密再簽名的話,別人可以將簽名去掉後簽上自己的簽名,從而篡改了簽名)。當這份密文被乙收到後,乙必須用自己的專一密鑰對該郵件解密,得到甲的原文和數字簽名,乙的PGP也從原文計算出一個128位的特徵值來和用甲的公鑰解密簽名所得到的數進行比對,如果符合特徵值,說明這份郵件確實是由甲寄來的。這樣兩個安全性要求都得到滿足。

數字簽名的不可抵賴性

PGP還可以只簽名而不加密,這適用於公開發表聲明時,聲明人爲了證實自己的身份(在網絡上只能如此了),可用自己的私鑰簽名,這樣就可以讓收件人能確認發信人的身份,也可以防止發信人抵賴自己的聲明。這一點在商業領域有很大的應用前途,可以防止發信人對諸如商業合同、信譽擔保等文件的抵賴和該文件被途中篡改等。
 

IDEA(國際數據加密算法)

爲什麼說PGP用的是RSA和傳統加密的雜合算法呢?
因爲RSA算法計算量很大而且在速度上也不適合加密大量數據,所以PGP實際上用來加密的不是RSA本身,而是採用了一種叫IDEA的傳統加密算法,首先解釋一下什麼叫傳統加密,簡單地說就是用一個密鑰加密明文,然後用同樣的密鑰解密。這種方法的代表是DES(US Federal Data Encryption Standard),也就是乘法加密,它的主要缺點就是公共通訊傳輸網絡解決不了安全性問題,不適合網絡環境郵件加密需要。
IDEA是一個有專利的算法,專利持有者是ETH和一個瑞士公司:Ascom-Tech AG。非商業用途的IDEA實現不用向他們交納費用。IDEA的加(解)密速度比RSA快得多,(據文獻介紹測算出IDEADES快兩倍,比RSA算法快100倍)所以實際上PGP是以一個隨機生成的密鑰(每次加密)用IDEA算法對明文加密,然後再用RSA算法對該密鑰加密。這樣收件人同樣是用RSA解出這個隨機密鑰,再用IDEA解密郵件本身。這樣的鏈式加密就做到了既有RSA體系的保密性,又有IDEA算法的快捷性。
PGP的鏈式加密就做到了既有RSA體系的保密性,又有IDEA算法的快捷性。PGP的創意有一半就在這一點上了,爲什麼RSA體系70年代就提出來,一直沒有推廣應用呢?速度太慢!那PGP創意的另一半在哪兒呢?

PGP的密鑰管理

一個成熟的加密體系必然要有一個成熟的密鑰管理機制配套。公鑰體制的提出就是爲了解決傳統加密體系的密鑰分配過程中保密的缺陷。比如網絡黑客們常用的手段之一就是"監聽"monitor),如果密鑰是通過網絡傳送就太危險了。舉個例子:Novell Netware的老版本中,用戶的密碼是以明文在線路中傳輸的,這樣監聽者輕易就獲得了他人的密碼。當然Netware4.1中數據包頭的用戶密碼現在是加密的。對PGP來說公鑰本來就要公開,就沒有防監聽的問題。但公鑰的發佈中仍然存在安全性問題,例如公鑰被篡改(public key tampering),這可能是公鑰密碼體系中最大漏洞 ,因爲大多數新手不能很快發現這一點。用戶必須確信用戶的公鑰屬於它看上去屬於的那個人。爲了把這個問題說清楚,先舉個例子進行說明,然後再說如何正確使用PGP堵塞這個漏洞。
以用戶和Alice通信爲例,假設用戶想給Alice的公鑰,用戶從BBS上下載了Alice的公鑰,並用它加密信件,用BBSEmail功能發給了Alice。不幸的是,用戶和Alice都不知道,另一個叫Charlie的用戶潛入BBS,把他自己使用Alice的名字生成密鑰對中的公鑰偷偷更換了Alice的公鑰。那用戶用來發信的公鑰的用戶名"Alice"。於是Charlie的公鑰來轉發用戶給Alice的信,這樣誰都不會起疑心他如果想找用戶發給Alice的信也是很容易的事,更有甚者,他還可僞造Alice的簽名給用戶或其他人發信,因爲用戶手中的公鑰是Charlie僞造的,用戶會以爲真是Alice的來信。

介紹人確認公鑰——公共渠道傳遞公鑰的安全手段

 防止上述情況出現的最好辦法是避免讓任何其他人有機會篡改公鑰,比如直接從Alice手中得到她的公鑰。然而當她在千里之外或無法見到時,這是很困難的。PGP發展了一種公鑰介紹機制來解決這個問題。舉例來說:如果用戶和Alice有一個共同的朋友David,而David知道他手中的Alice的公鑰是正確的(關於如何認證公鑰,PGP還有一種方法,後面會談到,這裏假設David已經和Alice認證過她的公鑰)。這樣David就成爲用戶和Alice之間的"介紹人"。這樣AliceDavid就可放心地把經過David簽過字的Alice的公鑰上載到BBS上供用戶去拿,沒人可能去篡改它而不被用戶發現,即使是BBS的管理員。這就是從公共渠道傳遞公鑰的安全手段。
 有人會問:如何安全地得到David的公鑰呢。這是個先有雞還是先有蛋的問題嗎?確實有可能用戶拿到的David的公鑰也是假的,但這就求這個搗蛋者參與整個過程,他必須對你們三人都很熟悉,還要策劃很久,這一般不可能,當然,PGP對這種可能也預防的建議,那就是由一個大家普遍信任的或機構擔當這個角色,他被稱爲"密鑰待者""認證權威",每個由他簽字的公鑰都被認爲是真的,這樣大家只要有他的公鑰就行了,證明此人的公鑰是方便的,因爲他廣泛提供這種服務,假冒他的公鑰是極困難的,而因爲他的公鑰流傳廣泛。這樣的"權威"適合由非個人控制的組織或政府機構充當,現在已經有等級認證制度的機構存在。(CA認證機構)
對於那些非常分散的用戶,PGP更贊成使用私人方式的密鑰轉介方式,因這樣有些非官方途徑更能反映出人們自然的社會交往,而且人們也能自由地選擇信任的人來介紹,總之和不認識的人們之間的交往一樣,每個公鑰至少有一個"用戶名"User ID),請儘量用自己的全名,再加上本人的E-mail地址,以免混淆。
轉介認證機制
下面,介紹如何通過電話認證密鑰。每個密鑰有它們自己的標識(keyID),keyID是一個8位十六進制數,兩個密鑰具有同keyID的可能性十億分之一,而且PGP還提供了一種更可靠的標識密鑰的方法:“密鑰指紋”( keys fingrprint ).每個密鑰對應一串數字(162位十六進制數),這個指紋重複的可能就更微乎其微了。而且任何人無法指定生成一個具有某個指紋的密鑰,密鑰是隨機生成的,從指紋也無法反推出密鑰來。用戶拿到某人密鑰後,就可和他在電話上覈對這個指紋,從而確認他的公鑰。
這又引出一方法,就是把不同簽名自己的公鑰收集在一起,發送到公共場合,這樣可以希望大部分人至少認識其中一個,從而間接認證了用戶的公鑰。同樣用戶簽了朋友的公鑰後應該寄回給他,這樣就可以讓他通過用戶,被用戶的其他朋友所認證。有點意思吧,和現實社會中人們的交往一樣。PGP會自動爲用戶拿到的公鑰中有哪些是朋友介紹來的,它會把它們分爲不同的信任級別,供用戶參考決定對它們的信任程度。也可指定某人有幾層轉介公鑰的能力,這種能力是隨着認證的傳遞而遞減的。

轉介認證機制

具有傳遞性,是個有趣的問題。PGP的作者Phil Zimmermann說過一名話:“信賴不具:我有個我相信決不撒謊的朋友。可是他是個認定不撒謊的傻瓜,很顯然我並不認爲總統決不撒謊。”

私鑰的保存

與傳統單密鑰體系一樣,私鑰保密是決定性的。相對公鑰而言,私鑰不存在被篡改的問題,但存在泄露的問題。RSA的私鑰是很長的一個數字,用戶不能將它記住,PGP的辦法是讓用戶爲隨機生成的RSA私鑰指定一個口令(pass phase)。只有通過給出口令才能將私鑰釋放出來使用,用口令加密私鑰的方法保密程度和PGP本身是一樣的,所有私鑰的安全性對用戶窮舉法試探出用戶的口令,雖說很困難但畢竟是損失了安全性。這裏只要簡單地記住一點,要像任何隱私一樣保藏自己私鑰,認證有機會接觸到它,最好只在大腦中保存它,不要寫在紙上。
PGP在安全性的審慎考慮體現在PGP的各個環節。比如每次加密的實際密鑰是隨機數,大都知道計算機無法產生真正的隨機數的。PGP程序對隨機數的產生是很審慎的,關鍵的隨機數(像RSA密鑰的產生)是從用戶敲鍵盤的時間間隔上取得隨機數種子的。對於磁盤上的rand seed.bin文件中分析出鑰的規律來。
     在這裏提一下PGP的加密前預壓縮處理,PGP內核使用PKZIP算法來壓縮加密前的明文。一方面對電子郵件而言,壓縮後加密再過7 bits編碼密文有可能比明文更短。這就節省了網絡傳輸的時間。另一方面,明文經過壓縮,實際上相當經過一次變換,信息更加雜亂無章,對明文抵禦能力更強。PGP中使用的PKZIP算法是經過原作者同意的。PKZIP算法是個公認的壓縮率壓縮速度都相當好的壓縮算法,在PGP中使用的是PKZIP2.0版本兼容的算法。
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章