RSA是什麼
- 計算機的加密技術分爲對稱加密和非對稱加密兩類。在對稱加密中,信息的加解密使用同一祕鑰key,其可簡化加解密的過程,較爲簡單,但不足之處在於因爲加解密使用同一個key,信息傳送雙方都要接觸這個key,密鑰key更容易泄露。
- 在公開密鑰加密即非對稱加密中,密鑰分爲公鑰PK(發送方經過PK對數據加密,而後發送給接收方,PK可公開),私鑰SK(SK解密方保存,接收方經過SK對密文解密,SK不公開)。RSA公鑰密碼體制是最具表明性的非對稱加密方式。
RSA算法原理
- RSA定理:若P和Q是兩個相異質數,另有正整數D和E,其中E的值與
- (P-1)(Q-1)的值互質,並使得DE%(P-1)(Q-1)=1,有正整數M,且M<PQ,設:
- C=ME%PQ,B=CD%PQ,則有M=B。
生成公鑰和密鑰算法
- 隨意選擇兩個大的素數P和Q,且P不等於Q
- 令N=PQ
- 令T=(P-1)(Q-1)
- 選擇一個整數E,做爲一個密鑰,使E與T互質(即E與T的最大公約數爲1),且E必須小於T
- 由公式DE%T=1,計算獲得D的值,做爲另外一密鑰
- 將(N,E)做爲公鑰,(N,D)做爲私鑰,固然也可互換。
用公鑰加密信息安全
- 發送方收到公鑰(N,E)後,經過公鑰對數據進行加密,操做以下:
- 明文:M
- 加密:ME%N=C
- 密文:C
用私鑰解密信息網絡
- 接收方收到密文C後,經過私鑰(N,D)進行解密,獲得明文M,操做以下:
- 密文:C
- 解密:CD%N=M
- 明文:M
RSA算法模擬
爲了計算方便,選取較小素數併發
生成公鑰和密鑰加密
- 取P=11,Q=13
- 令N=PQ=11*13=143
- 令T=(P-1)(Q-1)=10*12=120
- 取E=7
- 由公式DE%T=1,D*7%120=1得:D=103
- (143,103)做爲公鑰,將(143,7)做爲私鑰。
用公鑰加密信息spa
- 明文:取M=2
- 加密:ME%N=C,2103%143=63
- 密文:C=63
用私鑰解密信息計算機網絡
- 密文:C=63
- 解密:CD%N=M,637%143=2
- 明文:M=2
RSA的應用:數字簽名
數字簽名是實現安全的核心技術之一,它的實現基礎就是RSA加密技術,它是RSA的典型應用。
以往的書信或文件是經過親筆簽名或印章證實其真實性的,但在計算機網絡中,要解決報文的驗證問題,就要使用數字簽名,其必須保證如下幾點:blog
- 接受者可以覈實發送者對報文的簽名
- 發送者過後不能抵賴對報文的簽名
- 接受者不能僞造對報文的簽名
- 在現有的多種實現數字簽名的方法中,採用公開祕鑰算法比常規算法更容易實現。
- 採用RSA實現數字簽名的過程:
- 發送者A用其私鑰SKA對報文M進行運算,將結果DSKA(M)發送給接受者B。
- 接受者B用已知的A的公鑰得出EPKA(DSKA(M))=M。
- 由於除了A沒人有A的私鑰SKA,因此除了A沒有人能產生密文DSKA(M),這樣,報文M就被簽名了。用私鑰加密的報文發給對方,對方只能用持有的公鑰解密,這樣就實現了覈實發送者對報文的報文的簽名。
- 若是發送者A要抵賴曾經發送過報文M給用戶B,則用戶B可將M和DSKA(M)出示給第三方監管機構,第三方很容易用公鑰PKA去證明A確實發送報文M給用戶B。反之,若用戶B將M僞造爲M’,則用戶B就不能在第三方面前出示DSKA(M’),這樣就證實了用戶B僞造了對報文M的簽名。由此,可看出,實現數字簽名的同時也實現了對報文來源的鑑別。
![](http://static.javashuo.com/static/loading.gif)
RSA算法的缺點
再強的加密算法,也有被破解的一天。RSA算法是被研究得最普遍的公鑰算法,從提出到如今經歷了各類攻擊,被廣泛認爲是目前最優秀的公鑰方案之一。
RSA的缺點主要有兩點:it
- 產生密鑰很麻煩,因爲素數產生技術的限制,難以作到一次一密。
- 分組長度太大,爲保證安全性,N至少要600bit二進制位以上,運算代價高,速度慢。RSA算法的安全性依賴於大數分解,對於一個大數N,沒有有效的方法可以將其分解,從而在已知(N,D)的狀況下,沒法得到E,一樣在已知(N,E)的狀況下沒法求得D。目前,SET協議中要求CA採用2048bit二進制位長的密鑰,其餘實體使用1024比特的密鑰。如今小於1024比特的N已被證實是不安全的,所以不該使用小於1024比特的RSA,最好使用2048位的N。
公鑰加密
- 假設一下,我找了兩個數字,一個是1,一個是2。我喜歡2這個數字,就保留起來,不告訴大家(私鑰),而後我告訴你們,1是個人公鑰。
- 我有一個文件,不能讓別人看,我就用1加密了。別人找到了這個文件,可是他不知道2就是解密的私鑰啊,因此他解不開,只有我能夠用
- 數字2,就是個人私鑰,來解密。這樣我就能夠保護數據了。
- 個人好朋友x用個人公鑰1加密了字符a,加密後成了b,放在網上。別人偷到了這個文件,可是別人解不開,由於別人不知道2就是個人私鑰,
- 只有我才能解密,解密後就獲得a。這樣,咱們就能夠傳送加密的數據了。
私鑰簽名
- 若是我用私鑰加密一段數據(固然只有我能夠用私鑰加密,由於只有我知道2是個人私鑰),結果全部的人都看到個人內容了,由於他們都知
- 道個人公鑰是1,那麼這種加密有什麼用處呢?
- 可是個人好朋友x說有人冒充我給他發信。怎麼辦呢?我把我要發的信,內容是c,用個人私鑰2,加密,加密後的內容是d,發給x,再告訴他
- 解密看是否是c。他用個人公鑰1解密,發現果真是c。
- 這個時候,他會想到,可以用個人公鑰解密的數據,必然是用個人私鑰加的密。只有我知道我得私鑰,所以他就能夠確認確實是我發的東西。
- 這樣咱們就能確認發送方身份了。這個過程叫作數字簽名。固然具體的過程要稍微複雜一些。用私鑰來加密數據,用途就是數字簽名。
總結:公鑰和私鑰是成對的,它們互相解密。class
公鑰加密,私鑰解密。
私鑰數字簽名,公鑰驗證。
舉例
好比有兩個用戶Alice和Bob,Alice想把一段明文經過雙鑰加密的技術發送給Bob,Bob有一對公鑰和私鑰,那麼加密解密的過程以下:
- Bob將他的公開密鑰傳送給Alice。
- Alice用Bob的公開密鑰加密她的消息,而後傳送給Bob。
- Bob用他的私人密鑰解密Alice的消息。
上面的過程能夠用下圖表示,Alice使用Bob的公鑰進行加密,Bob用本身的私鑰進行解密。
![](http://static.javashuo.com/static/loading.gif)
公鑰算法與私鑰算法
私鑰算法
私鑰加密算法,又稱 對稱加密算法,由於這種算法解密密鑰和加密密鑰是相同的。也正由於同一密鑰既用於加密又用於解密,因此這個密鑰是不能公開的。
公鑰算法
公鑰加密算法,也就是非對稱加密算法,這種算法加密和解密的密碼不同,一個是公鑰,另外一個是私鑰:
公鑰和私鑰成對出現
- 公開的密鑰叫公鑰,只有本身知道的叫私鑰
- 用公鑰加密的數據只有對應的私鑰能夠解密
- 用私鑰加密的數據只有對應的公鑰能夠解密
- 若是能夠用公鑰解密,則必然是對應的私鑰加的密
- 若是能夠用私鑰解密,則必然是對應的公鑰加的密
- 公鑰和私鑰是相對的,二者自己並無規定哪個必須是公鑰或私鑰。
實現數據的安全傳輸
- 要實現數據的安全傳輸,固然就要對數據進行加密了。
- 若是使用對稱加密算法,加解密使用同一個密鑰,除了本身保存外,對方也要知道這個密鑰,才能對數據進行解密。若是你把密鑰也一塊兒傳過去,就存在密碼泄漏的可能。因此咱們使用非對稱算法,過程以下:
- 首先 接收方 生成一對密鑰,即私鑰和公鑰;
- 而後,接收方 將公鑰發送給 發送方;
- 發送方用收到的公鑰對數據加密,再發送給接收方;
- 接收方收到數據後,使用本身的私鑰解密。
- 因爲在非對稱算法中,公鑰加密的數據必須用對應的私鑰才能解密,而私鑰又只有接收方本身知道,這樣就保證了數據傳輸的安全性。
公鑰算法的缺點
現實中,公鑰機制也有它的缺點,那就是效率很是低,比經常使用的私鑰算法(如 DES 和 AES)慢上一兩個數量級都有可能。因此它不適合爲大量的原始信息進行加密。爲了同時兼顧安全和效率,咱們一般結合使用公鑰算法和私鑰算法:
- 首先,發送方使用對稱算法對原始信息進行加密。
- 接收方經過公鑰機制生成一對密鑰,一個公鑰,一個私鑰。
- 接收方 將公鑰發送給 發送方。
- 發送方用公鑰對對稱算法的密鑰進行加密,併發送給接收方。
- 接收方用私鑰進行解密獲得對稱算法的密鑰。
- 發送方再把已加密的原始信息發送給接收方。
接收方使用對稱算法的密鑰進行解密。
![](http://static.javashuo.com/static/loading.gif)
總結:
- 每一個用戶都有一對私鑰和公鑰。
- 私鑰用來進行解密和簽名,是給本身用的。
- 公鑰由本人公開,用於加密和驗證簽名,是給別人用的。
- 當該用戶發送文件時,用私鑰簽名,別人用他給的公鑰解密,能夠保證該信息是由他發送的。即數字簽名。
- 當該用戶接受文件時,別人用他的公鑰加密,他用私鑰解密,能夠保證該信息只能由他看到。即安全傳輸。