和對稱加密算法一樣,非對稱加密算法也提供兩個函數(shù):消息加密和消息解密,但該算法較對稱加密算法有兩個重要的區(qū)別。首先,用于消息解密的密鑰值與用于消息加密的密鑰值不同;其次,非對稱加密算法比對稱加密算法慢數(shù)千倍,但在保護通信安全方面,非對稱加密算法卻具有對稱密碼難以企及的優(yōu)勢。
為說明這種優(yōu)勢,來回顧一下前面使用對稱加密算法的例子。Alice使用密鑰K加密消息并將其發(fā)送給Bob,Bob收到加密的消息后,使用密鑰K對其解密以恢復原始消息。這里存在一個問題,即Alice如何將用于加密消息的密鑰值發(fā)送給 Bob?答案是,Alice發(fā)送密鑰值給Bob時必須通過獨立的安全通信信道(即沒人能監(jiān)聽到該信道中的通信)。
這種使用獨立安全信道來交換對稱加密算法密鑰的需求會帶來更多問題。首先,如果有獨立的安全信道,為什么不直接用它發(fā)送原始消息?答案通常是安全信道的帶寬有限,如安全電話線或可信的送信人。其次,Alice和Bob能假定他們的密鑰值可以保持多久而不泄露(即不被其他人知道)以及他們應在何時交換新的密鑰值?對這兩個問題的回答屬于密鑰管理的范疇。
密鑰管理是使用加密算法時棘手的問題,它不僅涉及如何將密鑰值安全地分發(fā)給所有通信方,還涉及密鑰的生命周期管理、密鑰被破解時應采取什么措施等問題。Alice和Bob的密鑰管理需求可能并不復雜,他們可以通過電話(如果確定沒人監(jiān)聽)或通過掛號信來交換密碼。但如果Alice 不僅需要與Bob安全通信,還需要與許多其他人安全通信,那么她就需要與每個人交換密鑰(通過可靠的電話或掛號信),并管理這一系列密鑰,包括記住何時交換新密鑰、如何處理密鑰泄漏和密鑰不匹配(由于使用的密鑰不正確,接收方無法解密消息)等。當然,這些問題不只Alice會遇到,Bob和其他每個人都會遇到,他們都需要交換密鑰并處理這些令人頭痛的密鑰管理問題(事實上,X9.17是一項DES密鑰管理ANSI標準[ANSIX9.17])。
如果Alice要給數(shù)百人發(fā)送消息,那么事情將更麻煩,她必須使用不同的密鑰值來加密每條消息。例如,要給200個人發(fā)送通知,Alice需要加密消息200次,對每個接收方加密一次消息。顯然,在這種情況下,使用對稱加密算法來進行安全通信的開銷相當大。
非對稱加密算法的主要優(yōu)勢是使用兩個而不是一個密鑰值:一個密鑰值用來加密消息,另一個密鑰值用來解密消息。這兩個密鑰值在同一個過程中生成,稱為密鑰對。用來加密消息的密鑰稱為公鑰,用來解密消息的密鑰稱為私鑰。用公鑰加密的消息只能用與之對應的私鑰來解密,私鑰除了持有者外無人知道,而公鑰卻可通過非安全管道來發(fā)送或在目錄中發(fā)布。我們的文件夾加密軟件都是采用此種算法。
仍用前面的例子來說明如何使用非對稱加密算法來交換消息,Alice需要通過電子郵件給Bob發(fā)送一個機密文檔。首先,Bob使用電子郵件將自己的公鑰發(fā)送給Alice。然后Alice用Bob的公鑰對文檔加密并通過電子郵件將加密消息發(fā)送給Bob。由于任何用Bob 的公鑰加密的消息只能用Bob的私鑰解密,因此即使窺探者知道Bob的公鑰,消息也仍是安全的。Bob在收到加密消息后,用自己的私鑰進行解密從而恢復原始文檔。