1. RSA公鑰加密是什麼意思
RSA公鑰密碼是1977年由Ron Rivest、Adi Shamirh和LenAdleman在MIT(美國麻省理工學院〉開發的,1978年首次公布[RIVE78]。它是目前最有影響的公鑰加密演算法,它能夠抵抗到目前為止已知的所有密碼攻擊。目前它已被ISO推薦為公鑰數據加密標准。RSA演算法基於一個十分簡單的數論事實:將兩個大素數相乘十分容易,但是想分解它們的乘積卻極端困難,因此可以將乘積公開作為加密密鑰。
RSA的演算法結構相當簡單,整個演算法可以描述如下:
(1)選取兩個大素數p和q(保密);
(2)計算n=pq(公開),γ=(p一1〉(q-1)(保密);
(3)隨機選取整數e(公開,加密密鑰),使得ed(ear)=1
(4)計算d(保密,私人密鑰),使得ed≡1(mod r),即d=e-1(mod r);
(5)加密:c=me mod n
(6)解密:m=cd mod n。
利用RSA對被加密的信息m (長度小於log2n的整數)進行加密得到相應的密文c=me mod n;解密演算法則是計算m=cd modn RSA的優點是不需要密鑰分配,但缺點是速度慢。
2. rsa加密演算法
rsa加密演算法如下:
演算法原理:
RSA公開密鑰密碼體制的原理是:根據數論,尋求兩個大素數比較簡單,而將它們的乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰
3. 公鑰密碼系統及RSA公鑰演算法
公鑰密碼系統及RSA公鑰演算法
本文簡單介紹了公開密鑰密碼系統的思想和特點,並具體介紹了RSA演算法的理論基礎,工作原理和具體實現過程,並通過一個簡單例子說明了該演算法是如何實現。在本文的最後,概括說明了RSA演算法目前存在的一些缺點和解決方法。
關鍵詞:公鑰密碼體制 , 公鑰 ,私鑰 ,RSA
§1引言
隨著計算機聯網的逐步實現,Internet前景越來越美好,全球經濟發展正在進入信息經濟時代,知識經濟初見端倪。計算機信息的保密問題顯得越來越重要,無論是個人信息通信還是電子商務發展,都迫切需要保證Internet網上信息傳輸的安全,需要保證信息安全。信息安全技術是一門綜合學科,它涉及資訊理論、計算機科學和密碼學等多方面知識,它的主要任務是研究計算機系統和通信網路內信息的保護方法以實現系統內信息的安全、保密、真實和完整。其中,信息安全的核心是密碼技術。密碼技術是集數學、計算機科學、電子與通信等諸多學科於一身的交叉學科。它不僅能夠保證機密性信息的加密,而且能夠實現數字簽名、身份驗證、系統安全等功能。是現代化發展的重要科學之一。本文將對公鑰密碼系統及該系統中目前最廣泛流行的RSA演算法做一些簡單介紹。
§2公鑰密碼系統
要說明公鑰密碼系統,首先來了解一下不同的加密演算法:目前的加密演算法按密鑰方式可分為單鑰密碼演算法和公鑰密碼演算法。
2.1.單鑰密碼
又稱對稱式密碼,是一種比較傳統的加密方式,其加密運算、解密運算使用的是同樣的密鑰,信息的發送者和信息的接收者在進行信息的傳輸與處理時,必須共同持有該密碼(稱為對稱密碼)。因此,通信雙方都必須獲得這把鑰匙,並保持鑰匙的秘密。
單鑰密碼系統的安全性依賴於以下兩個因素:第一,加密演算法必須是足夠強的,僅僅基於密文本身去解密信息在實踐上是不可能的;第二,加密方法的安全性依賴於密鑰的秘密性,而不是演算法的秘密性,因此,我們沒有必要確保演算法的秘密性(事實上,現實中使用的很多單鑰密碼系統的演算法都是公開的),但是我們一定要保證密鑰的秘密性。
從單鑰密碼的這些特點我們容易看出它的主要問題有兩點:第一,密鑰量問題。在單鑰密碼系統中,每一對通信者就需要一對密鑰,當用戶增加時,必然會帶來密鑰量的成倍增長,因此在網路通信中,大量密鑰的產生﹑存放和分配將是一個難以解決的問題。第二,密鑰分發問題。單鑰密碼系統中,加密的安全性完全依賴於對密鑰的保護,但是由於通信雙方使用的是相同的密鑰,人們又不得不相互交流密鑰,所以為了保證安全,人們必須使用一些另外的安全信道來分發密鑰,例如用專門的信使來傳送密鑰,這種做法的代價是相當大的,甚至可以說是非常不現實的,尤其在計算機網路環境下,人們使用網路傳送加密的文件,卻需要另外的安全信道來分發密鑰,顯而易見,這是非常不智是甚至是荒謬可笑的。
2.2公鑰密碼
正因為單鑰密碼系統存在如此難以解決的缺點,發展一種新的﹑更有效﹑更先進的密碼體制顯得更為迫切和必要。在這種情況下,出現了一種新的公鑰密碼體制,它突破性地解決了困擾著無數科學家的密鑰分發問題,事實上,在這種體制中,人們甚至不用分發需要嚴格保密的密鑰,這次突破同時也被認為是密碼史上兩千年來自單碼替代密碼發明以後最偉大的成就。
這一全新的思想是本世紀70年代,美國斯坦福大學的兩名學者Diffie和Hellman提出的,該體制與單鑰密碼最大的不同是:
在公鑰密碼系統中,加密和解密使用的是不同的密鑰(相對於對稱密鑰,人們把它叫做非對稱密鑰),這兩個密鑰之間存在著相互依存關系:即用其中任一個密鑰加密的信息只能用另一個密鑰進行解密。這使得通信雙方無需事先交換密鑰就可進行保密通信。其中加密密鑰和演算法是對外公開的,人人都可以通過這個密鑰加密文件然後發給收信者,這個加密密鑰又稱為公鑰;而收信者收到加密文件後,它可以使用他的解密密鑰解密,這個密鑰是由他自己私人掌管的,並不需要分發,因此又成稱為私鑰,這就解決了密鑰分發的問題。
為了說明這一思想,我們可以考慮如下的類比:
兩個在不安全信道中通信的人,假設為Alice(收信者)和Bob(發信者),他們希望能夠安全的通信而不被他們的敵手Oscar破壞。Alice想到了一種辦法,她使用了一種鎖(相當於公鑰),這種鎖任何人只要輕輕一按就可以鎖上,但是只有Alice的鑰匙(相當於私鑰)才能夠打開。然後Alice對外發送無數把這樣的鎖,任何人比如Bob想給她寄信時,只需找到一個箱子,然後用一把Alice的鎖將其鎖上再寄給Alice,這時候任何人(包括Bob自己)除了擁有鑰匙的Alice,都不能再打開箱子,這樣即使Oscar能找到Alice的鎖,即使Oscar能在通信過程中截獲這個箱子,沒有Alice的鑰匙他也不可能打開箱子,而Alice的鑰匙並不需要分發,這樣Oscar也就無法得到這把「私人密鑰」。
從以上的介紹可以看出,公鑰密碼體制的思想並不復雜,而實現它的關鍵問題是如何確定公鑰和私鑰及加/解密的演算法,也就是說如何找到「Alice的鎖和鑰匙」的問題。我們假設在這種體制中, PK是公開信息,用作加密密鑰,而SK需要由用戶自己保密,用作解密密鑰。加密演算法E和解密演算法D也都是公開的。雖然SK與PK是成對出現,但卻不能根據PK計算出SK。它們須滿足條件:
①加密密鑰PK對明文X加密後,再用解密密鑰SK解密,即可恢復出明文,或寫為:DSK(EPK(X))=X
②加密密鑰不能用來解密,即DPK(EPK(X))≠X
③在計算機上可以容易地產生成對的PK和SK。
④從已知的PK實際上不可能推導出SK。
⑤加密和解密的運算可以對調,即:EPK(DSK(X))=X
從上述條件可看出,公開密鑰密碼體制下,加密密鑰不等於解密密鑰。加密密鑰可對外公開,使任何用戶都可將傳送給此用戶的信息用公開密鑰加密發送,而該用戶唯一保存的私人密鑰是保密的,也只有它能將密文復原、解密。雖然解密密鑰理論上可由加密密鑰推算出來,但這種演算法設計在實際上是不可能的,或者雖然能夠推算出,但要花費很長的時間而成為不可行的。所以將加密密鑰公開也不會危害密鑰的安全。
這種體制思想是簡單的,但是,如何找到一個適合的演算法來實現這個系統卻是一個真正困擾密碼學家們的難題,因為既然Pk和SK是一對存在著相互關系的密鑰,那麼從其中一個推導出另一個就是很有可能的,如果敵手Oscar能夠從PK推導出SK,那麼這個系統就不再安全了。因此如何找到一個合適的演算法生成合適的Pk和SK,並且使得從PK不可能推導出SK,正是迫切需要密碼學家們解決的一道難題。這個難題甚至使得公鑰密碼系統的發展停滯了很長一段時間。
為了解決這個問題,密碼學家們考慮了數學上的陷門單向函數,下面,我們可以給出它的非正式定義:
Alice的公開加密函數應該是容易計算的,而計算其逆函數(即解密函數)應該是困難的(對於除Alice以外的人)。許多形式為Y=f(x)的函數,對於給定的自變數x值,很容易計算出函數Y的值;而由給定的Y值,在很多情況下依照函數關系f (x)計算x值十分困難。這樣容易計算但難於求逆的函數,通常稱為單向函數。在加密過程中,我們希望加密函數E為一個單項的單射函數,以便可以解密。雖然目前還沒有一個函數能被證明是單向的,但是有很多單射函數被認為是單向的。
例如,有如下一個函數被認為是單向的,假定n為兩個大素數p和q的乘積,b為一個正整數,那麼定義f:
f (x )= x b mod n
(如果gcd(b,φ(n))=1,那麼事實上這就是我們以下要說的RSA加密函數)
如果我們要構造一個公鑰密碼體制,僅給出一個單向的單射函數是不夠的。從Alice的觀點來看,並不需要E是單向的,因為它需要用有效的方式解密所收到的信息。因此,Alice應該擁有一個陷門,其中包含容易求出E的你函數的秘密信息。也就是說,Alice可以有效解密,因為它有額外的秘密知識,即SK,能夠提供給你解密函數D。因此,我們稱一個函數為一個陷門單向函數,如果它是一個單向函數,並在具有特定陷門的知識後容易求出其逆。
考慮上面的函數f (x) = xb mod n。我們能夠知道其逆函數f -1有類似的形式f (x ) = xa mod n,對於合適的取值a。陷門就是利用n的因子分解,有效的算出正確的指數a(對於給定的b)。
為方便起見,我們把特定的某類陷門單向函數計為?。那麼隨機選取一個函數f屬於?,作為公開加密函數;其逆函數f-1是秘密解密函數。那麼公鑰密碼體制就能夠實現了。
根據以上關於陷門單向函數的思想,學者們提出了許多種公鑰加密的方法,它們的安全性都是基於復雜的數學難題。根據所基於的數學難題,至少有以下三類系統目前被認為是安全和有效的:大整數因子分解系統(代表性的有RSA)、橢園曲線離散對數系統(ECC)和離散對數系統(代表性的有DSA)。
§3 RSA演算法
3.1簡介
當前最著名、應用最廣泛的公鑰系統RSA是在1978年,由美國麻省理工學院(MIT)的Rivest、Shamir和Adleman在題為《獲得數字簽名和公開鑰密碼系統的方法》的論文中提出的。它是一個基於數論的非對稱(公開鑰)密碼體制,是一種分組密碼體制。其名稱來自於三個發明者的姓名首字母。它的安全性是基於大整數素因子分解的困難性,而大整數因子分解問題是數學上的著名難題,至今沒有有效的方法予以解決,因此可以確保RSA演算法的安全性。RSA系統是公鑰系統的最具有典型意義的方法,大多數使用公鑰密碼進行加密和數字簽名的產品和標准使用的都是RSA演算法。
RSA演算法是第一個既能用於數據加密也能用於數字簽名的演算法,因此它為公用網路上信息的加密和鑒別提供了一種基本的方法。它通常是先生成一對RSA密鑰,其中之一是保密密鑰,由用戶保存;另一個為公開密鑰,可對外公開,甚至可在網路伺服器中注冊,人們用公鑰加密文件發送給個人,個人就可以用私鑰解密接受。為提高保密強度,RSA密鑰至少為500位長,一般推薦使用1024位。
該演算法基於下面的兩個事實,這些事實保證了RSA演算法的安全有效性:
1)已有確定一個數是不是質數的快速演算法;
2)尚未找到確定一個合數的質因子的快速演算法。
3.2工作原理
1)任意選取兩個不同的大質數p和q,計算乘積r=p*q;
2)任意選取一個大整數e,e與(p-1)*(q-1)互質,整數e用做加密密鑰。注意:e的選取是很容易的,例如,所有大於p和q的質數都可用。
3)確定解密密鑰d:d * e = 1 molo(p - 1)*(q - 1) 根據e、p和q可以容易地計算出d。
4)公開整數r和e,但是不公開d;
5)將明文P (假設P是一個小於r的整數)加密為密文C,計算方法為:
C = Pe molo r
6)將密文C解密為明文P,計算方法為:
P = Cd molo r
然而只根據r和e(不是p和q)要計算出d是不可能的。因此,任何人都可對明文進行加密,但只有授權用戶(知道d)才可對密文解密。
3.3簡單實例
為了說明該演算法的工作過程,我們下面給出一個簡單例子,顯然我們在這只能取很小的數字,但是如上所述,為了保證安全,在實際應用上我們所用的數字要大的多得多。
例:選取p=3, q=5,則r=15,(p-1)*(q-1)=8。選取e=11(大於p和q的質數),通過d * 11 = 1 molo 8,計算出d =3。
假定明文為整數13。則密文C為
C = Pe molo r
= 1311 molo 15
= 1,792,160,394,037 molo 15
= 7
復原明文P為:
P = Cd molo r
= 73 molo 15
= 343 molo 15
= 13
因為e和d互逆,公開密鑰加密方法也允許採用這樣的方式對加密信息進行"簽名",以便接收方能確定簽名不是偽造的。
假設A和B希望通過公開密鑰加密方法進行數據傳輸,A和B分別公開加密演算法和相應的密鑰,但不公開解密演算法和相應的密鑰。A和B的加密演算法分別是ECA和ECB,解密演算法分別是DCA和DCB,ECA和DCA互逆,ECB和DCB互逆。 若A要向B發送明文P,不是簡單地發送ECB(P),而是先對P施以其解密演算法DCA,再用加密演算法ECB對結果加密後發送出去。
密文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發出的,因為只有當加密過程利用了DCA演算法,用ECA才能獲得P,只有A才知道DCA演算法,沒 有人,即使是B也不能偽造A的簽名。
3.4優缺點
3.4.1優點
RSA演算法是第一個能同時用於加密和數字簽名的演算法,也易於理解和操作。RSA是被研究得最廣泛的公鑰演算法,從提出到現在已近二十年,經歷了各種攻擊的考驗,逐漸為人們接受,普遍認為是目前最優秀的公鑰方案之一。該演算法的加密密鑰和加密演算法分開,使得密鑰分配更為方便。它特別符合計算機網路環境。對於網上的大量用戶,可以將加密密鑰用電話簿的方式印出。如果某用戶想與另一用戶進行保密通信,只需從公鑰簿上查出對方的加密密鑰,用它對所傳送的信息加密發出即可。對方收到信息後,用僅為自己所知的解密密鑰將信息脫密,了解報文的內容。由此可看出,RSA演算法解決了大量網路用戶密鑰管理的難題,這是公鑰密碼系統相對於對稱密碼系統最突出的優點。
3.4.2缺點
1)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。
2)安全性, RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價,而且密碼學界多數人士傾向於因子分解不是NPC問題。目前,人們已能分解140多個十進制位的大素數,這就要求使用更長的密鑰,速度更慢;另外,目前人們正在積極尋找攻擊RSA的方法,如選擇密文攻擊,一般攻擊者是將某一信息作一下偽裝(Blind),讓擁有私鑰的實體簽署。然後,經過計算就可得到它所想要的信息。實際上,攻擊利用的都是同一個弱點,即存在這樣一個事實:乘冪保留了輸入的乘法結構:
( XM )d = Xd *Md mod n
前面已經提到,這個固有的問題來自於公鑰密碼系統的最有用的特徵--每個人都能使用公鑰。但從演算法上無法解決這一問題,主要措施有兩條:一條是採用好的公鑰協議,保證工作過程中實體不對其他實體任意產生的信息解密,不對自己一無所知的信息簽名;另一條是決不對陌生人送來的隨機文檔簽名,簽名時首先使用One-Way Hash Function對文檔作HASH處理,或同時使用不同的簽名演算法。除了利用公共模數,人們還嘗試一些利用解密指數或φ(n)等等攻擊.
3)速度太慢,由於RSA的分組長度太大,為保證安全性,n至少也要600 bitx以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利於數據格式的標准化。目前,SET(Secure Electronic Transaction)協議中要求CA採用2048比特長的密鑰,其他實體使用1024比特的密鑰。為了速度問題,目前人們廣泛使用單,公鑰密碼結合使用的方法,優缺點互補:單鑰密碼加密速度快,人們用它來加密較長的文件,然後用RSA來給文件密鑰加密,極好的解決了單鑰密碼的密鑰分發問題。
§4結束語
目前,日益激增的電子商務和其它網際網路應用需求使公鑰體系得以普及,這些需求量主要包括對伺服器資源的訪問控制和對電子商務交易的保護,以及權利保護、個人隱私、無線交易和內容完整性(如保證新聞報道或股票行情的真實性)等方面。公鑰技術發展到今天,在市場上明顯的發展趨勢就是PKI與操作系統的集成,PKI是「Public
Key Infrastructure」的縮寫,意為「公鑰基礎設施」。公鑰體制廣泛地用於CA認證、數字簽名和密鑰交換等領域。
公鑰加密演算法中使用最廣的是RSA。RSA演算法研製的最初理念與目標是努力使互聯網安全可靠,旨在解決DES演算法秘密密鑰的利用公開信道傳輸分發的難題。而實際結果不但很好地解決了這個難題;還可利用RSA來完成對電文的數字簽名以抗對電文的否認與抵賴;同時還可以利用數字簽名較容易地發現攻擊者對電文的非法篡改,以保護數據信息的完整性。目前為止,很多種加密技術採用了RSA演算法,該演算法也已經在互聯網的許多方面得以廣泛應用,包括在安全介面層(SSL)標准(該標準是網路瀏覽器建立安全的互聯網連接時必須用到的)方面的應用。此外,RSA加密系統還可應用於智能IC卡和網路安全產品。
但目前RSA演算法的專利期限即將結束,取而代之的是基於橢圓曲線的密碼方案(ECC演算法)。較之於RSA演算法,ECC有其相對優點,這使得ECC的特性更適合當今電子商務需要快速反應的發展潮流。此外,一種全新的量子密碼也正在發展中。
至於在實際應用中應該採用何種加密演算法則要結合具體應用環境和系統,不能簡單地根據其加密強度來做出判斷。因為除了加密演算法本身之外,密鑰合理分配、加密效率與現有系統的結合性以及投入產出分析都應在實際環境中具體考慮。加密技術隨著網路的發展更新,將有更安全更易於實現的演算法不斷產生,為信息安全提供更有力的保障。今後,加密技術會何去何從,我們將拭目以待。
參考文獻:
[1] Douglas R.Stinson.《密碼學原理與實踐》.北京:電子工業出版社,2003,2:131-132
[2]西蒙.辛格.《密碼故事》.海口:海南出版社,2001,1:271-272
[3]嬴政天下.加密演算法之RSA演算法.http://soft.winzheng.com/infoView/Article_296.htm,2003
[4]加密與數字簽名.http://www.njt.cn/yumdq/dzsw/a2.htm
[5]黑客中級教程系列之十.http://www.qqorg.i-p.com/jiaocheng/10.html
4. RSA加解密原理
RSA是目前使用最為廣泛的公鑰密碼演算法,公鑰加密也稱為非對稱加密,與對稱加密的最大區別在於加密與解密使用不同的密鑰。
在RSA中,明文、密文和密鑰都是數字,假設公鑰用二元組(E,N)來表示,私鑰用(D,N)來表示,其中E、D、N都是數字,那麼加解密過程可表示如下:
可見,在RSA中,不論加密還是解密,都可歸結為求x的y次冪對m取余問題。
生成RSA密鑰可分成以下4步:
首先准備兩個很大的質數p和q,那麼N = p * q。
L = lcm(p-1, q-1)
由於存在恆等式gcd(a,b) * lcm(a,b) = a * b,求lcm可轉換為求gcd,而求gcd可通過歐幾里德演算法在對數時間內算出。
E是一個比1大、比L小的數,且滿足E與L互質,即有:gcd(E,L)=1, 1 < E < L。gcd(E,L)=1是為了保證後面要求的數字D一定存在。
可不斷地生成[2,L-1]之間的隨機數作為E的候選數,檢查是否滿足條件,直到找出符合要求的E為止。
至此,E和N都已求出,那麼公鑰(E,N)也就得到了。
數D是由數E計算得到的,D、E和L之間滿足關系:E * D mod L = 1, 1 < D < L。
只要D滿足上述條件,那麼通過E與N加密的內容,就可通過D和N進行解密。
求D也可採用類似求E的方法,不斷產生隨機數去試,直到找出滿足條件的D為止,這樣私鑰(D,N)也准備好了。
為方面說明,這里用較小的數計算。先准備兩個質數,例如,p=17, q=19,那麼N=17*19=323,L=lcd(16,18)=144。
滿足gcd(E,L)=1的數很多,例如5,7,11,13,25等,這里取E=5。
滿足E*D mod L = 1的數也很多,這里取D=29。
到這里,公私鑰都有了,公鑰為(5,323),私鑰為(29,323),公鑰可任意公開,私鑰則保密。
明文必須是小於N的數,因為加密運算中要求mod N。假設明文是123,用公鑰(5,323)對其加密:
再用私鑰(29,323)對密文225進行解密:
解出的明文與原始明文一致。
5. rsa和rsa的區別
首先來說,RSA是一種非對稱加密演算法,它是由三位數學家(Rivest、Shamir、Adleman)設計出來的。非對稱加密是相對於對稱加密而言的。對稱加密演算法是指加密解密使用的是同一個秘鑰,而非對稱加密是由兩個密鑰(公鑰、私鑰)來進行加密解密的,由此可見非對稱加密安全性更高。 公鑰顧名思義就是公開的密鑰會發放給多個持有人,而私鑰是私有密碼往往只有一個持有人。 公私鑰特性 公鑰與私鑰是成對出現的; 私鑰文件中包含了公鑰數據,所以可以基於私鑰導出公鑰; 密鑰越長,越難破解,所以2048位密鑰比1024位密鑰要更安全; 公鑰和私鑰都是密鑰,被公開的那個就是公鑰,沒有被公開的那個就是私鑰。 公鑰和私鑰都可用於加密和解密 公鑰和私鑰都可以用於加解密操作,用公鑰加密的數據只能由對應的私鑰解密,反之亦然。雖說兩者都可用於加密,但是不同場景使用不同的密鑰來加密,規則如下: 1、私鑰用於簽名、公鑰用於驗簽 簽名和加密作用不同,簽名並不是為了保密,而是為了保證這個簽名是由特定的某個人簽名的,而不是被其它人偽造的簽名,所以私鑰的私有性就適合用在簽名用途上。 私鑰簽名後,只能由對應的公鑰解密,公鑰又是公開的(很多人可持有),所以這些人拿著公鑰來解密,解密成功後就能判斷出是持有私鑰的人做的簽名,驗證了身份合法性。 2、公鑰用於加密、私鑰用於解密,這才能起到加密作用 因為公鑰是公開的,很多人可以持有公鑰。若用私鑰加密,那所有持有公鑰的人都可以進行解密,這是不安全的! 若用公鑰加密,那隻能由私鑰解密,而私鑰是私有不公開的,只能由特定的私鑰持有人解密,保證的數據的安全性。 RSA演算法可以總結為四句話:公鑰加密、私鑰解密、私鑰簽名、公鑰驗簽。加密是防止信息泄露,而簽名是為了防止信息被篡改。
6. Rsa是什麼意思
RSA加密演算法是一種非對稱加密演算法。在公開密鑰加密和電子商業中RSA被廣泛使用。RSA是1977年由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。
1973年,在英國政府通訊總部工作的數學家克利福德·柯克斯(Clifford Cocks)在一個內部文件中提出了一個相同的演算法,但他的發現被列入機密,一直到1997年才被發表。
(6)公開加密rsa擴展閱讀
RSA的安全性依賴於大數分解,但是否等同於大數分解一直未能得到理論上的證明,因為沒有證明破解RSA就一定需要作大數分解。
假設存在一種無須分解大數的演算法,那它肯定可以修改成為大數分解演算法。 RSA 的一些變種演算法已被證明等價於大數分解。不管怎樣,分解n是最顯然的攻擊方法。人們已能分解多個十進制位的大素數。因此,模數n必須選大一些,因具體適用情況而定。
7. RSA加密原理
RSA加密是一種非對稱加密。可以在不直接傳遞密鑰的情況下,完成解密。這能夠確保信息的安全性,避免了直接傳遞密鑰所造成的被破解的風險。是由一對密鑰來進行加解密的過程,分別稱為公鑰和私鑰。公鑰加密--私鑰解密,私鑰加密--公鑰解密
在 整數 中, 離散對數 是一種基於 同餘 運算和 原根 的一種 對數 運算。而在實數中對數的定義 log b a 是指對於給定的 a 和 b ,有一個數 x ,使得 b x = a 。相同地在任何群 G 中可為所有整數 k 定義一個冪數為 b K ,而 離散對數 log b a 是指使得 b K = a 的整數 k 。
當3為17的 原根 時,我們會發現一個規律
對 正整數 n,歐拉函數是小於或等於n的正整數中與n 互質 的數的數目(因此φ(1)=1)。有以下幾個特點
服務端根據生成一個隨機數15,根據 3 15 mod 17 計算出6,服務端將6傳遞給客戶端,客戶端生成一個隨機數13,根據 3 13 mod 17 計算出12後,將12再傳回給服務端,客戶端收到服務端傳遞的6後,根據 6 13 mod 17 計算出 10 ,服務端收到客戶端傳遞的12後,根據 12 15 mod 17 計算出 10 ,我們會發現我們通過 迪菲赫爾曼密鑰交換 將 10 進行了加密傳遞
說明:
安全性:
除了 公鑰 用到 n 和 e ,其餘的4個數字是 不公開 的(p1、p2、φ(n)、d)
目前破解RSA得到的方式如下:
缺點
RSA加密 效率不高 ,因為是純粹的數學演算法,大數據不適合RSA加密,所以我們在加密大數據的時候,我們先用 對稱加密 演算法加密大數據得到 KEY ,然後再用 RSA 加密 KEY ,再把大數據和KEY一起進行傳遞
因為Mac系統內置了OpenSSL(開源加密庫),所以我們開源直接在終端進行RSA加密解密
生成RSA私鑰,密鑰名為private.pem,密鑰長度為1024bit
因為在iOS中是無法使用 .pem 文件進行加密和解密的,需要進行下面幾個步驟
生成一個10年期限的crt證書
crt證書格式轉換成der證書
8. rsa是什麼意思
RSA是公開密鑰密碼體制是一種使用不同的加密密鑰與解密密鑰,「由已知加密密鑰推導出解密密鑰在計算上是不可行的」密碼體制。RSA是1977年由羅納德·李維斯特(RonRivest)、阿迪·薩莫爾(AdiShamir)和倫納德·阿德曼(LeonardAdleman)一起提出的。當時他們三人都在麻省理工學院工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。
簡介
在公開密鑰密碼體制中,加密密鑰(即公開密鑰)PK是公開信息,而解密密鑰(即秘密密鑰)SK是需要保密的。加密演算法E和解密演算法D也都是公開的。雖然解密密鑰SK是由公開密鑰PK決定的,但卻不能根據PK計算出SK。正是基於這種理論,1978年出現了著名的RSA演算法,它通常是先生成一對RSA密鑰,其中之一是保密密鑰,由用戶保存;另一個為公開密鑰,可對外公開,甚至可在網路伺服器中注冊。為提高保密強度,RSA密鑰至少為500位長,一般推薦使用1024位。這就使加密的計算量很大。為減少計算量,在傳送信息時,常採用傳統加密方法與公開密鑰加密方法相結合的方式,即信息採用改進的DES或IDEA對話密鑰加密,然後使用RSA密鑰加密對話密鑰和信息摘要。對方收到信息後,用不同的密鑰解密並可核對信息摘要。
演算法原理
RSA公開密鑰密碼體制的原理是:根據數論,尋求兩個大素數比較簡單,而將它們的乘積進行因式分解卻極其困難,因此可以將乘積公開作為加密密鑰。
9. 密鑰密碼體系的公開密鑰演算法RSA
公開密鑰演算法是在1976年由當時在美國斯坦福大學的迪菲(Diffie)和赫爾曼(Hellman)兩人首先發明的(論文New Direction in Cryptography)。但目前最流行的RSA是1977年由MIT教授Ronald L.Rivest,Adi Shamir和Leonard M.Adleman共同開發的,分別取自三名數學家的名字的第一個字母來構成的。
1976年提出的公開密鑰密碼體制思想不同於傳統的對稱密鑰密碼體制,它要求密鑰成對出現,一個為加密密鑰(e),另一個為解密密鑰(d),且不可能從其中一個推導出另一個。自1976年以來,已經提出了多種公開密鑰密碼演算法,其中許多是不安全的, 一些認為是安全的演算法又有許多是不實用的,它們要麼是密鑰太大,要麼密文擴展十分嚴重。多數密碼演算法的安全基礎是基於一些數學難題, 這些難題專家們認為在短期內不可能得到解決。因為一些問題(如因子分解問題)至今已有數千年的歷史了。
公鑰加密演算法也稱非對稱密鑰演算法,用兩對密鑰:一個公共密鑰和一個專用密鑰。用戶要保障專用密鑰的安全;公共密鑰則可以發布出去。公共密鑰與專用密鑰是有緊密關系的,用公共密鑰加密的信息只能用專用密鑰解密,反之亦然。由於公鑰演算法不需要聯機密鑰伺服器,密鑰分配協議簡單,所以極大簡化了密鑰管理。除加密功能外,公鑰系統還可以提供數字簽名。
公鑰加密演算法中使用最廣的是RSA。RSA使用兩個密鑰,一個公共密鑰,一個專用密鑰。如用其中一個加密,則可用另一個解密,密鑰長度從40到2048bit可變,加密時也把明文分成塊,塊的大小可變,但不能超過密鑰的長度,RSA演算法把每一塊明文轉化為與密鑰長度相同的密文塊。密鑰越長,加密效果越好,但加密解密的開銷也大,所以要在安全與性能之間折衷考慮,一般64位是較合適的。RSA的一個比較知名的應用是SSL,在美國和加拿大SSL用128位RSA演算法,由於出口限制,在其它地區(包括中國)通用的則是40位版本。
RSA演算法研製的最初理念與目標是努力使互聯網安全可靠,旨在解決DES演算法秘密密鑰的利用公開信道傳輸分發的難題。而實際結果不但很好地解決了這個難題;還可利用RSA來完成對電文的數字簽名以抗對電文的否認與抵賴;同時還可以利用數字簽名較容易地發現攻擊者對電文的非法篡改,以保護數據信息的完性。 公用密鑰的優點就在於,也許你並不認識某一實體,但只要你的伺服器認為該實體的CA是可靠的,就可以進行安全通信,而這正是Web商務這樣的業務所要求的。例如信用卡購物。服務方對自己的資源可根據客戶CA的發行機構的可靠程度來授權。目前國內外尚沒有可以被廣泛信賴的CA。美國Natescape公司的產品支持公用密鑰,但把Natescape公司作為CA。由外國公司充當CA在我國是一件不可想像的事情。
公共密鑰方案較保密密鑰方案處理速度慢,因此,通常把公共密鑰與專用密鑰技術結合起來實現最佳性能。即用公共密鑰技術在通信雙方之間傳送專用密鑰,而用專用密鑰來對實際傳輸的數據加密解密。另外,公鑰加密也用來對專用密鑰進行加密。
在這些安全實用的演算法中,有些適用於密鑰分配,有些可作為加密演算法,還有些僅用於數字簽名。多數演算法需要大數運算,所以實現速度很慢,不能用於快的數據加密。以下將介紹典型的公開密鑰密碼演算法-RSA。
RSA演算法很好的完成對電文的數字簽名以抗對數據的否認與抵賴;利用數字簽名較容易地發現攻擊者對電文的非法篡改,以保護數據信息的完整性。目前為止,很多種加密技術採用了RSA演算法,比如PGP(PrettyGoodPrivacy)加密系統,它是一個工具軟體,向認證中心注冊後就可以用它對文件進行加解密或數字簽名,PGP所採用的就是RSA演算法。由此可以看出RSA有很好的應用。
10. 13RSA加密:公開的鑰匙反而更安全RSAEncryption: open keys are more secure
RSAEncryption: open keys are more secure
上節 已經知道,通過模運算這種不可逆的數學工具,密碼學已經發展到不需要單獨發送鑰匙了。
這個突破很大,但它實用嗎?答案是不行。
因為這套方案有個前提——需要雙方一直同時在線,通信才能啟動。而現實中,像我們用微信、發簡訊、發郵件,一般都不用對方立刻回復。這個應用場景的問題不解決,這套方法就沒法商用。
最終實現這個功能的,是第六代密碼法——RSA加密法。
這門課到現在,我們講了很多加密方法,如今大多數都不再使用了。而RSA加密法,仍是目前使用最廣泛的方法。像我們的手機支付加密、網銀加密,都會用到它。
關乎錢包和信息安全,你一定得認真聽。
RSA這3個字母,分別代表的是它的3位創立者——Ron Rivest、Adi Shamir、Leonard Adleman。
下面我們用打比方的方式,來說說具體的加密過程:
這個過程的關鍵點就是,對同一把鎖來說,上鎖和開鎖用的是兩把不同的鑰匙,而之前我們說的所有加密法都是使用相同鑰匙的。
所以之前的都叫「 對稱鑰匙 」,而RSA因為使用了不同的鑰匙,所以叫「非對稱鑰匙」,或者「非對稱加密」。
剛剛我們用一個非常簡單的比喻,把非對稱加密過程形容了一下。但還是那句話,比喻是不能代替理解的,實際的思考邏輯是這樣的:
愛麗絲要設計出一把公開鑰匙,之所以公開,是為了讓每個人都能復制這把鑰匙,用來給自己發信息加密用。但這把鑰匙,又一定不能解開加密過的信息。
所以這一步,需要一種不可逆的函數運算,只能加密不能解密,這個就可以用我們上節課說的模運算來實現。
愛麗絲本人還得有一把私人鑰匙,它是不公開的。而這把鑰匙,可以解開用她的公開鑰匙加密過的信息。
具體的細節比較難懂,需要公式的輔助,我來說說關鍵步驟:
愛麗絲展示出來的公開鑰匙,是通過兩個比較大的素數p和q相乘得到的一個更大的數N得到的。p和q具體是多少,愛麗絲只要自己知道就行,千萬不要告訴別人。而乘積N是公開的,誰都可以知道。
凡是要給愛麗絲發消息的人,都需要用N來加密。加密的過程依然用的是模運算,而且模就是N。整個數學過程會保證這個模運算不可逆,所以伊芙就算知道N也沒用。
那愛麗絲是怎麼解密的呢?她解密時就不需要N了,而是要用到p和q的具體值,而這兩個值別人都不知道,只有愛麗絲自己知道。具體來說,愛麗絲私下做的另外一個模運算中的模,不是剛才我們說的N,而是另外一個值(p-1)×(q-1)。你看,在這個公式中就必須要知道p和q到底是多少才行。
至於為什麼一定要是(p-1)×(q-1),你不用糾結,數學原理保證這樣操作能算出一把新鑰匙,這把新的鑰匙就是愛麗絲自己的私鑰。用這把私鑰,一定可以解出原文。
你說,這樣做就能保證安全嗎?伊芙已經知道了一個大數N,她難道不能利用精巧的演算法,找出N到底是由哪兩個大的質數相乘得到的嗎?
不能的,這種不能是由數學保證的。N越大,找到p和q兩個因數的時間就增加得越誇張。現在銀行使用的RSA加密,都要求N是一個超過300位的大數。想分解這樣一個數,大約需要把全球計算機的算力集中起來算上幾億年才行。
有人可能會問,為什麼非要用兩個大的質數相乘呢?用兩個巨大的合數相乘得到N,想把這個N的因數找齊,不是也要很久嗎?沒錯,是要很久。但這樣做的話,最後算出的私鑰也沒法解出原文了。所以,找兩個質數相乘,也是由數學決定的。
1978年2月,頂級期刊《ACM通信》刊登了一篇文章,叫《一種實現數字簽名和公鑰密碼系統的方法》(A Method of Obtaining Digital Signatures and Public-Key Cryptosystems),作者就是姓名以RSA這三個字母開頭的密碼學家。
在文章的第三頁就出現了這么一句:
「我們假設一個場景,愛麗絲和鮑勃是公鑰密碼系統中的兩個用戶。」這篇文章此後所有的技術細節,愛麗絲和鮑勃就成了主角。這是密碼學史上,愛麗絲和鮑勃的首次出現。
這種論文風格很另類,看上去好像在講故事。那為什麼是愛麗絲和鮑勃,而不是湯姆和傑瑞呢?
只要參考之前的通信類論文你就會發現,以往用來指代發送方和接收方的,一直都是A和B,而且由A發出的內容大都是α,由B發出的內容大都是β。
可能這三位密碼學家不想太枯燥,就把名字以A開頭的Alice當做A,把名字以B開頭的Bob當做B,於是愛麗絲和鮑勃就這樣盡人皆知了。
現在我們再來回頭看,密碼學發展的過程中,公開透明的部分越來越多。
到了第六代的RSA加密法,不但加密的操作公開了,連部分鑰匙都公開了。而且公鑰不是情不得已才公開的,而是越公開益處越大,因為這樣才能有更多的人給你發加密消息。到了現在,唯一不能公開的就只有私鑰。
可能聽到這里,你會感覺RSA加密法使用的數學工具很陌生。沒錯,這個方法用到了兩大數學領域的知識——質數方面的應用和數論有關,單向函數的應用和群論有關。
這個演算法背後的數學證明,一般在計算機系《演算法導論》有詳細論述。如果想深入了解,你可以參考這類教科書。
數學有很多分支,現在大多已經成為工程應用的理論基礎了。不過它們化身為應用的范圍有寬有窄,比如群論的應用就廣闊很多,而數論部分就狹窄很多,目前只有密碼學在應用。
1979年,RSA注冊了專利後,還成就了很多信息安全公司。但如果就這樣介紹完RSA加密法是如何創生的,那真的有人要受委屈了。
因為同樣的加密法,其實早在4年就已經有人完整的做出來了。那他們為什麼沒有成為這種非對稱鑰匙系統的專利發明人呢?
道理還是我之前說的,密碼學領域註定會有很多受屈者。
最早發明這種方法的,並不是RSA這三個人,而是詹姆斯·艾利斯(James Ellis)、克里佛·考克斯(Clifford Cocks)和馬爾科姆·威廉森(Malcolm Williamson),我們簡稱他們三人為JCM。
他們都是英國政府通訊總部的員工。不知道你是不是還記得圖靈破解恩尼格瑪機時,那個龐大的情報部門布萊切利園。當時9000名員工,戰後絕大部分都回到了原來的生活中,只有少數轉去英國通訊總部做了公務員,這3位密碼學家就是這樣留任的。
他們之後的研究也全都帶有軍方項目的性質,所以是國家機密。別看1975年他們就做出了整套非對稱鑰匙加密系統,但直到24年後的1997年,人們才知道這件事。這時不要說和RSA爭奪專利發明權了,連RSA的專利甚至都要過期了。
其實在1975年,JCM剛剛做出全套演算法的時候,他們曾經向國家通訊總部提出過注冊專利的要求,但總部沒有批。
幾年後他們聽說RSA三個人注冊了專利後,特別失落,因為他們才是最早的發明人,專利應該屬於他們。但因為軍方的限制,他們只好保持沉默。
到了80年代,隨著計算機性能持續提升,RSA實用性越來越高,連當年拒絕JCM申請專利的通訊總部的長官,都開始後悔了。
而且這種遺憾,隨著時間推移還在持續增加。2006年,RSA數據安全公司被EMC公司花2.1億美元收購。又過了10年,EMC公司又被戴爾公司收購,成為戴爾技術品牌的一員。
1997年,英國公布JCM三人成果不久之後,他們舉行了一次公開演講。
演講結束後,JCM里的威廉森接受采訪,被問到錯失專利的感受時,他說「沒辦法,人生就是這樣」。另一個人考克斯的反應要更淡定一些,他說「我要是想得到公開的贊揚,就不會來做當前這份工作了」,他指的就是在英國通訊總部的工作。
而第三個人,也是最早參與研發的詹姆斯·艾利斯,在演講前一個月剛剛過世,享年73歲。
講到現在,密碼學近代史上,已經有3個重要人物沒有在他們有生之年獲得應有的嘉獎了。
他們都是因為軍方需要保密,而不得不做出犧牲。可從事密碼學研究的人,有相當高的比例就是為政府情報部門工作的。這個屬性就決定了,他們很容易受到歷史不公正的評價。而對我們這些看客來說,關於密碼學的突破,我們能了解到的,只是各國情報部門允許我們了解到的部分。
這是密碼學這個學科分支,獨有的文化特徵。
這節講了RSA加密法的加密原理,知道了這種「 非對稱加密 」的高明之處。
下節引起了整個美國全民大討論的密碼學事件,看看RSA加密法是怎麼被普及的。