當前位置:首頁 » 密碼管理 » rsa加密演算法是對稱加密演算法

rsa加密演算法是對稱加密演算法

發布時間: 2023-10-05 06:57:05

A. 2019-06-10 對稱加密 和非對稱加密

一、對稱加密

AES加密

AES加密是一種高級加密標准,是一種區塊加密標准。它是一個對稱密碼,就是說加密和解密用相同的密鑰。WPA/WPA2經常用的加密方式就是AES加密演算法

二、非對稱加密

RSA加密演算法是一種非對稱加密演算法,非對稱加密演算法需要兩個密鑰:公共密鑰和私有密鑰。公鑰和私鑰是配對的,用公鑰加密的數據只有配對的私鑰才能解密。

RSA對加密數據的長度有限制,一般為密鑰的長度值-11,要加密較長的數據,可以採用數據截取的方法,分段加密。

使用場景:

文件或數據在本地使用公鑰或私鑰加密,加密後的數據傳送到伺服器,伺服器使用同一套密鑰中的私鑰或者公鑰進行解密。

一、Https是什麼?

1.HTTPS概念

HTTPS並不是一個單獨的協議,而是對工作在一加密連接(SSL/TLS)上的常規HTTP協議。通過在TCP和HTTP之間加入TLS來加密。

2.SSL/TLS協議

SSL協議,是一種安全傳輸的協議,TLS是SSL v3.0的升級版。

4.HTTPS傳輸速度

1)通信慢

2)SSL必須進行加密處理,比HTTP消耗更多資源

二、TLS/SSL握手

1.密碼學原理

1)對稱加密

加密數據用的秘鑰和解密數據用的密鑰是一樣的。

2)不對稱加密

私有密鑰:一方保管

共有密鑰:雙方公有

RSA演算法。

2.數字證書

1)就是互聯網通訊中標志通訊各方身份信息的一串數字,也是一個文件。

2)為什麼有數字證書?

3)數字證書的頒發過程?

3.SSL與TLS握手的過程?

使用非對稱加密,隨機數不能被隨便破解

Https雙向認證的流程:

a. 客戶端向服務端發送SSL版本等信息

b. 服務端給客戶端返回SSL版本,同時也返回伺服器端的證書

c.  客戶端使用服務的返回的信息驗證伺服器的合法性,

a) 包括:證書是否過期,發型伺服器證書的CA是否可靠,返回的公鑰能正確解開返回證書中的數字簽名,伺服器證書上帝域名是否和伺服器的實際域名想匹配

b) 驗證通過後,將進行通信,否則終止通信

d. 客戶端將自己的證書和公鑰發送給服務端

e. 驗證客戶端的證書,通過驗證後,會獲得客戶端的公鑰

f. 客戶端向服務端發送自己可以支持的對稱加密方案給服務端,讓服務端進行選擇

g. 服務端在客戶端提供的加密方案中選擇加密程度高的加密方式

h. 將加密方案通過使用之前獲取到的公鑰進行加密,返回給客戶端

i. 客戶端收到服務端返回的加密方案後,使用自己的私鑰進行解密,獲取具體的加密方式,最後,產生加密方式的隨機碼,用作過程中的密鑰,使用之前從客戶端證書中獲取到的公鑰進行加密後,發送嘿服務端

j. 服務端收到客戶端發來的消息後,使用私鑰對加密信息進行加密,獲得對稱加密的密鑰

k. 對稱加密,確保通信安全

總結:https實際上就是在TCP層與http層之間加入了SSL/TLS來為上層的安全保駕護航,主要用到了對稱加密,非對稱加密,證書等技術進行客戶端與伺服器的數據加密傳輸,最終達到保證整個通信的安全性。

B. RSA加密與對稱加密如何使用呢他們的混合應用又應該怎麼用呢

RSA演算法是第一個能同時用於加密和數字簽名的演算法。RSA演算法能生成公私鑰對。
假設A、B要通信,那麼他們需要彼此知道對方的公鑰,如果a向b發送信息,a先用自己的私鑰對信息進行加密(即簽名),然後用b的公鑰進行加密。當
b收到消息時,先用自己的私鑰進行解密,然後用a的公用進行解密(即驗證簽名),即可看到a發送的明文信息。
若是用對稱密鑰進行加密,則雙方公用一個密鑰,這個密鑰需要絕對保密,不能讓別人知道。a在向b發送信息前,先用這個密鑰對信息進行加密,然後把加密的信息發送給b,之後再把密鑰通過另一通道發送給b(要保證密鑰傳輸的安全,不被其他人截獲),b收到密文和密鑰後,再用這個密鑰進行解密,就可以得到原文。
若混合使用,假設還是a向b發送信息,a先用自己的私鑰進行簽名,然後再用雙方公用的對稱密鑰(即會話密鑰)進行加密,得到加密後的密文,然後用b的公鑰對雙方的會話密鑰進行加密,得到加密的會話密鑰,然後把加密的密文和加密的會話密鑰一起發給b,b收到後先用自己的私鑰對加密的會話密鑰進行解密,得到會話密鑰,再用會話密鑰對加密的密文進行解密,得到簽名的信息,然後用a的公鑰對簽名進行驗證,便可得到原始信息。

C. RSA加密演算法原理

RSA加密演算法是一種典型的非對稱加密演算法,它基於大數的因式分解數學難題,它也是應用最廣泛的非對稱加密演算法,於1978年由美國麻省理工學院(MIT)的三位學著:Ron Rivest、Adi Shamir 和 Leonard Adleman 共同提出。

它的原理較為簡單,假設有消息發送方A和消息接收方B,通過下面的幾個步驟,就可以完成消息的加密傳遞:
消息發送方A在本地構建密鑰對,公鑰和私鑰;
消息發送方A將產生的公鑰發送給消息接收方B;
B向A發送數據時,通過公鑰進行加密,A接收到數據後通過私鑰進行解密,完成一次通信;
反之,A向B發送數據時,通過私鑰對數據進行加密,B接收到數據後通過公鑰進行解密。
由於公鑰是消息發送方A暴露給消息接收方B的,所以這種方式也存在一定的安全隱患,如果公鑰在數據傳輸過程中泄漏,則A通過私鑰加密的數據就可能被解密。
如果要建立更安全的加密消息傳遞模型,需要消息發送方和消息接收方各構建一套密鑰對,並分別將各自的公鑰暴露給對方,在進行消息傳遞時,A通過B的公鑰對數據加密,B接收到消息通過B的私鑰進行解密,反之,B通過A的公鑰進行加密,A接收到消息後通過A的私鑰進行解密。
當然,這種方式可能存在數據傳遞被模擬的隱患,但可以通過數字簽名等技術進行安全性的進一步提升。由於存在多次的非對稱加解密,這種方式帶來的效率問題也更加嚴重。

D. 加密基礎知識二 非對稱加密RSA演算法和對稱加密

上述過程中,出現了公鑰(3233,17)和私鑰(3233,2753),這兩組數字是怎麼找出來的呢?參考 RSA演算法原理(二)
首字母縮寫說明:E是加密(Encryption)D是解密(Decryption)N是數字(Number)。

1.隨機選擇兩個不相等的質數p和q。
alice選擇了61和53。(實際應用中,這兩個質數越大,就越難破解。)

2.計算p和q的乘積n。
n = 61×53 = 3233
n的長度就是密鑰長度。3233寫成二進制是110010100001,一共有12位,所以這個密鑰就是12位。實際應用中,RSA密鑰一般是1024位,重要場合則為2048位。

3.計算n的歐拉函數φ(n)。稱作L
根據公式φ(n) = (p-1)(q-1)
alice算出φ(3233)等於60×52,即3120。

4.隨機選擇一個整數e,也就是公鑰當中用來加密的那個數字
條件是1< e < φ(n),且e與φ(n) 互質。
alice就在1到3120之間,隨機選擇了17。(實際應用中,常常選擇65537。)

5.計算e對於φ(n)的模反元素d。也就是密鑰當中用來解密的那個數字
所謂"模反元素"就是指有一個整數d,可以使得ed被φ(n)除的余數為1。ed ≡ 1 (mod φ(n))
alice找到了2753,即17*2753 mode 3120 = 1

6.將n和e封裝成公鑰,n和d封裝成私鑰。
在alice的例子中,n=3233,e=17,d=2753,所以公鑰就是 (3233,17),私鑰就是(3233, 2753)。

上述故事中,blob為了偷偷地傳輸移動位數6,使用了公鑰做加密,即6^17 mode 3233 = 824。alice收到824之後,進行解密,即824^2753 mod 3233 = 6。也就是說,alice成功收到了blob使用的移動位數。

再來復習一下整個流程:
p=17,q=19
n = 17 19 = 323
L = 16 18 = 144
E = 5(E需要滿足以下兩個條件:1<E<144,E和144互質)
D = 29(D要滿足兩個條件,1<D<144,D mode 144 = 1)
假設某個需要傳遞123,則加密後:123^5 mode 323 = 225
接收者收到225後,進行解密,225^ 29 mode 323 = 123

回顧上面的密鑰生成步驟,一共出現六個數字:
p
q
n
L即φ(n)
e
d
這六個數字之中,公鑰用到了兩個(n和e),其餘四個數字都是不公開的。其中最關鍵的是d,因為n和d組成了私鑰,一旦d泄漏,就等於私鑰泄漏。那麼,有無可能在已知n和e的情況下,推導出d?
(1)ed≡1 (mod φ(n))。只有知道e和φ(n),才能算出d。
(2)φ(n)=(p-1)(q-1)。只有知道p和q,才能算出φ(n)。
(3)n=pq。只有將n因數分解,才能算出p和q。
結論:如果n可以被因數分解,d就可以算出,也就意味著私鑰被破解。
可是,大整數的因數分解,是一件非常困難的事情。目前,除了暴力破解,還沒有發現別的有效方法。維基網路這樣寫道:"對極大整數做因數分解的難度決定了RSA演算法的可靠性。換言之,對一極大整數做因數分解愈困難,RSA演算法愈可靠。假如有人找到一種快速因數分解的演算法,那麼RSA的可靠性就會極度下降。但找到這樣的演算法的可能性是非常小的。今天只有短的RSA密鑰才可能被暴力破解。到2008年為止,世界上還沒有任何可靠的攻擊RSA演算法的方式。只要密鑰長度足夠長,用RSA加密的信息實際上是不能被解破的。"

然而,雖然RSA的安全性依賴於大數的因子分解,但並沒有從理論上證明破譯RSA的難度與大數分解難度等價。即RSA的重大缺陷是無法從理論上把握它的保密性能如何。此外,RSA的缺點還有:
A)產生密鑰很麻煩,受到素數產生技術的限制,因而難以做到一次一密。
B)分組長度太大,為保證安全性,n 至少也要 600bits以上,使運算代價很高,尤其是速度較慢,較對稱密碼演算法慢幾個數量級;且隨著大數分解技術的發展,這個長度還在增加,不利於數據格式的標准化。因此, 使用RSA只能加密少量數據,大量的數據加密還要靠對稱密碼演算法

加密和解密是自古就有技術了。經常看到偵探電影的橋段,勇敢又機智的主角,拿著一長串毫無意義的數字苦惱,忽然靈光一閃,翻出一本厚書,將第一個數字對應頁碼數,第二個數字對應行數,第三個數字對應那一行的某個詞。數字變成了一串非常有意義的話:
Eat the beancurd with the peanut. Taste like the ham.

這種加密方法是將原來的某種信息按照某個規律打亂。某種打亂的方式就叫做密鑰(cipher code)。發出信息的人根據密鑰來給信息加密,而接收信息的人利用相同的密鑰,來給信息解密。 就好像一個帶鎖的盒子。發送信息的人將信息放到盒子里,用鑰匙鎖上。而接受信息的人則用相同的鑰匙打開。加密和解密用的是同一個密鑰,這種加密稱為對稱加密(symmetric encryption)。

如果一對一的話,那麼兩人需要交換一個密鑰。一對多的話,比如總部和多個特工的通信,依然可以使用同一套密鑰。 但這種情況下,對手偷到一個密鑰的話,就知道所有交流的信息了。 二戰中盟軍的情報戰成果,很多都來自於破獲這種對稱加密的密鑰。

為了更安全,總部需要給每個特工都設計一個不同的密鑰。如果是FBI這樣龐大的機構,恐怕很難維護這么多的密鑰。在現代社會,每個人的信用卡信息都需要加密。一一設計密鑰的話,銀行怕是要跪了。

對稱加密的薄弱之處在於給了太多人的鑰匙。如果只給特工鎖,而總部保有鑰匙,那就容易了。特工將信息用鎖鎖到盒子里,誰也打不開,除非到總部用唯一的一把鑰匙打開。只是這樣的話,特工每次出門都要帶上許多鎖,太容易被識破身份了。總部老大想了想,乾脆就把造鎖的技術公開了。特工,或者任何其它人,可以就地取材,按照圖紙造鎖,但無法根據圖紙造出鑰匙。鑰匙只有總部的那一把。

上面的關鍵是鎖和鑰匙工藝不同。知道了鎖,並不能知道鑰匙。這樣,銀行可以將「造鎖」的方法公布給所有用戶。 每個用戶可以用鎖來加密自己的信用卡信息。即使被別人竊聽到,也不用擔心:只有銀行才有鑰匙呢!這樣一種加密演算法叫做非對稱加密(asymmetric encryption)。非對稱加密的經典演算法是RSA演算法。它來自於數論與計算機計數的奇妙結合。

1976年,兩位美國計算機學家Whitfield Diffie 和 Martin Hellman,提出了一種嶄新構思,可以在不直接傳遞密鑰的情況下,完成解密。這被稱為"Diffie-Hellman密鑰交換演算法"。這個演算法啟發了其他科學家。人們認識到,加密和解密可以使用不同的規則,只要這兩種規則之間存在某種對應關系即可,這樣就避免了直接傳遞密鑰。這種新的加密模式被稱為"非對稱加密演算法"。

1977年,三位數學家Rivest、Shamir 和 Adleman 設計了一種演算法,可以實現非對稱加密。這種演算法用他們三個人的名字命名,叫做RSA演算法。從那時直到現在,RSA演算法一直是最廣為使用的"非對稱加密演算法"。毫不誇張地說,只要有計算機網路的地方,就有RSA演算法。

1.能「撞」上的保險箱(非對稱/公鑰加密體制,Asymmetric / Public Key Encryption)

數據加密解密和門鎖很像。最開始的時候,人們只想到了那種只能用鑰匙「鎖」數據的鎖。如果在自己的電腦上自己加密數據,當然可以用最開始這種門鎖的形式啦,方便快捷,簡單易用有木有。

但是我們現在是通信時代啊,雙方都想做安全的通信怎麼辦呢?如果也用這種方法,通信就好像互相發送密碼保險箱一樣…而且雙方必須都有鑰匙才能進行加密和解密。也就是說,兩個人都拿著保險箱的鑰匙,你把數據放進去,用鑰匙鎖上發給我。我用同樣的鑰匙把保險箱打開,再把我的數據鎖進保險箱,發送給你。

這樣看起來好像沒什麼問題。但是,這裡面 最大的問題是:我們兩個怎麼弄到同一個保險箱的同一個鑰匙呢? 好像僅有的辦法就是我們兩個一起去買個保險箱,然後一人拿一把鑰匙,以後就用這個保險箱了。可是,現代通信社會,絕大多數情況下別說一起去買保險箱了,連見個面都難,這怎麼辦啊?

於是,人們想到了「撞門」的方法。我這有個可以「撞上」的保險箱,你那裡自己也買一個這樣的保險箱。通信最開始,我把保險箱打開,就這么開著把保險箱發給你。你把數據放進去以後,把保險箱「撞」上發給我。撞上以後,除了我以外,誰都打不開保險箱了。這就是RSA了,公開的保險箱就是公鑰,但是我有私鑰,我才能打開。

2.數字簽名
這種鎖看起來好像很不錯,但是鎖在運輸的過程中有這么一個嚴重的問題:你怎麼確定你收到的開著的保險箱就是我發來的呢?對於一個聰明人,他完全可以這么干:
(a)裝作運輸工人。我現在把我開著的保險箱運給對方。運輸工人自己也弄這么一個保險箱,運輸的時候把保險箱換成他做的。
(b)對方收到保險箱後,沒法知道這個保險箱是我最初發過去的,還是運輸工人替換的。對方把數據放進去,把保險箱撞上。
(c)運輸工人往回運的時候,用自己的鑰匙打開自己的保險箱,把數據拿走。然後復印也好,偽造也好,弄出一份數據,把這份數據放進我的保險箱,撞上,然後發給我。
從我的角度,從對方的角度,都會覺得這數據傳輸過程沒問題。但是,運輸工人成功拿到了數據,整個過程還是不安全的,大概的過程是這樣:

這怎麼辦啊?這個問題的本質原因是,人們沒辦法獲知,保險箱到底是「我」做的,還是運輸工人做的。那乾脆,我們都別做保險箱了,讓權威機構做保險箱,然後在每個保險箱上用特殊的工具刻上一個編號。對方收到保險箱的時候,在權威機構的「公告欄」上查一下編號,要是和保險箱上的編號一樣,我就知道這個保險箱是「我」的,就安心把數據放進去。大概過程是這樣的:

如何做出刻上編號,而且編號沒法修改的保險箱呢?這涉及到了公鑰體制中的另一個問題:數字簽名。
要知道,刻字這種事情吧,誰都能幹,所以想做出只能自己刻字,還沒法讓別人修改的保險箱確實有點難度。那麼怎麼辦呢?這其實困擾了人們很長的時間。直到有一天,人們發現:我們不一定非要在保險箱上刻規規矩矩的字,我們乾脆在保險箱上刻手寫名字好了。而且,刻字有點麻煩,乾脆我們在上面弄張紙,讓人直接在上面寫,簡單不費事。具體做法是,我們在保險箱上嵌進去一張紙,然後每個出產的保險箱都讓權威機構的CEO簽上自己的名字。然後,CEO把自己的簽名公開在權威機構的「公告欄」上面。比如這個CEO就叫「學酥」,那麼整個流程差不多是這個樣子:

這個方法的本質原理是,每個人都能夠通過筆跡看出保險箱上的字是不是學酥CEO簽的。但是呢,這個字體是學酥CEO唯一的字體。別人很難模仿。如果模仿我們就能自己分辨出來了。要是實在分辨不出來呢,我們就請一個筆跡專家來分辨。這不是很好嘛。這個在密碼學上就是數字簽名。

上面這個簽字的方法雖然好,但是還有一個比較蛋疼的問題。因為簽字的樣子是公開的,一個聰明人可以把公開的簽字影印一份,自己造個保險箱,然後把這個影印的字也嵌進去。這樣一來,這個聰明人也可以造一個相同簽字的保險箱了。解決這個問題一個非常簡單的方法就是在看保險箱上的簽名時,不光看字體本身,還要看字體是不是和公開的字體完全一樣。要是完全一樣,就可以考慮這個簽名可能是影印出來的。甚至,還要考察字體是不是和其他保險櫃上的字體一模一樣。因為聰明人為了欺騙大家,可能不影印公開的簽名,而影印其他保險箱上的簽名。這種解決方法雖然簡單,但是驗證簽名的時候麻煩了一些。麻煩的地方在於我不僅需要對比保險箱上的簽名是否與公開的筆跡一樣,還需要對比得到的簽名是否與公開的筆跡完全一樣,乃至是否和所有發布的保險箱上的簽名完全一樣。有沒有什麼更好的方法呢?

當然有,人們想到了一個比較好的方法。那就是,學酥CEO簽字的時候吧,不光把名字簽上,還得帶上簽字得日期,或者帶上這個保險箱的編號。這樣一來,每一個保險箱上的簽字就唯一了,這個簽字是學酥CEO的簽名+學酥CEO寫上的時間或者編號。這樣一來,就算有人偽造,也只能偽造用過的保險箱。這個問題就徹底解決了。這個過程大概是這么個樣子:

3 造價問題(密鑰封裝機制,Key Encapsulation Mechanism)
解決了上面的各種問題,我們要考慮考慮成本了… 這種能「撞」門的保險箱雖然好,但是這種鎖造價一般來說要比普通的鎖要高,而且鎖生產時間也會變長。在密碼學中,對於同樣「結實」的鎖,能「撞」門的鎖的造價一般來說是普通鎖的上千倍。同時,能「撞」門的鎖一般來說只能安裝在小的保險櫃裡面。畢竟,這么復雜的鎖,裝起來很費事啊!而普通鎖安裝在多大的保險櫃上面都可以呢。如果兩個人想傳輸大量數據的話,用一個大的保險櫃比用一堆小的保險櫃慢慢傳要好的多呀。怎麼解決這個問題呢?人們又想出了一個非常棒的方法:我們把兩種鎖結合起來。能「撞」上的保險櫃裡面放一個普通鎖的鑰匙。然後造一個用普通的保險櫃來鎖大量的數據。這樣一來,我們相當於用能「撞」上的保險櫃發一個鑰匙過去。對方收到兩個保險櫃後,先用自己的鑰匙把小保險櫃打開,取出鑰匙。然後在用這個鑰匙開大的保險櫃。這樣做更棒的一個地方在於,既然對方得到了一個鑰匙,後續再通信的時候,我們就不再需要能「撞」上的保險櫃了啊,在以後一定時間內就用普通保險櫃就好了,方便快捷嘛。

以下參考 數字簽名、數字證書、SSL、https是什麼關系?
4.數字簽名(Digital Signature)
數據在瀏覽器和伺服器之間傳輸時,有可能在傳輸過程中被冒充的盜賊把內容替換了,那麼如何保證數據是真實伺服器發送的而不被調包呢,同時如何保證傳輸的數據沒有被人篡改呢,要解決這兩個問題就必須用到數字簽名,數字簽名就如同日常生活的中的簽名一樣,一旦在合同書上落下了你的大名,從法律意義上就確定是你本人簽的字兒,這是任何人都沒法仿造的,因為這是你專有的手跡,任何人是造不出來的。那麼在計算機中的數字簽名怎麼回事呢?數字簽名就是用於驗證傳輸的內容是不是真實伺服器發送的數據,發送的數據有沒有被篡改過,它就干這兩件事,是非對稱加密的一種應用場景。不過他是反過來用私鑰來加密,通過與之配對的公鑰來解密。
第一步:服務端把報文經過Hash處理後生成摘要信息Digest,摘要信息使用私鑰private-key加密之後就生成簽名,伺服器把簽名連同報文一起發送給客戶端。
第二步:客戶端接收到數據後,把簽名提取出來用public-key解密,如果能正常的解密出來Digest2,那麼就能確認是對方發的。
第三步:客戶端把報文Text提取出來做同樣的Hash處理,得到的摘要信息Digest1,再與之前解密出來的Digist2對比,如果兩者相等,就表示內容沒有被篡改,否則內容就是被人改過了。因為只要文本內容哪怕有任何一點點改動都會Hash出一個完全不一樣的摘要信息出來。

5.數字證書(Certificate Authority)
數字證書簡稱CA,它由權威機構給某網站頒發的一種認可憑證,這個憑證是被大家(瀏覽器)所認可的,為什麼需要用數字證書呢,難道有了數字簽名還不夠安全嗎?有這樣一種情況,就是瀏覽器無法確定所有的真實伺服器是不是真的是真實的,舉一個簡單的例子:A廠家給你們家安裝鎖,同時把鑰匙也交給你,只要鑰匙能打開鎖,你就可以確定鑰匙和鎖是配對的,如果有人把鑰匙換了或者把鎖換了,你是打不開門的,你就知道肯定被竊取了,但是如果有人把鎖和鑰匙替換成另一套表面看起來差不多的,但質量差很多的,雖然鑰匙和鎖配套,但是你卻不能確定這是否真的是A廠家給你的,那麼這時候,你可以找質檢部門來檢驗一下,這套鎖是不是真的來自於A廠家,質檢部門是權威機構,他說的話是可以被公眾認可的(呵呵)。
同樣的, 因為如果有人(張三)用自己的公鑰把真實伺服器發送給瀏覽器的公鑰替換了,於是張三用自己的私鑰執行相同的步驟對文本Hash、數字簽名,最後得到的結果都沒什麼問題,但事實上瀏覽器看到的東西卻不是真實伺服器給的,而是被張三從里到外(公鑰到私鑰)換了一通。那麼如何保證你現在使用的公鑰就是真實伺服器發給你的呢?我們就用數字證書來解決這個問題。數字證書一般由數字證書認證機構(Certificate Authority)頒發,證書裡麵包含了真實伺服器的公鑰和網站的一些其他信息,數字證書機構用自己的私鑰加密後發給瀏覽器,瀏覽器使用數字證書機構的公鑰解密後得到真實伺服器的公鑰。這個過程是建立在被大家所認可的證書機構之上得到的公鑰,所以這是一種安全的方式。

常見的對稱加密演算法有DES、3DES、AES、RC5、RC6。非對稱加密演算法應用非常廣泛,如SSH,
HTTPS, TLS,電子證書,電子簽名,電子身份證等等。
參考 DES/3DES/AES區別

E. RSA演算法詳解

總括: 本文詳細講述了RSA演算法詳解,包括內部使用數學原理以及產生的過程。

相濡以沫。到底需要愛淡如水。

之前寫過一篇文章 SSL協議之數據加密過程 ,裡面詳細講述了數據加密的過程以及需要的演算法。SSL協議很巧妙的利用對稱加密和非對稱加密兩種演算法來對數據進行加密。這篇文章主要是針對一種最常見的非對稱加密演算法——RSA演算法進行講解。其實也就是對私鑰和公鑰產生的一種方式進行描述。首先先來了解下這個演算法的歷史:

RSA是1977年由 羅納德·李維斯特 (Ron Rivest)、 阿迪·薩莫爾 (Adi Shamir)和 倫納德·阿德曼 (Leonard Adleman)一起提出的。當時他們三人都在 麻省理工學院 工作。RSA就是他們三人姓氏開頭字母拼在一起組成的。

但實際上,在1973年,在英國政府通訊總部工作的數學家 克利福德·柯克斯 (Clifford Cocks)在一個內部文件中提出了一個相同的演算法,但他的發現被列入機密,一直到1997年才被發表。

所以誰是RSA演算法的發明人呢?不好說,就好像貝爾並不是第一個發明電話的人但大家都記住的是貝爾一樣,這個地方我們作為旁觀者倒不用較真,重要的是這個演算法的內容:

RSA演算法用到的數學知識特別多,所以在中間介紹這個演算法生成私鑰和公鑰的過程中會穿插一些數學知識。生成步驟如下:

隨意選擇兩個大的質數p和q,p不等於q,計算N=p*q;

什麼是質數?我想可能會有一部分人已經忘記了,定義如下:

比如2,3,5,7這些都是質數,9就不是了,因為3*3=9了

r = φ(N) = φ(p)φ(q) = (p-1)(q-1) 。

這里的數學概念就是什麼是歐拉函數了,什麼是歐拉函數呢?

歐拉函數 的定義:

互質 的定義:

例如: φ(8) = 4 ,因為 1,3,5,7 均和 8 互質。

推導歐拉函數:

(1)如果 n = 1 , φ(1) = 1 ;(小於等於1的正整數中唯一和1互質的數就是1本身);

(2)如果 n 為質數, φ(n) = n - 1 ;因為質數和每一個比它小的數字都互質。比如5,比它小的正整數1,2,3,4都和他互質;

(3) 如果 n 是 a 的 k 次冪,則 φ(n) = φ(a^k) = a^k - a^(k-1) = (a-1)a^(k-1) ;

(4) 若 m , n 互質,則 φ(mn) = φ(m)φ(n)

證明: 設 A , B , C 是跟 m , n , mn 互質的數的集,據 中國剩餘定理 (經常看數學典故的童鞋應該了解,剩餘定理又叫韓信點兵,也叫孫子定理), A * B 和 C 可建立雙射一一對應)的關系。(或者也可以從初等代數角度給出 歐拉函數積性的簡單證明 ) 因此的φ(n)值使用 算術基本定理 便知。(來自維基網路)

選擇一個小於r並與r互質的整數e,求得e關於r的模反元素,命名為 d ( ed = 1(mod r) 模反元素存在,當且僅當e與r互質), e 我們通常取65537。

模反元素:

比如 3 和 5 互質, 3 關於 5 的模反元素就可能是2,因為 3*2-1=5 可以被5整除。所以很明顯模反元素不止一個,2加減5的整數倍都是3關於5的模反元素 {...-3, 2,7,12…} 放在公式里就是 3*2 = 1 (mod 5)

上面所提到的歐拉函數用處實際上在於歐拉定理:

歐拉定理:

歐拉定理就可以用來證明模反元素必然存在。

由模反元素的定義和歐拉定理我們知道, a 的 φ(n) 次方減去1,可以被n整除。比如,3和5互質,而 5 的歐拉函數 φ(5) 等於4,所以 3 的 4 次方 (81) 減去1,可以被 5 整除( 80/5=16 )。

小費馬定理:

此時我們的 (N , e) 是公鑰, (N, d) 為私鑰,愛麗絲會把公鑰 (N, e) 傳給鮑勃,然後將 (N, d) 自己藏起來。一對公鑰和私鑰就產生了,然後具體的使用方法呢?請看: SSL協議之數據加密過程詳解

我們知道像RSA這種非對稱加密演算法很安全,那麼到底為啥子安全呢?
我們來看看上面這幾個過程產生的幾個數字:

N 和 e 我們都會公開使用,最為重要的就是私鑰中的 d , d 一旦泄露,加密也就失去了意義。那麼得到d的過程是如何的呢?如下:

所以得出了在上篇博客說到的結論,非對稱加密的原理:

將a和b相乘得出乘積c很容易,但要是想要通過乘積c推導出a和b極難。即對一個大數進行因式分解極難

目前公開破譯的位數是768位,實際使用一般是1024位或是2048位,所以理論上特別的安全。

RSA演算法的核心就是歐拉定理,根據它我們才能得到私鑰,從而保證整個通信的安全。

F. RSA是什麼意思

RSA演算法是一種非對稱密碼演算法,所謂非對稱,就是指該演算法需要一對密鑰,使用其中一個加密,則需要用另一個才能解密。
RSA的演算法涉及三個參數,n、e1、e2。
其中,n是兩個大質數p、q的積,n的二進製表示時所佔用的位數,就是所謂的密鑰長度。
e1和e2是一對相關的值,e1可以任意取,但要求e1與(p-1)*(q-1)互質;再選擇e2,要求(e2*e1)mod((p-1)*(q-1))=1。
(n及e1),(n及e2)就是密鑰對。

RSA加解密的演算法完全相同,設A為明文,B為密文,則:A=B^e1 mod n;B=A^e2 mod n;
e1和e2可以互換使用,即:
A=B^e2 mod n;B=A^e1 mod n;

補充回答:
對明文進行加密,有兩種情況需要這樣作:
1、您向朋友傳送加密數據,您希望只有您的朋友可以解密,這樣的話,您需要首先獲取您朋友的密鑰對中公開的那一個密鑰,e及n。然後用這個密鑰進行加密,這樣密文只有您的朋友可以解密,因為對應的私鑰只有您朋友擁有。
2、您向朋友傳送一段數據附加您的數字簽名,您需要對您的數據進行MD5之類的運算以取得數據的"指紋",再對"指紋"進行加密,加密將使用您自己的密鑰對中的不公開的私鑰。您的朋友收到數據後,用同樣的運算獲得數據指紋,再用您的公鑰對加密指紋進行解密,比較解密結果與他自己計算出來的指紋是否一致,即可確定數據是否的確是您發送的、以及在傳輸過程中是否被篡改。

密鑰的獲得,通常由某個機構頒發(如CA中心),當然也可以由您自己創建密鑰,但這樣作,您的密鑰並不具有權威性。

計算方面,按公式計算就行了,如果您的加密強度為1024位,則結果會在有效數據前面補0以補齊不足的位數。補入的0並不影響解密運算。

G. 在數據加密類型中RSA採用的是對稱密鑰體制嗎

不是,這是典型的非對稱加解密演算法,是三個人的名字字頭。
實際應用的時候,是交換了信息,生成一個密鑰,然後就是對稱加解密了,幾分鍾一換,對稱的演算法速度快

熱點內容
華山演算法 發布:2025-01-21 08:44:48 瀏覽:366
如何在微信上再設置一個密碼 發布:2025-01-21 08:44:39 瀏覽:731
浙江伺服器搭建雲主機 發布:2025-01-21 08:41:38 瀏覽:452
光遇和王者榮耀哪個需要的配置高 發布:2025-01-21 08:40:28 瀏覽:13
如何取消安卓微信表情 發布:2025-01-21 08:08:39 瀏覽:556
python判斷是否為字母 發布:2025-01-21 08:07:55 瀏覽:609
安卓手機如何注銷吃雞賬號並把錢拿回來 發布:2025-01-21 07:56:14 瀏覽:887
電信的密碼是什麼意思 發布:2025-01-21 07:30:36 瀏覽:717
在自己電腦搭建伺服器 發布:2025-01-21 07:27:13 瀏覽:654
怎麼配置釘釘代理網路 發布:2025-01-21 07:17:16 瀏覽:711