前言
總括: 本文詳細(xì)講述了SSL協(xié)議中的數(shù)據(jù)加密的過程宫蛆,數(shù)字證書唾琼、對(duì)稱加密痘系、非對(duì)稱加密和SSL握手過程等概念偷霉。
知乎專欄&&簡書專題:前端進(jìn)擊者(知乎)&&前端進(jìn)擊者(簡書)
博主博客地址:Damonare的個(gè)人博客
生活
SSL
只要你聽過HTTPS艺智,不可能沒聽過SSL協(xié)議吧倘要,SSL協(xié)議是一種安全協(xié)議。對(duì)于互聯(lián)網(wǎng)協(xié)議沒有了解的童鞋可以參考博主另一篇博客:internet協(xié)議入門
HTTP+SSL = HTTPS
HTTPS之所以安全就是因?yàn)榧映至薙SL這個(gè)外掛來對(duì)傳輸?shù)臄?shù)據(jù)進(jìn)行加密十拣,那么具體的加密方法又是什么呢封拧?
請聽我娓娓道來。先看下面兩個(gè)概念:
- 對(duì)稱加密
- 非對(duì)稱加密
你知道上面兩個(gè)概念是什么意思么夭问???
??OK泽西,不管你懂不懂,我先用我的方式來給你解釋下:
親甲喝,你作過弊么尝苇???不要告訴我在你漫長的學(xué)生生涯里你沒作過弊(那你的學(xué)生生涯得多枯燥)铛只,作弊我們常用的方法是啥?(說把答案寫在胳膊大腿紙條上的同學(xué)請你出去糠溜,謝謝??)當(dāng)然是加密了淳玩!比如我出于人道主義,想要幫助小明同學(xué)作弊非竿,首先考試前我們會(huì)約定好一個(gè)暗號(hào)來傳遞選擇題的答案蜕着,摸頭發(fā)——A,摸耳朵——B红柱,咳嗽——C承匣,跺腳——D,于是一個(gè)加密方法就誕生了锤悄,這個(gè)加密方法只有我和小明知道韧骗,老師雖然看我抓耳撓腮但他頂多把我當(dāng)成神經(jīng)病,并沒有直接證據(jù)說我作弊零聚。好袍暴,這種我和小明知道,別人不知道的加密方法就是一種對(duì)稱加密算法,對(duì)稱加密算法也是我們?nèi)粘W畛R姷募用芩惴ブⅰ_@種算法??只有一把政模,加密解密都用同一把鑰匙,一旦??泄露就全玩完了蚂会。
隨時(shí)時(shí)代的進(jìn)步淋样,人們發(fā)現(xiàn)實(shí)際上加密和解密不用同一把??也是可以的,只要加密和解密的兩把??存在某種關(guān)系就行了胁住。
于是趁猴,層出不窮的非對(duì)稱加密算法就被研究了出來,那么它基于什么樣的道理呢措嵌?請嚴(yán)格記住下面這句話:
將a和b相乘得出乘積c很容易躲叼,但要是想要通過乘積c推導(dǎo)出a和b極難芦缰。即對(duì)一個(gè)大數(shù)進(jìn)行因式分解極難
聽不懂因式分解的童鞋先去面壁5分鐘企巢,這么多年數(shù)學(xué)白學(xué)了?甩給你維基百科鏈接让蕾,自行補(bǔ)課??:因式分解
好的浪规,我們繼續(xù),非對(duì)稱加密算法就多了兩個(gè)概念——公鑰c和私鑰b探孝。
用法如下:公鑰加密的密文只能用私鑰解密笋婿,私鑰加密的密文只能用公鑰解密。
公鑰我們可以隨便公開顿颅,因?yàn)閯e人知道了公鑰毫無用處缸濒,經(jīng)過公鑰加密后的密文只能通過私鑰來解密。而想要通過公鑰推導(dǎo)出a和b極難。但很明顯的是庇配,使用非對(duì)稱加密效率不如對(duì)稱加密斩跌,因?yàn)榉菍?duì)稱加密需要有計(jì)算兩個(gè)密鑰的過程。
我們通過密碼學(xué)中的兩個(gè)典型的愛麗絲和鮑勃人物來解釋這個(gè)非對(duì)稱加密算法的過程:
客戶端叫做愛麗絲捞慌,服務(wù)器叫做鮑勃耀鸦。
愛麗絲: 鮑勃我要給你發(fā)送一段消息,把你的公鑰給我吧啸澡;
鮑勃: OK袖订,這是我的公鑰:234nkjdfdhjbg324**;
愛麗絲:收到公鑰嗅虏,我給你發(fā)送的消息經(jīng)過公鑰加密之后是這樣的:#$#$@#@!$%*(@;
鮑勃:好的洛姑,收到了,親皮服,我來用我的私鑰解密看下你真正要給我發(fā)送的內(nèi)容吏口;
上述過程就是一個(gè)非對(duì)稱加密的過程,這個(gè)過程安全么冰更?好像是很安全产徊,即使查理(通信中的第三位參加者)截取了密文和公鑰沒有私鑰還是沒法得到明文。??
可如果第三者查理發(fā)送給愛麗絲他自己的公鑰蜀细,然后愛麗絲用查理給的公鑰加密密文發(fā)送了出去舟铜,查理再通過自己的私鑰解密,這不就泄露信息了么奠衔?我們需要想個(gè)辦法讓愛麗絲判斷這個(gè)公鑰到底是不是鮑勃發(fā)來的谆刨。
于是就有了數(shù)字證書的概念:
數(shù)字證書就是互聯(lián)網(wǎng)通訊中標(biāo)志通訊各方身份信息的一串?dāng)?shù)字,提供了一種在Internet上驗(yàn)證通信實(shí)體身份的方式归斤,數(shù)字證書不是數(shù)字身份證痊夭,而是身份認(rèn)證機(jī)構(gòu)蓋在數(shù)字身份證上的一個(gè)章或印(或者說加在數(shù)字身份證上的一個(gè)簽名)脏里。
??上面官方的解釋看起來就頭大她我。其實(shí)它就是一段信息。
數(shù)字證書內(nèi)容大體如下:
- 簽發(fā)證書的機(jī)構(gòu)
- 鮑勃的加密算法
- 鮑勃所使用的Hash算法
- 鮑勃的公鑰
- 證書到期時(shí)間
- 等等
數(shù)字證書是由權(quán)威機(jī)構(gòu)——CA機(jī)構(gòu)統(tǒng)一來進(jìn)行發(fā)行迫横,我們絕對(duì)信任這個(gè)機(jī)構(gòu)番舆,至于CA機(jī)構(gòu)的安全性…反正99.99%之下都是安全的。??
為了防止中間有人對(duì)證書內(nèi)容進(jìn)行更改矾踱,有了一個(gè)數(shù)字簽名的概念恨狈,所謂的數(shù)字簽名就是把以上所有的內(nèi)容做一個(gè)Hash操作,得到一個(gè)固定長度然后再傳給鮑勃呛讲。然而如果別人截取了這個(gè)證書然后更改內(nèi)容禾怠,同時(shí)生成了新的Hash值那怎么辦返奉?處于這個(gè)考慮,CA機(jī)構(gòu)在頒發(fā)這個(gè)證書的時(shí)候會(huì)用自己的私鑰將Hash值加密吗氏,從而防止了數(shù)字證書被篡改衡瓶。
好,我們來梳理下整個(gè)過程:
- 第一步:首先牲证,當(dāng)愛麗絲開啟一個(gè)新的瀏覽器第一次去訪問鮑勃的時(shí)候哮针,會(huì)先讓愛麗絲安裝一個(gè)數(shù)字證書,這個(gè)數(shù)字證書里包含的主要信息就是CA機(jī)構(gòu)的公鑰坦袍。
- 第二步:鮑勃發(fā)送來了CA機(jī)構(gòu)頒發(fā)給自己的數(shù)字證書十厢,愛麗絲通過第一步中已經(jīng)得到的公鑰解密CA用私鑰加密的Hash-a(這個(gè)過程就是非對(duì)稱加密),然后再用傳遞過來的HASH算法生成一個(gè)Hash-b捂齐,如果Hash-a === Hash-b就說明認(rèn)證通過蛮放,確實(shí)是鮑勃發(fā)過來的。
如上奠宜,是整個(gè)數(shù)字證書的使用過程就是這樣的包颁。
多說一句,非對(duì)稱加密實(shí)際應(yīng)用的例子除了SSL還有很多压真,比如SSH娩嚼、電子簽名等;
如上提到的滴肿,非對(duì)稱加密計(jì)算量很大岳悟,效率不如對(duì)稱加密,我們打開網(wǎng)頁最注重的是啥泼差?是速度贵少!是速度!是速度堆缘!??????
這點(diǎn)SSL就玩的很巧妙了??滔灶,通信雙方通過對(duì)稱加密來加密密文,然后使用非對(duì)稱加密的方式來傳遞對(duì)稱加密所使用的密鑰吼肥。這樣效率和安全就都能保證了录平。
SSL協(xié)議的握手過程
先用語言來闡述下:
- 第一步:愛麗絲給出支持SSL協(xié)議版本號(hào),一個(gè)客戶端隨機(jī)數(shù)(Client random潜沦,請注意這是第一個(gè)隨機(jī)數(shù))萄涯,客戶端支持的加密方法等信息绪氛;
- 第二步:鮑勃收到信息后唆鸡,確認(rèn)雙方使用的加密方法,并返回?cái)?shù)字證書枣察,一個(gè)服務(wù)器生成的隨機(jī)數(shù)(Server random争占,注意這是第二個(gè)隨機(jī)數(shù))等信息燃逻;
- 第三步:愛麗絲確認(rèn)數(shù)字證書的有效性,然后生成一個(gè)新的隨機(jī)數(shù)(Premaster secret)臂痕,然后使用數(shù)字證書中的公鑰伯襟,加密這個(gè)隨機(jī)數(shù),發(fā)給鮑勃握童。
- 第四步:鮑勃使用自己的私鑰姆怪,獲取愛麗絲發(fā)來的隨機(jī)數(shù)(即Premaster secret);(第三澡绩、四步就是非對(duì)稱加密的過程了)
- 第五步:愛麗絲和鮑勃通過約定的加密方法(通常是AES算法)稽揭,使用前面三個(gè)隨機(jī)數(shù),生成對(duì)話密鑰肥卡,用來加密接下來的通信內(nèi)容溪掀;
俗話說一圖勝前言,我畫了一個(gè)圖來說明這個(gè)過程:
OK步鉴,整個(gè)進(jìn)行數(shù)據(jù)加密的過程結(jié)束揪胃。我們再來回憶下內(nèi)容:
- CA機(jī)構(gòu)頒發(fā)數(shù)字證書給鮑勃;
- 愛麗絲和鮑勃進(jìn)行SSL握手氛琢,愛麗絲通過數(shù)字證書確定鮑勃的身份喊递;
- 愛麗絲和鮑勃傳遞三個(gè)隨機(jī)數(shù),第三個(gè)隨機(jī)數(shù)通過非對(duì)稱加密算法進(jìn)行傳遞阳似;
- 愛麗絲和鮑勃通過一個(gè)對(duì)稱加密算法生成一個(gè)對(duì)話密鑰册舞,加密接下來的通信內(nèi)容。
后記
文中闡述不妥之處還望雅正障般,不吝感激调鲸。
轉(zhuǎn)載請注明出處。
以上挽荡。