戲說SSL安全連接技術(shù)原理
SSL(Secure Socket Layer),中文直譯為安全插接層協(xié)議層,聽不明白?說白了就是在原有的協(xié)議上加上一層加密以及認(rèn)證這類東西,目的是保證信息安全。舉個(gè)簡(jiǎn)單的例子我給你發(fā)一串?dāng)?shù)據(jù),不用SSL,被邪惡的第三方將其截獲,就能看出我的意圖,如果加上不帶認(rèn)證的SSL將數(shù)據(jù)加密,即使被第三方得到,他拿到的也是無法看懂的數(shù)據(jù),一點(diǎn)用都沒有。這只是一個(gè)比較淺顯的比方,可能有人問:我把我要發(fā)送的數(shù)據(jù)寫一個(gè)加密算法加密后再發(fā)出去,這算不算SSL呢?我無法給出正確答案,請(qǐng)直接閱讀下面的文字。
SSL有兩個(gè)最核心的技術(shù),一個(gè)是加密,一個(gè)是認(rèn)證。認(rèn)證是比較深層次的東西(至少我這么認(rèn)為),暫且不說認(rèn)證,單說加密。
廣義上的SSL是包含只把信息加密的這種作法,只是從字面上來講。如果嚴(yán)格遵循SSL提出者寫的規(guī)范,這種加密的作法也有限定,用什么樣的加密方法是有規(guī)定。那如果有人要問SSL用的是什么加密算法?我會(huì)反問你,你知道多少種算法呢?看著他們茫然的眼神,我心里暗暗笑,開個(gè)玩笑而已,下面簡(jiǎn)單介紹一下加密方面的知識(shí)。
加密共分為帶鑰匙加密和不帶鑰匙加密,這是以我的習(xí)慣劃分。不帶鑰匙加密好理解,就是一個(gè)算法,不依賴于任何外部數(shù)據(jù),這種算法不好的地方是一旦被破解就不能使用,就相當(dāng)于我知道你是用這種方法加密,那么你的信息也毫無安全可言,也就不好在網(wǎng)絡(luò)連接這方面使用。
另外一種是帶鑰匙加密,也就是說破解的人既要知道是什么算法也要知道鑰匙是什么,只知道其一不能破解。一旦破解,再換一個(gè)鑰匙,還可以繼續(xù)用,這個(gè)鑰匙就是參與加密算法的外部數(shù)據(jù)。
那么,帶鑰匙加密的算法又分為兩種,一種是對(duì)稱加密的算法,另一種是不對(duì)稱加密的算法。對(duì)稱是指加密用的什么鑰匙,解密也得用這個(gè)鑰匙。不對(duì)稱加密是指加密用的是一種鑰匙,解密用的是另外一種鑰匙。SSL用的就是不對(duì)稱加密算法。具體用的什么,好像還不止一種,有興趣的讀者可以查詢相關(guān)資料,這里只是簡(jiǎn)介,將大概原理介紹一下。
假如通信雙方甲和乙,甲給乙發(fā)信息,乙給甲發(fā)信息,如何確保第三方看不到(或看不懂)他們之間發(fā)送的數(shù)據(jù)呢?采用不對(duì)稱加密。甲給乙發(fā)信,甲要給它加密,用一個(gè)鑰匙加好了,好比現(xiàn)在發(fā)的內(nèi)容是火星文,誰也看不懂,那么乙接收了,要想知道是什么內(nèi)容,就得解密。
前面說這是不對(duì)稱加密:一,乙必然要知道這個(gè)算法;二,乙必然要知道解密所需要的鑰匙。這個(gè)鑰匙哪里來的,甲給的?不是。解密的鑰匙遠(yuǎn)比加密的鑰匙重要得多,只能自己知道,別人,哪怕是甲方也不行,因?yàn)橐坏┠愕慕饷荑€匙讓別人知道,加密算法又是公開,那么就等于所有發(fā)給你的信息內(nèi)容也就全部公開了。所以解密密鑰只能自己知道。
由于不對(duì)稱加密的兩個(gè)密鑰是一對(duì),所以用什么鑰匙解密,就得用相對(duì)應(yīng)的鑰匙加密,這話雖然反過來說比較通順一點(diǎn),但都是一個(gè)意思。這么說來,先前甲方加密數(shù)據(jù)所用的鑰匙和乙方解密數(shù)據(jù)所用的鑰匙是一對(duì),是由乙方來制作?,F(xiàn)在清楚了,乙方產(chǎn)生了一個(gè)鑰匙對(duì),把其中一個(gè)告訴甲方,讓他用來加密,另一個(gè)放在自家的保險(xiǎn)柜里,只有自己知道,用來解密甲方傳來的信息。甲給乙發(fā)信是這樣的,乙給甲發(fā)信也一樣,用甲給他的鑰匙加密,發(fā)給甲,甲再用自己的鑰匙解密。這就是一個(gè)公鑰,一個(gè)私鑰。公鑰發(fā)布出去,別人用來加密,私鑰自己拿著用來解密。
有人問公鑰別人知道了,會(huì)不會(huì)被人推算出私鑰,我可以這么回答,會(huì),只是時(shí)間的問題。你說,時(shí)間不是問題,我可以等。我告訴你,問題是你沒那么多時(shí)間等。
破解不對(duì)稱加密,可簡(jiǎn)可繁,是根據(jù)密鑰的長(zhǎng)短來決定,密鑰越短,破解時(shí)間越短,密鑰越長(zhǎng),破解時(shí)間越長(zhǎng)。一個(gè)足夠長(zhǎng)的密鑰,等破解出來要等到天荒地老,這是現(xiàn)在的情況,也許過些年這種情況會(huì)有改觀。
說完加密,再說認(rèn)證,認(rèn)證相對(duì)加密來說會(huì)復(fù)雜一些,還可能說不太清楚,這里一樣只是對(duì)原理做一些簡(jiǎn)單介紹,認(rèn)證,打個(gè)比方說,你如何證明你的身份,用身份證,什么?你用一個(gè)假的身份證,那么我再查你的電子身份證等等。我來調(diào)查你的身份,這個(gè)過程就叫認(rèn)證。認(rèn)證是為了防止有人假冐成別人發(fā)信息。
再回顧一下,甲和乙發(fā)信息,甲先把公鑰發(fā)給乙,讓乙用來加密信息,這時(shí),如果有一個(gè)第三方丙,截獲到公鑰,則他就可以用甲的公鑰加密信息,并且假冒成乙給甲發(fā)信。如果甲在接收乙的公鑰時(shí)要求乙提供“身份證”,術(shù)語叫證書,那丙就傻眼了。
這種證書是由一些機(jī)構(gòu)簽發(fā),這些機(jī)構(gòu)被稱為證書頒發(fā)機(jī)構(gòu),這些機(jī)構(gòu)被人信任,證書發(fā)給你時(shí),還是經(jīng)過這機(jī)構(gòu)簽名,就像微軟頒發(fā)給你MVP證書時(shí)上面有比爾蓋茨的簽名一樣,不同的是這里是數(shù)字簽名。關(guān)于數(shù)字簽名,又是一套很復(fù)雜的理論,這里暫不表露。有數(shù)字簽名之后,證書基本上就不能造假。又有人問,如果證書頒發(fā)機(jī)構(gòu)發(fā)給你一個(gè)錯(cuò)誤的證書怎么辦?這是個(gè)很嚴(yán)肅的問題,責(zé)任要由證書頒發(fā)機(jī)構(gòu)承擔(dān)。當(dāng)甲方要求乙出示證書后,乙把證書提交上去,上面有頒發(fā)機(jī)構(gòu)的名字和簽名,也有乙的名字,這樣甲就可以放心地和乙交流,這樣第三方就無從插足。
甲和乙互發(fā)信息聊得火爆,第三方丙即使截獲信息也看不懂,但他不甘寂寞,使出最后一招--篡改。這是個(gè)損人不利已的活,對(duì)付這種搗蛋的人,可以使用哈希值的辦法,俗稱電子摘要。固定的內(nèi)容對(duì)應(yīng)固定的電子摘要,當(dāng)通信內(nèi)容被篡改后,接收方再計(jì)算一次電子摘要,生成出來的就和原來的對(duì)不上了,這不就發(fā)現(xiàn)內(nèi)容被篡改了嗎?
總之SSL利用很多對(duì)付監(jiān)聽、偽造和篡改等行為的技術(shù),來保障網(wǎng)絡(luò)雙方安全地交流。目前隨著監(jiān)聽與反監(jiān)聽、偽造和反偽造、篡改與反篡改技術(shù)的不斷進(jìn)步,SSL技術(shù)也在不斷發(fā)展,兩方面是一對(duì)不可調(diào)和的矛盾,卻起到互相促進(jìn),共同發(fā)展的作用。表面上十分平靜的互聯(lián)網(wǎng),這里的戰(zhàn)爭(zhēng)悄無聲息卻異常激烈。
文章版權(quán)歸西部工控xbgk所有,未經(jīng)許可不得轉(zhuǎn)載。