公鑰密碼系統(tǒng)及RSA公鑰算法
本文簡單介紹了公開密鑰密碼系統(tǒng)的思想和特點,并具體介紹了RSA算法的理論基礎,工作原理和具體實現(xiàn)過程,并通過一個簡單例子說明了該算法是如何實現(xiàn)。在本文的最后,概括說明了RSA算法目前存在的一些缺點和解決方法。
關鍵詞:公鑰密碼體制 , 公鑰 ,私鑰 ,RSA
§1引言
隨著計算機聯(lián)網(wǎng)的逐步實現(xiàn),Internet前景越來越美好,全球經濟發(fā)展正在進入信息經濟時代,知識經濟初見端倪。計算機信息的保密問題顯得越來越重要,無論是個人信息通信還是電子商務發(fā)展,都迫切需要保證Internet網(wǎng)上信息傳輸?shù)陌踩?,需要保證信息安全。信息安全技術是一門綜合學科,它涉及信息論、計算機科學和密碼學等多方面知識,它的主要任務是研究計算機系統(tǒng)和通信網(wǎng)絡內信息的保護方法以實現(xiàn)系統(tǒng)內信息的安全、保密、真實和完整。其中,信息安全的核心是密碼技術。密碼技術是集數(shù)學、計算機科學、電子與通信等諸多學科于一身的交叉學科。它不僅能夠保證機密性信息的加密,而且能夠實現(xiàn)數(shù)字簽名、身份驗證、系統(tǒng)安全等功能。是現(xiàn)代化發(fā)展的重要科學之一。本文將對公鑰密碼系統(tǒng)及該系統(tǒng)中目前最廣泛流行的RSA算法做一些簡單介紹。
§2公鑰密碼系統(tǒng)
要說明公鑰密碼系統(tǒng),首先來了解一下不同的加密算法:目前的加密算法按密鑰方式可分為單鑰密碼算法和公鑰密碼算法。
2.1.單鑰密碼
又稱對稱式密碼,是一種比較傳統(tǒng)的加密方式,其加密運算、解密運算使用的是同樣的密鑰,信息的發(fā)送者和信息的接收者在進行信息的傳輸與處理時,必須共同持有該密碼(稱為對稱密碼)。因此,通信雙方都必須獲得這把鑰匙,并保持鑰匙的秘密。
單鑰密碼系統(tǒng)的安全性依賴于以下兩個因素:第一,加密算法必須是足夠強的,僅僅基于密文本身去解密信息在實踐上是不可能的;第二,加密方法的安全性依賴于密鑰的秘密性,而不是算法的秘密性,因此,我們沒有必要確保算法的秘密性(事實上,現(xiàn)實中使用的很多單鑰密碼系統(tǒng)的算法都是公開的),但是我們一定要保證密鑰的秘密性。
從單鑰密碼的這些特點我們容易看出它的主要問題有兩點:第一,密鑰量問題。在單鑰密碼系統(tǒng)中,每一對通信者就需要一對密鑰,當用戶增加時,必然會帶來密鑰量的成倍增長,因此在網(wǎng)絡通信中,大量密鑰的產生﹑存放和分配將是一個難以解決的問題。第二,密鑰分發(fā)問題。單鑰密碼系統(tǒng)中,加密的安全性完全依賴于對密鑰的保護,但是由于通信雙方使用的是相同的密鑰,人們又不得不相互交流密鑰,所以為了保證安全,人們必須使用一些另外的安全信道來分發(fā)密鑰,例如用專門的信使來傳送密鑰,這種做法的代價是相當大的,甚至可以說是非常不現(xiàn)實的,尤其在計算機網(wǎng)絡環(huán)境下,人們使用網(wǎng)絡傳送加密的文件,卻需要另外的安全信道來分發(fā)密鑰,顯而易見,這是非常不智是甚至是荒謬可笑的。
2.2公鑰密碼
正因為單鑰密碼系統(tǒng)存在如此難以解決的缺點,發(fā)展一種新的﹑更有效﹑更先進的密碼體制顯得更為迫切和必要。在這種情況下,出現(xiàn)了一種新的公鑰密碼體制,它突破性地解決了困擾著無數(shù)科學家的密鑰分發(fā)問題,事實上,在這種體制中,人們甚至不用分發(fā)需要嚴格保密的密鑰,這次突破同時也被認為是密碼史上兩千年來自單碼替代密碼發(fā)明以后最偉大的成就。
這一全新的思想是本世紀70年代,美國斯坦福大學的兩名學者Diffie和Hellman提出的,該體制與單鑰密碼最大的不同是:
在公鑰密碼系統(tǒng)中,加密和解密使用的是不同的密鑰(相對于對稱密鑰,人們把它叫做非對稱密鑰),這兩個密鑰之間存在著相互依存關系:即用其中任一個密鑰加密的信息只能用另一個密鑰進行解密。這使得通信雙方無需事先交換密鑰就可進行保密通信。其中加密密鑰和算法是對外公開的,人人都可以通過這個密鑰加密文件然后發(fā)給收信者,這個加密密鑰又稱為公鑰;而收信者收到加密文件后,它可以使用他的解密密鑰解密,這個密鑰是由他自己私人掌管的,并不需要分發(fā),因此又成稱為私鑰,這就解決了密鑰分發(fā)的問題。
為了說明這一思想,我們可以考慮如下的類比:
兩個在不安全信道中通信的人,假設為Alice(收信者)和Bob(發(fā)信者),他們希望能夠安全的通信而不被他們的敵手Oscar破壞。Alice想到了一種辦法,她使用了一種鎖(相當于公鑰),這種鎖任何人只要輕輕一按就可以鎖上,但是只有Alice的鑰匙(相當于私鑰)才能夠打開。然后Alice對外發(fā)送無數(shù)把這樣的鎖,任何人比如Bob想給她寄信時,只需找到一個箱子,然后用一把Alice的鎖將其鎖上再寄給Alice,這時候任何人(包括Bob自己)除了擁有鑰匙的Alice,都不能再打開箱子,這樣即使Oscar能找到Alice的鎖,即使Oscar能在通信過程中截獲這個箱子,沒有Alice的鑰匙他也不可能打開箱子,而Alice的鑰匙并不需要分發(fā),這樣Oscar也就無法得到這把“私人密鑰”。
從以上的介紹可以看出,公鑰密碼體制的思想并不復雜,而實現(xiàn)它的關鍵問題是如何確定公鑰和私鑰及加/解密的算法,也就是說如何找到“Alice的鎖和鑰匙”的問題。我們假設在這種體制中, PK是公開信息,用作加密密鑰,而SK需要由用戶自己保密,用作解密密鑰。加密算法E和解密算法D也都是公開的。雖然SK與PK是成對出現(xiàn),但卻不能根據(jù)PK計算出SK。它們須滿足條件:
①加密密鑰PK對明文X加密后,再用解密密鑰SK解密,即可恢復出明文,或寫為:DSK(EPK(X))=X
②加密密鑰不能用來解密,即DPK(EPK(X))≠X
③在計算機上可以容易地產生成對的PK和SK。
④從已知的PK實際上不可能推導出SK。
⑤加密和解密的運算可以對調,即:EPK(DSK(X))=X
從上述條件可看出,公開密鑰密碼體制下,加密密鑰不等于解密密鑰。加密密鑰可對外公開,使任何用戶都可將傳送給此用戶的信息用公開密鑰加密發(fā)送,而該用戶唯一保存的私人密鑰是保密的,也只有它能將密文復原、解密。雖然解密密鑰理論上可由加密密鑰推算出來,但這種算法設計在實際上是不可能的,或者雖然能夠推算出,但要花費很長的時間而成為不可行的。所以將加密密鑰公開也不會危害密鑰的安全。
這種體制思想是簡單的,但是,如何找到一個適合的算法來實現(xiàn)這個系統(tǒng)卻是一個真正困擾密碼學家們的難題,因為既然Pk和SK是一對存在著相互關系的密鑰,那么從其中一個推導出另一個就是很有可能的,如果敵手Oscar能夠從PK推導出SK,那么這個系統(tǒng)就不再安全了。因此如何找到一個合適的算法生成合適的Pk和SK,并且使得從PK不可能推導出SK,正是迫切需要密碼學家們解決的一道難題。這個難題甚至使得公鑰密碼系統(tǒng)的發(fā)展停滯了很長一段時間。
為了解決這個問題,密碼學家們考慮了數(shù)學上的陷門單向函數(shù),下面,我們可以給出它的非正式定義:
Alice的公開加密函數(shù)應該是容易計算的,而計算其逆函數(shù)(即解密函數(shù))應該是困難的(對于除Alice以外的人)。許多形式為Y=f(x)的函數(shù),對于給定的自變量x值,很容易計算出函數(shù)Y的值;而由給定的Y值,在很多情況下依照函數(shù)關系f (x)計算x值十分困難。這樣容易計算但難于求逆的函數(shù),通常稱為單向函數(shù)。在加密過程中,我們希望加密函數(shù)E為一個單項的單射函數(shù),以便可以解密。雖然目前還沒有一個函數(shù)能被證明是單向的,但是有很多單射函數(shù)被認為是單向的。
例如,有如下一個函數(shù)被認為是單向的,假定n為兩個大素數(shù)p和q的乘積,b為一個正整數(shù),那么定義f:
f (x )= x b mod n
(如果gcd(b,φ(n))=1,那么事實上這就是我們以下要說的RSA加密函數(shù))
如果我們要構造一個公鑰密碼體制,僅給出一個單向的單射函數(shù)是不夠的。從Alice的觀點來看,并不需要E是單向的,因為它需要用有效的方式解密所收到的信息。因此,Alice應該擁有一個陷門,其中包含容易求出E的你函數(shù)的秘密信息。也就是說,Alice可以有效解密,因為它有額外的秘密知識,即SK,能夠提供給你解密函數(shù)D。因此,我們稱一個函數(shù)為一個陷門單向函數(shù),如果它是一個單向函數(shù),并在具有特定陷門的知識后容易求出其逆。
考慮上面的函數(shù)f (x) =?xb mod n。我們能夠知道其逆函數(shù)f -1有類似的形式f (x ) = xa?mod n,對于合適的取值a。陷門就是利用n的因子分解,有效的算出正確的指數(shù)a(對于給定的b)。
為方便起見,我們把特定的某類陷門單向函數(shù)計為?。那么隨機選取一個函數(shù)f屬于?,作為公開加密函數(shù);其逆函數(shù)f-1是秘密解密函數(shù)。那么公鑰密碼體制就能夠實現(xiàn)了。
根據(jù)以上關于陷門單向函數(shù)的思想,學者們提出了許多種公鑰加密的方法,它們的安全性都是基于復雜的數(shù)學難題。根據(jù)所基于的數(shù)學難題,至少有以下三類系統(tǒng)目前被認為是安全和有效的:大整數(shù)因子分解系統(tǒng)(代表性的有RSA)、橢園曲線離散對數(shù)系統(tǒng)(ECC)和離散對數(shù)系統(tǒng)(代表性的有DSA)。
§3 RSA算法
3.1簡介
當前最著名、應用最廣泛的公鑰系統(tǒng)RSA是在1978年,由美國麻省理工學院(MIT)的Rivest、Shamir和Adleman在題為《獲得數(shù)字簽名和公開鑰密碼系統(tǒng)的方法》的論文中提出的。它是一個基于數(shù)論的非對稱(公開鑰)密碼體制,是一種分組密碼體制。其名稱來自于三個發(fā)明者的姓名首字母。它的安全性是基于大整數(shù)素因子分解的困難性,而大整數(shù)因子分解問題是數(shù)學上的著名難題,至今沒有有效的方法予以解決,因此可以確保RSA算法的安全性。RSA系統(tǒng)是公鑰系統(tǒng)的最具有典型意義的方法,大多數(shù)使用公鑰密碼進行加密和數(shù)字簽名的產品和標準使用的都是RSA算法。
RSA算法是第一個既能用于數(shù)據(jù)加密也能用于數(shù)字簽名的算法,因此它為公用網(wǎng)絡上信息的加密和鑒別提供了一種基本的方法。它通常是先生成一對RSA密鑰,其中之一是保密密鑰,由用戶保存;另一個為公開密鑰,可對外公開,甚至可在網(wǎng)絡服務器中注冊,人們用公鑰加密文件發(fā)送給個人,個人就可以用私鑰解密接受。為提高保密強度,RSA密鑰至少為500位長,一般推薦使用1024位。
該算法基于下面的兩個事實,這些事實保證了RSA算法的安全有效性:
1)已有確定一個數(shù)是不是質數(shù)的快速算法;
2)尚未找到確定一個合數(shù)的質因子的快速算法。
3.2工作原理
1)任意選取兩個不同的大質數(shù)p和q,計算乘積r=p*q;
2)任意選取一個大整數(shù)e,e與(p-1)*(q-1)互質,整數(shù)e用做加密密鑰。注意:e的選取是很容易的,例如,所有大于p和q的質數(shù)都可用。
3)確定解密密鑰d:d * e = 1 modulo(p - 1)*(q - 1) 根據(jù)e、p和q可以容易地計算出d。
4)公開整數(shù)r和e,但是不公開d;
5)將明文P (假設P是一個小于r的整數(shù))加密為密文C,計算方法為:
C = Pe modulo r
6)將密文C解密為明文P,計算方法為:
P = Cd modulo r
然而只根據(jù)r和e(不是p和q)要計算出d是不可能的。因此,任何人都可對明文進行加密,但只有授權用戶(知道d)才可對密文解密。
3.3簡單實例
為了說明該算法的工作過程,我們下面給出一個簡單例子,顯然我們在這只能取很小的數(shù)字,但是如上所述,為了保證安全,在實際應用上我們所用的數(shù)字要大的多得多。
例:選取p=3, q=5,則r=15,(p-1)*(q-1)=8。選取e=11(大于p和q的質數(shù)),通過d * 11 = 1 modulo 8,計算出d =3。
假定明文為整數(shù)13。則密文C為
C = Pe modulo r
= 1311 modulo 15
= 1,792,160,394,037 modulo 15
= 7
復原明文P為:
P = Cd modulo r
= 73 modulo 15
= 343 modulo 15
= 13
因為e和d互逆,公開密鑰加密方法也允許采用這樣的方式對加密信息進行"簽名",以便接收方能確定簽名不是偽造的。
假設A和B希望通過公開密鑰加密方法進行數(shù)據(jù)傳輸,A和B分別公開加密算法和相應的密鑰,但不公開解密算法和相應的密鑰。A和B的加密算法分別是ECA和ECB,解密算法分別是DCA和DCB,ECA和DCA互逆,ECB和DCB互逆。 若A要向B發(fā)送明文P,不是簡單地發(fā)送ECB(P),而是先對P施以其解密算法DCA,再用加密算法ECB對結果加密后發(fā)送出去。
密文C為:
C = ECB(DCA(P))
B收到C后,先后施以其解密算法DCB和加密算法ECA,得到明文P:
ECA(DCB(C))
= ECA(DCB(ECB(DCA(P))))
= ECA(DCA(P))/*DCB和ECB相互抵消*/
=
P????????? /*DCB和ECB相互抵消*/
這樣B就確定報文確實是從A發(fā)出的,因為只有當加密過程利用了DCA算法,用ECA才能獲得P,只有A才知道DCA算法,沒 有人,即使是B也不能偽造A的簽名。
3.4優(yōu)缺點
3.4.1優(yōu)點
RSA算法是第一個能同時用于加密和數(shù)字簽名的算法,也易于理解和操作。RSA是被研究得最廣泛的公鑰算法,從提出到現(xiàn)在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優(yōu)秀的公鑰方案之一。該算法的加密密鑰和加密算法分開,使得密鑰分配更為方便。它特別符合計算機網(wǎng)絡環(huán)境。對于網(wǎng)上的大量用戶,可以將加密密鑰用電話簿的方式印出。如果某用戶想與另一用戶進行保密通信,只需從公鑰簿上查出對方的加密密鑰,用它對所傳送的信息加密發(fā)出即可。對方收到信息后,用僅為自己所知的解密密鑰將信息脫密,了解報文的內容。由此可看出,RSA算法解決了大量網(wǎng)絡用戶密鑰管理的難題,這是公鑰密碼系統(tǒng)相對于對稱密碼系統(tǒng)最突出的優(yōu)點。
3.4.2缺點
1)產生密鑰很麻煩,受到素數(shù)產生技術的限制,因而難以做到一次一密。
2)安全性, RSA的安全性依賴于大數(shù)的因子分解,但并沒有從理論上證明破譯RSA的難度與大數(shù)分解難度等價,而且密碼學界多數(shù)人士傾向于因子分解不是NPC問題。目前,人們已能分解140多個十進制位的大素數(shù),這就要求使用更長的密鑰,速度更慢;另外,目前人們正在積極尋找攻擊RSA的方法,如選擇密文攻擊,一般攻擊者是將某一信息作一下偽裝(Blind),讓擁有私鑰的實體簽署。然后,經過計算就可得到它所想要的信息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保留了輸入的乘法結構:
( XM )d = Xd *Md mod n
前面已經提到,這個固有的問題來自于公鑰密碼系統(tǒng)的最有用的特征--每個人都能使用公鑰。但從算法上無法解決這一問題,主要措施有兩條:一條是采用好的公鑰協(xié)議,保證工作過程中實體不對其他實體任意產生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way Hash Function對文檔作HASH處理,或同時使用不同的簽名算法。除了利用公共模數(shù),人們還嘗試一些利用解密指數(shù)或φ(n)等等攻擊.
3)速度太慢,由于RSA的分組長度太大,為保證安全性,n至少也要600 bitx以上,使運算代價很高,尤其是速度較慢,較對稱密碼算法慢幾個數(shù)量級;且隨著大數(shù)分解技術的發(fā)展,這個長度還在增加,不利于數(shù)據(jù)格式的標準化。目前,SET(Secure Electronic Transaction)協(xié)議中要求CA采用2048比特長的密鑰,其他實體使用1024比特的密鑰。為了速度問題,目前人們廣泛使用單,公鑰密碼結合使用的方法,優(yōu)缺點互補:單鑰密碼加密速度快,人們用它來加密較長的文件,然后用RSA來給文件密鑰加密,極好的解決了單鑰密碼的密鑰分發(fā)問題。
§4結束語
目前,日益激增的電子商務和其它因特網(wǎng)應用需求使公鑰體系得以普及,這些需求量主要包括對服務器資源的訪問控制和對電子商務交易的保護,以及權利保護、個人隱私、無線交易和內容完整性(如保證新聞報道或股票行情的真實性)等方面。公鑰技術發(fā)展到今天,在市場上明顯的發(fā)展趨勢就是PKI與操作系統(tǒng)的集成,PKI是“Public
Key Infrastructure”的縮寫,意為“公鑰基礎設施”。公鑰體制廣泛地用于CA認證、數(shù)字簽名和密鑰交換等領域。
公鑰加密算法中使用最廣的是RSA。RSA算法研制的最初理念與目標是努力使互聯(lián)網(wǎng)安全可靠,旨在解決DES算法秘密密鑰的利用公開信道傳輸分發(fā)的難題。而實際結果不但很好地解決了這個難題;還可利用RSA來完成對電文的數(shù)字簽名以抗對電文的否認與抵賴;同時還可以利用數(shù)字簽名較容易地發(fā)現(xiàn)攻擊者對電文的非法篡改,以保護數(shù)據(jù)信息的完整性。目前為止,很多種加密技術采用了RSA算法,該算法也已經在互聯(lián)網(wǎng)的許多方面得以廣泛應用,包括在安全接口層(SSL)標準(該標準是網(wǎng)絡瀏覽器建立安全的互聯(lián)網(wǎng)連接時必須用到的)方面的應用。此外,RSA加密系統(tǒng)還可應用于智能IC卡和網(wǎng)絡安全產品。
但目前RSA算法的專利期限即將結束,取而代之的是基于橢圓曲線的密碼方案(ECC算法)。較之于RSA算法,ECC有其相對優(yōu)點,這使得ECC的特性更適合當今電子商務需要快速反應的發(fā)展潮流。此外,一種全新的量子密碼也正在發(fā)展中。
至于在實際應用中應該采用何種加密算法則要結合具體應用環(huán)境和系統(tǒng),不能簡單地根據(jù)其加密強度來做出判斷。因為除了加密算法本身之外,密鑰合理分配、加密效率與現(xiàn)有系統(tǒng)的結合性以及投入產出分析都應在實際環(huán)境中具體考慮。加密技術隨著網(wǎng)絡的發(fā)展更新,將有更安全更易于實現(xiàn)的算法不斷產生,為信息安全提供更有力的保障。今后,加密技術會何去何從,我們將拭目以待。
參考文獻:
[1] Douglas R.Stinson.《密碼學原理與實踐》.北京:電子工業(yè)出版社,2003,2:131-132
[2]西蒙.辛格.《密碼故事》.海口:海南出版社,2001,1:271-272
[3]嬴政天下.加密算法之RSA算法.http://soft.winzheng.com/infoView/Article_296.htm,2003
[4]加密與數(shù)字簽名.http://www.njt.cn/yumdq/dzsw/a2.htm
[5]黑客中級教程系列之十.http://www.qqorg.i-p.com/jiaocheng/10.html