HTTPS 中SSL協(xié)議通信過程及對稱加密和非對稱加密詳解
對稱加密
所謂對稱加密,就是它們在編碼時使用的密鑰e和解碼時一樣d(e=d),我們就將其統(tǒng)稱為密鑰k。
對稱加解密的過程
1、發(fā)送端和接收端首先要共享相同的密鑰k(即通信前雙方都需要知道對應(yīng)的密鑰)才能進(jìn)行通信。
2、發(fā)送端用共享密鑰key對明文p進(jìn)行加密,得到密文content,并將得到的密文發(fā)送給接收端,
3、接收端收到密文content后,并用其相同的共享密鑰key對密文進(jìn)行解密,得出明文plaintext。
一般加密和解密的算法是公開的,需要保持隱秘的是密鑰key,流行的對稱加密算法有:DES,Triple-DES,RC2和RC4等
用郵局的例子來解釋下對稱加密
Alice 在盒子里放有信息,盒子上有掛鎖,她有鑰匙。通過郵局她把這個盒子寄給Bob。Bob收到盒子后,用相同的鑰匙打開盒子(鑰匙之前就得到了,可能是Alice面對面給他的)。然后Bob可以用同樣的方法回復(fù)。

對稱加密的不足主要有兩點(diǎn):
1,發(fā)送方和接收方首先需要共享相同的密鑰,即存在密鑰k的分發(fā)問題,如何安全的把共享密鑰在雙方進(jìn)行分享,這本身也是一個如何安全通信的問題,
一種方法是提前雙方約定好,不通過具體的通信進(jìn)行協(xié)商,避免被監(jiān)聽和截獲。
另外一種方式,將是下面我們介紹的通過非對稱加密信道進(jìn)行對稱密碼的分發(fā)和共享,即混合加密系統(tǒng)。
2,密鑰管理的復(fù)雜度問題。由于對稱加密的密鑰是一對一的使用方式,若一方要跟n方通信,則需要維護(hù)n對密鑰。
對稱加密的好處是:
加密和解密的速度要比非對稱加密快很多,因此常用非對稱加密建立的安全信道進(jìn)行共享密鑰的分享,完成后,具體的加解密則使用對稱加密。即混合加密系統(tǒng)。
另外一個點(diǎn)需要重點(diǎn)說明的是,密鑰k的長度對解密破解的難度有很重大的影響,k的長度越長,對應(yīng)的密碼空間就越大,遭到暴力破解或者詞典破解的難度就更大,就更加安全。
非對稱加密
所謂非對稱加密技術(shù)是指加密的密鑰e和解密的密鑰d是不同的(e!=d),并且加密的密鑰e是公開的,叫做公鑰,而解密的密鑰d是保密的,叫私鑰。
非對稱加解密的過程如下:
加密一方找到接收方的公鑰e(如何找到呢?大部分的公鑰查找工作實(shí)際上都是通過數(shù)字證書來實(shí)現(xiàn)的),
然后用公鑰e對明文p進(jìn)行加密后得到密文c,并將得到的密文發(fā)送給接收方,接收方收到密文后,用自己保留的私鑰d進(jìn)行解密,得到明文p,
需要注意的是:用公鑰加密的密文,只有擁有私鑰的一方才能解密,這樣就可以解決加密的各方可以統(tǒng)一使用一個公鑰即可。
常用的非對稱加密算法有:RSA
非對稱加密
Bob和Alice各有自己的盒子。Alice要跟Bob秘密通信,她先讓Bob把開著的盒子通過郵局發(fā)給她。Alice拿到盒子后放入信息鎖上,然后發(fā)給Bob。Bob就可以用他自己的鑰匙打開了。回復(fù)的話就用同樣的方法。

非對稱加密的優(yōu)點(diǎn)是:
1,不存在密鑰分發(fā)的問題,解碼方可以自己生成密鑰對,一個做私鑰存起來,另外一個作為公鑰進(jìn)行發(fā)布。
2,解決了密鑰管理的復(fù)雜度問題,多個加密方都可以使用一個已知的公鑰進(jìn)行加密,但只有擁有私鑰的一方才能解密。
非對稱加密不足的地方是
加解密的速度沒有對稱加密快。
綜上,分析了對稱加密和非對稱加密各自的優(yōu)缺點(diǎn)后,有沒有一種辦法是可以利用兩者的優(yōu)點(diǎn)但避開對應(yīng)的缺點(diǎn)呢?
答應(yīng)是有的,實(shí)際上用得最多的是混合加密系統(tǒng),比如在兩個節(jié)點(diǎn)間通過便捷的公開密碼加密技術(shù)建立起安全通信,然后再用安全的通信產(chǎn)生并發(fā)送臨時的隨機(jī)對稱密鑰,通過更快的對稱加密技術(shù)對剩余的數(shù)據(jù)進(jìn)行加密。
SSL協(xié)議通信過程
1、瀏覽器發(fā)送一個連接請求給服務(wù)器;服務(wù)器將自己的證書(包含服務(wù)器公鑰S_PuKey)、對稱加密算法種類及其他相關(guān)信息返回客戶端;
2、 客戶端瀏覽器檢查服務(wù)器傳送到CA證書是否由自己信賴的CA中心簽發(fā)。若是,執(zhí)行4步;否則,給客戶一個警告信息:詢問是否繼續(xù)訪問。
3、客戶端瀏覽器比較證書里的信息,如證書有效期、服務(wù)器域名和公鑰S_PK,與服務(wù)器傳回的信息是否一致,如果一致,則瀏覽器完成對服務(wù)器的身份認(rèn)證。
4、 服務(wù)器要求客戶端發(fā)送客戶端證書(包含客戶端公鑰C_PuKey)、支持的對稱加密方案及其他相關(guān)信息。收到后,服務(wù)器進(jìn)行相同的身份認(rèn)證,若沒有通過驗(yàn)證,則拒絕連接;
5、服務(wù)器根據(jù)客戶端瀏覽器發(fā)送到密碼種類,選擇一種加密程度最高的方案,用客戶端公鑰C_PuKey加密后通知到瀏覽器;
6、客戶端通過私鑰C_PrKey解密后,得知服務(wù)器選擇的加密方案,并選擇一個通話密鑰key,接著用服務(wù)器公鑰S_PuKey加密后發(fā)送給服務(wù)器;
7、服務(wù)器接收到的瀏覽器傳送到消息,用私鑰S_PrKey解密,獲得通話密鑰key。
8、接下來的數(shù)據(jù)傳輸都使用該對稱密鑰key進(jìn)行加密。
上面所述的是雙向認(rèn)證 SSL 協(xié)議的具體通訊過程,服務(wù)器和用戶雙方必須都有證書。由此可見,SSL協(xié)議是通過非對稱密鑰機(jī)制保證雙方身份認(rèn)證,并完成建立連接,在實(shí)際數(shù)據(jù)通信時通過對稱密鑰機(jī)制保障數(shù)據(jù)安全性
