本文系作者學(xué)習(xí)后鞏固知識點(diǎn),錯誤之處煩請點(diǎn)出吏颖,本文從敘述一個小故事的視角來介紹 SSL/TLS 的原理搔体,希望對讀者有所啟發(fā)。
背景
程序員小明想給隔壁小紅寫信表白半醉,但是又不想讓信件內(nèi)容被其他人看見疚俱,希望只有小紅才能看見信件內(nèi)容,迫不及待的小明的大腦飛快運(yùn)轉(zhuǎn)起來缩多。
預(yù)備基礎(chǔ)知識
對稱密鑰加密(Symmetric Key Cryptography):加密與解密使用相同密鑰呆奕。對稱加密算法的特點(diǎn)是算法公開夯尽、計算量小、加密速度快登馒、加密效率高。缺點(diǎn)是交易雙方都使用同樣鑰匙咆槽,安全性得不到保證陈轿。
非對稱密鑰加密(Asymmetric Key Cryptography):加密與解密使用不同密鑰。非對稱加密使用一對秘鑰秦忿,一個用來加密麦射,一個用來解密,而且公鑰是公開的灯谣,秘鑰是自己保存的潜秋,其安全性更好。缺點(diǎn)是加密和解密花費(fèi)時間長胎许、速度慢峻呛,只適合對少量數(shù)據(jù)進(jìn)行加密。
哈希算法(Hash Algorithm):又稱散列算法辜窑,雜湊算法钩述,是一種從任意文件中創(chuàng)造小的數(shù)字「指紋」的方法。與指紋一樣穆碎,散列算法就是一種以較短的信息來保證文件唯一性的標(biāo)志牙勘,這種標(biāo)志與文件的每一個字節(jié)都相關(guān),而且難以找到逆向規(guī)律所禀。因此方面,當(dāng)原有文件發(fā)生改變時,其標(biāo)志值也會發(fā)生改變色徘,從而告訴文件使用者當(dāng)前的文件已經(jīng)不是你所需求的文件恭金。
信件加密(對稱加密)
小明想到對信件內(nèi)容進(jìn)行加密,而加密算法一般分為 對稱加密 與 非對稱加密 兩種贺氓。非對稱加密對加密性能較差蔚叨,對加密內(nèi)容有長度限制,所以加密信件內(nèi)容我們只能選擇對稱加密方式辙培。使用對稱加密算法和一個 會話秘鑰 對信件內(nèi)容加密蔑水,當(dāng)小明把加密好的信件送給小紅,小紅收到密信后需要使用同一個會話秘鑰進(jìn)行解密扬蕊,小明該如何才能安全地把會話秘鑰送到小紅手上呢搀别?
會話秘鑰加密(非對稱加密)
直接將會話秘鑰和信件打包一起發(fā)出去,如果遇上了和小明一樣懂得加密算法的程序員尾抑,那信件內(nèi)容相當(dāng)于不設(shè)防歇父,所以我們也要想辦法對秘鑰進(jìn)行加密蒂培,因為秘鑰的長度一般都不會太長,所以我們可以使用非對稱加密算法加密秘鑰 榜苫。
非對稱加密秘鑰有兩份护戳,可以任選一把作為 私鑰 ,供自己使用垂睬,另外一把作為 公鑰 媳荒,分發(fā)出去供收信方使用。小明用自己的私鑰對會話秘鑰進(jìn)行加密驹饺,這樣會話密鑰就可以確保安全了钳枕。但是小明仍然無法保證公鑰能安全送到小紅手中,如果公鑰被壞人得到了赏壹,甚至可以假冒成小紅與小明互相通信鱼炒,細(xì)思恐極之下,小明陷入了深思中蝌借。
權(quán)威機(jī)構(gòu)
N多年過去了昔瞧,小明通過不懈努力,終于找到了安全傳輸公鑰的辦法菩佑。小明建立了一個權(quán)威機(jī)構(gòu)硬爆,該權(quán)威機(jī)構(gòu)專門頒布一種數(shù)字證書,由于該權(quán)威機(jī)構(gòu)馳名海內(nèi)網(wǎng)并且公認(rèn)信用可靠擎鸠,它頒布數(shù)字證書基本可以確定證書內(nèi)容可靠缀磕,在其之下還有很多各級證書頒布機(jī)構(gòu),受大眾信任程度各不相同劣光。我們的電腦在安裝操作系統(tǒng)時袜蚕,系統(tǒng)順帶安裝了一些受信任的證書頒布機(jī)構(gòu)的證書,證書包含有這些機(jī)構(gòu)秘鑰對應(yīng)的公鑰绢涡。
數(shù)字證書
小明只要去證書頒布機(jī)構(gòu)申請一個數(shù)字證書牲剃,數(shù)字證書中包含了不少于以下幾項內(nèi)容:
- 證書的發(fā)布機(jī)構(gòu)
- 證書的有效期
- 公鑰
- 證書的所有者
- 簽名所使用的算法
- 指紋以及指紋算法
然后將數(shù)字證書發(fā)給小紅,小紅得到數(shù)字證書后雄可,通過證書發(fā)布機(jī)構(gòu)的公鑰(默認(rèn)安裝在系統(tǒng)中)可以對證書內(nèi)容解密凿傅,如果成功解密,說明該證書來源真實可靠数苫,以該證書頒布機(jī)構(gòu)的名譽(yù)保證聪舒。數(shù)字證書中的 證書所有者 保證了公鑰來自于小明,而不是來自于隔壁老王的兒子小王虐急。來源可靠箱残,但是不能保證證書內(nèi)容沒有被別人篡改,這個時候就涉及到了指紋和數(shù)字簽名。
指紋
1. 指紋加密
證書頒布機(jī)構(gòu)在給小明發(fā)證書時被辑,把證書的發(fā)布機(jī)構(gòu)燎悍、證書的有效期、公鑰盼理、證書的所有者等信息以明文的形式寫到證書里面谈山,然后用一個指紋算法計算出這些數(shù)字證書內(nèi)容的一個指紋,并把指紋和指紋算法用自己的私鑰進(jìn)行加密得到數(shù)字簽名宏怔,然后這些內(nèi)容一起打包發(fā)給小明勾哩,還會將一個專屬于小明私鑰給到小明,這個私鑰和證書中的公鑰為一對举哟。
2. 指紋驗證
而這個證書由小明又轉(zhuǎn)送至小紅手中,首先小紅讀取證書中的證書頒發(fā)機(jī)構(gòu)為SecureTrust CA
迅矛,然后會在操作系統(tǒng)中受信任的發(fā)布機(jī)構(gòu)的證書中去找SecureTrust CA
的證書妨猩,如果找不到,那說明證書的發(fā)布機(jī)構(gòu)是個水貨發(fā)布機(jī)構(gòu)秽褒,小明的證書和內(nèi)容可能有問題壶硅。 如果在系統(tǒng)中找到了SecureTrust CA
的證書,那么從證書中取出SecureTrust CA
的公鑰销斟,然后對小明的證書里面的數(shù)字簽名用這個公鑰進(jìn)行解密庐椒,得到指紋和指紋算法,然后使用這個指紋算法計算小明的證書的指紋蚂踊,將這個計算出來指紋與放在證書中的指紋對比约谈,如果一致,說明小明的證書肯定沒有被修改過并且證書是SecureTrust CA
發(fā)布的犁钟。
握手流程
最終小紅可以安全地拿到小明的公鑰棱诱,每次寫信的時候隨機(jī)生成一個會話秘鑰,再使用公鑰對會話秘鑰加密后發(fā)給小明涝动,小明用自己的私鑰解密得到會話秘鑰迈勋,然后對會話秘鑰hash
后,將hash
值加密發(fā)回給小紅醋粟,小紅使用公鑰解密得到hash
值靡菇,然后自己也對會話秘鑰進(jìn)行hash
計算,對比自己算出的hash
值和對方發(fā)過來的hash
值米愿,如果一直就可以確認(rèn)對方是持有私鑰的小明了厦凤。然后雙方就可以使用這個會話秘鑰進(jìn)行通信了。
雖然現(xiàn)在信件如果被第三方持有了也無法得知信件內(nèi)容育苟,但是遇上無聊的人他仍然可以對信件內(nèi)容進(jìn)行破壞泳唠。在每次發(fā)送信息時,先對信息的內(nèi)容進(jìn)行一個hash
計算得出一個指紋宙搬,將信息的內(nèi)容和這個指紋一起加密后發(fā)送笨腥。接收方在收到后進(jìn)行解密得到明文的內(nèi)容和指紋拓哺,然后接收方再自己對收到信息內(nèi)容做一次hash
計算,與收到的指紋進(jìn)行對比看是否匹配脖母,如果匹配就說明信息在傳輸過程中沒有被修改過士鸥。如果不匹配說明中途有人故意對加密數(shù)據(jù)進(jìn)行了修改,立刻中斷通話過程后做其它處理谆级。
結(jié)語
到這里烤礁,小明終于可以給小紅寫信了,然而小紅已經(jīng)和隔壁老王的兒子小王在一起了肥照。小明氣急脚仔,磨刀霍霍向小王...
欲知后事如何,趕緊點(diǎn)贊舆绎。有錯誤之處煩請指出