加密原理詳解:對稱式加密VS非對稱式加密

1、前言

在瞭解加密原理前,咱們來看看這樣一個故事。html

小紅和小明是情侶,一天,小紅給小明發短信說:「親愛的,我銀行卡上沒有錢了,你給我轉1萬塊吧。」有過上當受騙經歷的人都知道這有多是小偷偷了小紅手提包,而後拿手機發的短信。不過咱們小明學過加密原理,因而他回覆說:「你直接拿個人銀行卡刷吧,密碼加上咱們第一次約會的日期就是663156。」很明顯,只有小明和小紅知道他們第一次約會是何時,假設是2008年4月1號,那麼小紅就能夠根據計算663156-200841=462315獲得銀行卡密碼,就能夠消費了。java

這就是加密的本質,將信息與密鑰相加獲得加密後的信息。只有知道密鑰的人才能解密。算法

2、什麼是祕鑰

既然加密須要密鑰,那麼密鑰是什麼呢?安全

密鑰是做用於加密時的一串密碼,經過密鑰進行信息加密,傳輸,到達接收者和監聽者,因爲接收者也有密鑰,因此接收者能夠根據密鑰進行解密。從而防止通信信息泄露。服務器

3、什麼是對稱加密

前言講的故事就是一個對稱式加密,小明和小紅都知道第一次約會的日期。因此傳統的對稱式加密須要通信雙方都保存同一份密鑰,經過這份密鑰進行加密和解密。因此非對稱加密也稱爲單密鑰加密。函數

對稱加密的優點在於加解密速度快,可是安全性較低,密鑰一旦泄露,全部的加密信息都會被破解。同時密鑰的傳輸和保密也成爲難題。爲了解決密鑰傳輸的問題,出現經過密鑰交換創建共享密鑰的技術。具體如何創建共享密鑰呢?咱們往下看。學習

3.1 創建共享密匙

在小明、小紅和小偷的三人世界中,因爲小明是學過加密原理的,知道迪菲–赫爾曼密鑰交換(Diffie-Hellman Key Exchange),因此他知道如何創建共享密鑰。加密

3.1.1 顏料混合把戲:

接下來咱們看看如何經過顏料混合把戲創建共享密鑰吧。spa

假設在房間中有小明、小紅和小偷三我的,每一個人各自擁有相同顏色的顏料。在房間的正中間也有這些顏料。接下來,小明要和小紅創建共享密鑰了。此時,小明對你們說:「我要用藍色。」而後小明從本身的顏料裏選擇了黃色,這個黃色就是小明的私鑰,小紅和小偷都不知道。小明將本身的私鑰黃色與公鑰藍色混合後,獲得了一種不能分解的顏色,咱們就叫「小明-藍色」吧(雖然你們都知道黃+藍變綠,可是這裏咱們爲了知道是誰的混合色,仍是以名字加公鑰顏色來稱呼),而後小明將「小明-藍色」公佈了出來。一樣,小紅聽到了小明說用藍色後,也選擇了本身的私鑰紅色與公鑰藍色混合,獲得了「小紅-藍色」並公佈了出來。.net

此時,房間中小明、小紅、小偷三人都知道了幾個信息。

1.他們都用了藍色

2.小明公佈了「小明-藍色」(小紅和小偷不知道是什麼顏料與藍色的混合)

3.小紅公佈了「小紅-藍色」(小紅和小偷不知道是什麼顏料與藍色的混合)

接下來,見證奇蹟的時刻到了,小明拿到「小紅-藍色」與本身的私鑰「黃色」混合,獲得「小紅-藍色-小明」的新顏料。一樣的,小紅拿到「小明-藍色」與本身的私鑰「紅色」混合,獲得「小明-藍色-小紅」。你們發現了嗎?「小紅-藍色-小明」和「小明-藍色-小紅」是如出一轍的顏色。而小偷不知道小明和小紅的私鑰顏色,沒法混合出與他們相同的顏色。

至此,共享密鑰創建起來了。在瞭解了共享密鑰的創建過程後,咱們將告別實體顏料,採用數字的方式來創建共享密鑰。

注:你們可能想到了,小偷能夠根據本身的顏料與公鑰「藍色」混合,嘗試得出「小明-藍色」和「小紅-藍色」。這樣的方法稱之爲窮舉法,也就是嘗試全部的可能性,進行信息破解,因此加密算法在理論上都是能夠經過窮舉法破解的,只不過實際上,超級計算機都須要計算萬億年才能窮舉出全部可能性。

3.1.2 乘法把戲:

首先,咱們假設乘法如同顏料混合同樣,是不能分解的,看看如何用乘法與數字創建共享密鑰。

小明公開了一個數字5,而後小明選擇了一個私人數字4,而後利用乘法將二者混合起來,獲得「小明-5」(20),接下來小紅也選擇了一個私人數字7獲得「小紅-5」(35),小明拿到35*4=140,小紅拿到20*7=140。共享密鑰創建完成。

你們也發現了,小偷知道20,35,5這三個數字後,用除法就能算出小明和小紅的私鑰。因此,接下來咱們將瞭解實際使用中的如何使用乘法把戲來防止私鑰被計算出來的。

3.2 迪菲–赫爾曼密鑰交換算法

咱們都知道冪運算,可是要讓計算機計算就比較難了。因此,咱們會用冪運算做爲創建共享密鑰的乘法把戲。同時,咱們還要了解鍾算的原理,這裏的鐘能夠理解成咱們常常看到的時鐘,咱們常見的時鐘最大是12,若是當前是10點,過了4個小時後,就變成了下午2點。也就是(10+4)mod12=2。瞭解了鍾算和冪運算後,就開始進入正題吧。

仍是小明、小紅和小偷的房間,小明聲明瞭鍾爲11,冪運算的底爲2,接下來小明和小紅分別選擇了本身的私鑰4和7。

第一步,小明混合本身的「小明-11,2」獲得,小紅混合本身的「小紅-11,2」獲得。

第二步,小明拿到「小紅-11,2」(7)進行計算,小紅拿到「小明-11,2」(5)進行計算。

你們注意到了嗎,小明和小紅創建了共享密鑰3,而小偷沒法根據已知的11,2,5,7這幾個數字計算出密鑰或小明小紅的私鑰。有了共享密鑰後,小明和小紅就能夠安全進行加密傳輸了。

迪菲-赫爾曼密鑰交換

3.3 AES對稱加密過程

AES 的全稱是 Advanced Encryption Standard ,是最流行的對稱加密算法,其加解密速度快。AES支持128位,192位,256位三種長度的密鑰,密鑰越長安全性越高。AES加密時會把明文切分紅許多小塊的明文,而後對每塊明文單獨加密,將加密後的密文傳送出去,接收方再將密文切塊解密,獲得明文。

以下圖所示:

AES加密原理

上一步中小明和小紅已經協商好了密鑰3。接下來就能夠經過對稱加密進行通訊了。

在小明、小紅和小偷的房間中,小明想把密碼「462315」告訴小紅,因而:

第一步:將密碼按照一位的長度進行切分(實際中一般按128位進行切分);就變成了「4」「6」「2」「3」「1」「5」;

第二步:對每塊明文經過密鑰3進行加密,結果就是「795648」,而後小明告訴小紅和小偷:「個人密碼是795648」;

第三步:小紅拿到密文後,對密文進行切塊,對每塊經過密鑰3進行解密,就獲得了正確的密碼「462315」,而小偷因爲不知道密鑰,就沒法解密出正確的信息。

4、什麼是非對稱加密

在對稱加密中,加密和解密使用的是同一份密鑰。因此,在非對稱加密中,加密和解密使用的是不一樣的密鑰。非對稱加密中的密鑰分爲公鑰和私鑰。公鑰顧名思義就是公開的,任何人均可以經過公鑰進行信息加密,可是隻有用戶私鑰的人才能完成信息解密。非對稱加密帶來了一個好處,避免了對稱式加密須要傳輸和保存同一份密鑰的痛苦。

如今最流行的非對稱加密算法就是RSA加密算法,具體是怎麼作的呢,咱們繼續往下看。

4.1 AES對稱加密過程

維基百科是這麼解釋的:RSA加密算法是一種非對稱加密算法,在公開密鑰加密電子商業中被普遍使用。RSA是由羅納德·李維斯特(Ron Rivest)、阿迪·薩莫爾(Adi Shamir)和倫納德·阿德曼(Leonard Adleman)在1977年一塊兒提出的。當時他們三人都在麻省理工學院工做。RSA 就是他們三人姓氏開頭字母拼在一塊兒組成的。

前面咱們講了如何經過鍾算和冪函數創建不可逆(計算機能夠經過窮舉法計算出私鑰,實際場景中就算是超級計算機也要計算幾萬億年之久)的共享密鑰。因爲小紅是小明的女友,小明每天在小紅面前給她講RSA加密算法的原理,因此小紅也知道怎麼得出本身的公鑰和私鑰。接下來咱們一塊兒跟着小紅的腳步,看看RSA加密的公鑰和私鑰是怎麼計算出來的。

第一步:小紅選擇了兩個很大的質數p和q,這裏爲了便於計算,選擇2和11;

第二步:計算p和q的乘積n=p*q=2*11=22;

第三部:計算n的歐拉函數φ(n)=(p-1)*(q-1)=10;

第四步:選擇一個小於φ(n)且與φ(n)互質的整數e,{1,3,7,9},這裏選擇e=7;

第五步:計算e對於φ(n)的模反元素(ed mode φ(n) = 1)d,d=3

到這裏小紅就獲得了他本身的公鑰(n,e)和私鑰(n,d)。其中n就是鍾大小,e和d就是冪函數的冪。接下來就經過計算出來的公鑰和私鑰進行數據的加解密。

仍是小明、小紅和小偷三我的,小紅對你們說,個人公鑰是(22,7),小明知道了小紅的公鑰後,想講本身的信息「14」告訴小紅,因而就用小紅公開的公鑰進行加密。

具體步驟以下:

第一步:小明根據要加密的信息14進行計算,獲得加密後的信息20,而後將20告訴小紅和小偷;

第二步:小紅有本身的私鑰,將加密信息20進行解密,,獲得了小明想傳遞給小紅的信息。而小偷呢,知道22,7,20,可是不知道小紅的密鑰(22,3),沒法解密出正確的信息。

RSA加密算法在數字簽名中也發揮着巨大的做用,假設小偷能夠假冒小紅,說小紅的公鑰是(22,9),而小明不知道是小偷假扮的,按照小偷的公鑰加密後,結果被小偷解密了。數字簽名的做用就是防止信息被篡改,小紅說她的公鑰是(22,7)的同時,使用私鑰給這段信息(一般使用MD5值計算簽名)加上簽名,小明獲得公鑰(22,7)和簽名13,小明拿到簽名後利用公鑰計算出信息是否被篡改。

5、加密的實際做用

本文使用的很小的數來進行加密原理的講解,爲了是讀者能夠方便進行計算。在實際使用中(n,e)都是特別大的數,其中n的長度都在768以上,1024長度被認爲是基本安全的。

(1230186684530117755130494958384962720772853569595334792197322452151726400507263657518745202199786469389956474942774063845925192557326303453731548268507917026122142913461670429214311602221240479274737794080665351419597459856902143413=
 
33478071698956898786044169848212690817704794983713768568912431388982883793878002287614711652531743087737814467999489
 
×
 
36746043666799590428244633799627952632279158164343087642676032283815739666511279233373417143396810270092798736308917)

6、總結

最後總結一下,首先咱們經過一個詐騙短信的例子,引出了加密的原理就是信息+密鑰,密鑰就是對信息進行加解密的一串數字。而後經過顏料混合把戲形象的演示瞭如何創建共享密鑰。在使用乘法創建共享密鑰的過程當中,學習了鍾算和冪運算,接着咱們瞭解了RSA加密算法的過程,經過兩個質數生成公鑰和私鑰,最後,咱們根據公鑰進行信息加密,再經過私鑰完成信息解密。

7、寫在最後

或許看到這裏,你們內心還有許多疑惑。爲何小明和小紅創建共享密鑰時,經過幾回冪運算和鍾算就能獲得同樣的共享密鑰?爲何RSA加密算法要用兩個質數?爲何經過公鑰加密的信息能夠經過私鑰解開?

加密算法的背後,是一道道迷人的數學難題,而RSA加密算法之因此被普遍運用,是由於一個名爲整數分解的古老數學問題,你能夠輕易找到兩個很大的質數相乘獲得一個結果n,可是要將這個結果n分解回兩個質數就變得極其困難。儘管這個所謂的「整數分解」問題被研究了數個世紀,還沒人能找到一個足夠高效的通用方法解決它,並對標準RSA鍾大小形成危害。

數學史中充滿了未解決的問題,儘管這些迷人的問題缺少任何實際應用,卻單靠其美學特質就吸引了數學家進行深刻探究。使人頗感驚訝的是,許多這類迷人但顯然無用的問題後來都有了很大的實用價值,這一價值只有在問題被研究數個世紀後才得以破解。整數分解這一問題由來已久。對其最先的嚴肅研究彷佛是在17世紀,由數學家費馬(Fermat)和梅森(Mersenne)進行的。歐拉(Euler)和高斯(Gauss)兩位數學「泰斗」也在接下來的世紀裏對這一問題作出了貢獻。但直到公鑰加密於20世紀70年代被髮明,分解大數字的困難才成爲一個實際應用的關鍵。

8、參考資料

1.《RSA算法原理》

2.《RSA加密》

3.《RSA加密算法》

4.《改變將來的九大算法》

做者:vivo 互聯網服務器團隊-Deng Qian
相關文章
相關標籤/搜索