定義
不對稱加密算法使用兩把完全不同但又是完全匹配的一對鑰匙—公鑰和私鑰。在使用不對稱加密算法加密檔案時,只有使用匹配的一對公鑰和私鑰,才能完成對明文的加密和解密過程。加密明文時採用公鑰加密,解密密文時使用私鑰才能完成,而且發信方(加密者)知道收信方的公鑰,只有收信方(解密者)才是唯一知道自己私鑰的人。不對稱加密算法的基本原理是,如果發信方想傳送只有收信方才能解讀的加密信息,發信者使用自己的私鑰加密信件,收信者使用發信者的公鑰解密信件。顯然,採用不對稱加密算法,收發信雙方在通信之前,收信方必須將自己早已隨機生成的公鑰送給發信方,而自己保留私鑰。由於不對稱算法擁有兩個密鑰,因而特別適用於分散式系統中的數據加密。廣泛套用的不對稱加密算法有RSA算法和美國國家標準局提出的DSA。以不對稱加密算法為基礎的加密技術套用非常廣泛。歷史
密碼術有很長的歷史。古代人在沒有高速運算設備的條件下想盡了各種方法,也包含了許多巧妙的構思。早在公元前1900年,一個古埃及書寫員就在一個銘文中使用了非標準的象形文字,這是人類最早的有記錄的密碼術。其後,古代人使用的密碼術有如把字母表的順序顛倒過來、進行字母替代,或者用錯後一定數目的位置的字母替代前面的字母。其中有些密碼術的構思也是十分巧妙的。
現代密碼術的劃時代突破,是威特菲爾德;迪菲(Whitfield Diffie)和馬丁;海爾曼(MARTIN HELLMAN)有關公開密鑰加密系統的構想,這是在1976年發表的。但威特菲爾德;迪菲和馬丁;海爾曼提供的MH背包算法於1984年被破譯,因而失去了實際意義。真正有生命力的公開密鑰加密系統算法是由隆;里維斯特(Ronald L. Rivest)、阿迪;沙米爾(Adi Shamir)和雷奧納德;阿德爾曼(Leonard M.Adlemen)在威特菲爾德•迪菲和馬丁;海爾曼的論文的啟發下,在1977年發明的,這就是沿用至今的RSA算法。它是第一個既能用於數據加密也能用於數字簽名的算法。
加密標準
公鑰加密標準(PKCS)是RSA實驗室和全球各家安全系統開發商進行合作而開發出的標準。PKCS標準已經被廣泛地採納,而PKCS系列的標準已經成為許多正式和實際標準的一部分,包括ANSI X9、PKIX、SET、S/MIME。
工作原理
1976 年,Whitfield Diffe 和 Martin Hellman 創建了公鑰加密。公鑰加密是重大的創新,因為它從根本上改變了加密和解密的過程。
Diffe 和 Hellman 提議使用兩個密鑰,而不是使用一個共享的密鑰。一個密鑰(稱為“私鑰”)是保密的。它只能由一方保存,而不能各方共享。第二個密鑰(稱為“公鑰”)不是保密的,可以廣泛共享。這兩個密鑰(稱為“密鑰對”)在加密和解密操作中配合使用。密鑰對具有特殊的互補關係,從而使每個密鑰都只能與密鑰對中的另一個密鑰配合使用。這一關係將密鑰對中的密鑰彼此唯一地聯繫在一起:公鑰與其對應的私鑰組成一對,並且與其他任何密鑰都不關聯。
由於公鑰和私鑰的算法之間存在特殊的數學關係,從而使得這種配對成為可能。密鑰對在數學上彼此相關,例如,配合使用密鑰對可以實現兩次使用對稱密鑰的效果。密鑰必須配合使用:不能使用每個單獨的密鑰來撤消它自己的操作。這意味著每個單獨密鑰的操作都是單向操作:不能使用一個密鑰來撤消它的操作。此外,設計兩個密鑰使用的算法時,特意設計無法使用一個密鑰確定密鑰對中的另一個密鑰。因此,不能根據公鑰確定出私鑰。但是,使得密鑰對成為可能的數學原理也使得密鑰對具有對稱密鑰所不具有的一個缺點。這就是,所使用的算法必須足夠強大,才能使人們無法通過強行嘗試,使用已知的公鑰來解密通過它加密的信息。公鑰利用數學複雜性以及它的單向特性來彌補它是眾所周知的這樣一個事實,以防止人們成功地破解使用它編碼的信息。
如果將此概念套用於前面的示例,則發件人將使用公鑰將純文本加密成密碼。然後,收件人將使用私鑰將密碼重新解密成純文本。
由於密鑰對中的私鑰和公鑰之間所存在的特殊關係,因此一個人可以在與許多人交往時使用相同的密鑰對,而不必與每個人分別使用不同的密鑰。只要私鑰是保密的,就可以隨意分發公鑰,並讓人們放心地使用它。使許多人使用同一個密鑰對代表著密碼學上的一個重大突破,因為它顯著降低了密鑰管理的需求,大大提高了密碼學的可用性。用戶可以與任意數目的人員共享一個密鑰對,而不必為每個人單獨設立一個密鑰。
公鑰加密是郵件安全中的一個基本要素。如果沒有公鑰加密,那么是否存在實用的郵件安全解決方案是值得懷疑的,因為在公鑰加密出現之前,密鑰管理是一件很麻煩的事情。在了解了公鑰加密的基本概念之後,接下來便是了解如何藉助這些概念來實現郵件安全性。
用途
公鑰體系的原理為:用戶A有一對密鑰對,分為公鑰和私鑰,這對密鑰對是唯一的,是通過對一個巨大的素數進行因數分解所得。當用公鑰加密過的信息,只能使用與它配對的私鑰來解密,反之亦然,私鑰加密碼的信息也只能用公鑰來解密。這樣,A從認證體系生成密鑰對後,把它的私鑰保存好,把公鑰公開出去,當一個用戶B要與A通信,又想確保數據安全時,就可以使用A的公鑰來加密信息,再把密文傳給A,因此這個世界是只有A手中的私鑰才能對這個密文進行解密,這樣就確保了信息的安全。
事實上,信息加密碼只是公鑰體系的用途之一,它還有一個用途就是對信息進行簽名,防此信息發布者抵賴,和被第三方修改。為什麼這種機制可以實現這此功能呢?很簡單,還是使用了“公鑰加密,只有私鑰能解;私鑰加密,只有公鑰能解”的道理。舉例:用戶A用自已的私鑰對他發出去的信息進行簽名(加密),然後發出去,後來他發現他公開的信息對他不利,他就不承認這些信息是他發的,但是他不可能抵賴了,因為這些信息有他的私鑰簽名,那么,使用他的公鑰對信息驗證就知道,這些信息肯定是A發的了,因為只有A使用的私鑰簽名得到的信息,才能用這個公鑰來解。如果A還認是他發的信息,那只有一個可能,那就是他的私鑰被人盜取了。
現在我們知道公鑰機制的原理了,那它有什麼用呢?上述舉的例子就比較常用,而在我們日常工作中也有些用到公鑰機制的地方,我們可能有人用過鑰匙盤,它是一個類似隨身碟的東西,一般提供USB接口,它就使用了公鑰機制,當我們在一台計算機上初始化這個鑰匙盤的時候,它會生成一對密鑰對,把公鑰存在計算機上,私鑰存在鑰匙盤上,當用戶要進行一個系統雖要身份驗證時,只雖插入鑰匙盤,就會通過公私鑰加解密的原理,完成這個用戶的身份驗證過程,而無需輸入帳號和密碼進行驗證。
缺點
現實上,公鑰機制也有它的缺點,那就是效率非常低,比常用的單密鑰算法慢上一兩個數量級都有可能,所以它不適合經常為大量的原始信息進行加密,而使用單密碼鑰機制對原始信息進行加密碼,然後這個單密鑰,我們可以通過公鑰機制進行加密。