作為一個(gè)開發(fā)人員芭毙,或多或少都聽說過對(duì)稱加密、非對(duì)稱加密蟋字、摘要稿蹲、數(shù)字簽名、數(shù)字證書這幾個(gè)概念鹊奖,它們是用來保證在互聯(lián)網(wǎng)通信過程中數(shù)據(jù)傳輸安全的苛聘。有人可能會(huì)有疑惑,我給傳輸數(shù)據(jù)加個(gè)密不就安全了忠聚,為什么還要搞這么多花樣出來设哗?本文主要通過一個(gè)案例來講解這幾個(gè)概念的實(shí)際作用。
在此之前两蟀,我先簡單介紹一下這幾個(gè)概念网梢。
1.名詞解釋
對(duì)稱加密
對(duì)稱加密是指用來加密和解密的是同一個(gè)秘鑰。其特點(diǎn)是加密速度快赂毯,但是秘鑰容易被黑客截獲战虏,所以安全性不高。常見的有AES党涕、DES算法烦感。
非對(duì)稱加密
非對(duì)稱加密是指用來加密和解密的是不同的秘鑰,它們是成對(duì)出現(xiàn)的膛堤,稱為公鑰和私鑰手趣,知道其中一個(gè)秘鑰是無法推導(dǎo)出另外一個(gè)秘鑰的。用公鑰加密的內(nèi)容需要用私鑰才能解密肥荔,用私鑰加密的內(nèi)容需要用公鑰才能解密绿渣。非對(duì)稱加密的特點(diǎn)是安全性高,缺點(diǎn)是加密速度慢燕耿。常見的有RSA算法中符。
摘要
所謂的摘要就是一段信息或者一個(gè)文件通過某個(gè)哈希算法(也叫摘要算法)而得到的一串字符。摘要算法的特點(diǎn)就是不同的文件計(jì)算出的摘要是不同的(也有可能相同誉帅,但是可能性非常非常低)舟茶,比如一個(gè)1G的視頻文件,哪怕只是改動(dòng)其中一個(gè)字節(jié)堵第,最后計(jì)算得到的摘要也是完全不同的吧凉,所以摘要算法通常是用來判斷文件是否被篡改過。其還有一個(gè)特點(diǎn)就是通過摘要是無法推導(dǎo)出源文件的信息的踏志。常用的摘要算法有MD5阀捅、SHA等。
數(shù)字簽名
數(shù)字簽名就是一個(gè)文件的摘要加密后的信息针余。數(shù)字簽名是和源文件一起發(fā)送給接收方的饲鄙,接收方收到后對(duì)文件用摘要算法算出一個(gè)摘要凄诞,然后和數(shù)字簽名中的摘要進(jìn)行比對(duì),兩者不一致的話說明文件被篡改了忍级。
數(shù)字證書
數(shù)字證書是一個(gè)經(jīng)證書授權(quán)中心生成的文件帆谍,數(shù)字證書里一般會(huì)包含公鑰、公鑰擁有者名稱轴咱、CA的數(shù)字簽名汛蝙、有效期、授權(quán)中心名稱朴肺、證書序列號(hào)等信息窖剑。其中CA的數(shù)字簽名是驗(yàn)證證書是否被篡改的關(guān)鍵,它其實(shí)就是對(duì)證書里面除了CA的數(shù)字簽名以外的內(nèi)容進(jìn)行摘要算法得到一個(gè)摘要戈稿,然后CA機(jī)構(gòu)用他自己的私鑰對(duì)這個(gè)摘要進(jìn)行加密就生成了CA的數(shù)字簽名西土,CA機(jī)構(gòu)會(huì)公開它的公鑰,驗(yàn)證證書時(shí)就是用這個(gè)公鑰解密CA的數(shù)字簽名鞍盗,然后用來驗(yàn)證證書是否被篡改需了。
2.案例講解
場(chǎng)景:
張三要找人裝修一個(gè)房子,原則是誰的出價(jià)便宜就給誰裝修般甲,所以對(duì)于報(bào)價(jià)文件就是屬于機(jī)密文件援所。下面我們來看下不同的方式傳輸報(bào)價(jià)文件都會(huì)有什么風(fēng)險(xiǎn)。
2.1 通過對(duì)稱加密有什么風(fēng)險(xiǎn)
現(xiàn)在李四想接這個(gè)裝修的活欣除,他做了一份報(bào)價(jià)文件(文件名:lisi.txt
,文件內(nèi)容:報(bào)價(jià)50萬
)挪略。然后李四用一個(gè)對(duì)稱秘鑰123
對(duì)這個(gè)文件進(jìn)行加密历帚。最后李四將這個(gè)秘鑰和加密的文件發(fā)給張三,張三收到后用這個(gè)秘鑰解密杠娱,知道了李四的報(bào)價(jià)是50萬挽牢。
同時(shí)王五也想接這個(gè)裝修的活,他本來是想報(bào)價(jià)55萬的摊求,但是又擔(dān)心報(bào)價(jià)太高而丟掉這個(gè)活禽拔。恰巧王五是個(gè)黑客高手,于是他截獲了李四發(fā)給張三的秘鑰和加密文件室叉,知道了李四報(bào)價(jià)是50萬睹栖。最后王五將自己的報(bào)價(jià)改成了49萬發(fā)給張三,結(jié)果王五接下了這個(gè)裝修活茧痕。
結(jié)論:
用對(duì)稱加密的話野来,一旦秘鑰被黑客截獲,加密就形同虛設(shè)踪旷,所以安全性比較低曼氛。
2.2 如果用非對(duì)稱加密會(huì)怎么樣
首先張三會(huì)生成一對(duì)秘鑰豁辉,私鑰是zhangsan1
,公鑰是zhangsan2
舀患,私鑰張三自己保存徽级,將公鑰公布出去。
李四將報(bào)價(jià)文件list.txt
用張三公布的公鑰zhangsan2
進(jìn)行加密后傳給張三聊浅,然后張三用私鑰zhangsan1
進(jìn)行解密得到李四的報(bào)價(jià)是50萬餐抢。
這個(gè)時(shí)候即使王五截獲到了李四發(fā)給張三的報(bào)價(jià)文件,由于王五沒有張三的私鑰狗超,所以他是無法解密文件的弹澎,也就無法知道李四的報(bào)價(jià)。最后王五因?yàn)閳?bào)價(jià)55萬而丟掉了這個(gè)裝修的機(jī)會(huì)努咐。
所以用非對(duì)稱加密是可以保證數(shù)據(jù)傳輸安全的苦蒿。不過這里說一句題外話,既然非對(duì)稱加密安全性高渗稍,那為什么不淘汰掉對(duì)稱加密呢佩迟?其實(shí)關(guān)鍵就在于加密速度,非對(duì)稱加密計(jì)算量很大竿屹,所以加密速度是很慢的报强,如果發(fā)送消息非常頻繁,使用非對(duì)稱加密的話就會(huì)對(duì)性能造成很大影響拱燃。所以在實(shí)際開發(fā)過程中通常是對(duì)稱加密和非對(duì)稱加密結(jié)合使用的秉溉。也就是對(duì)稱加密的秘鑰是用非對(duì)稱加密后發(fā)送的,這樣能保證對(duì)稱加密的秘鑰不被黑客截獲碗誉,然后在發(fā)送業(yè)務(wù)數(shù)據(jù)時(shí)就用對(duì)稱加密召嘶。這樣既保證了安全性也保證了加密速度。
結(jié)論:
非對(duì)稱加密可以防止黑客截獲加密后的內(nèi)容哮缺,安全性高弄跌。
2.3 數(shù)字簽名有什么用
前面都說了非對(duì)稱加密是安全的,那為什么還要數(shù)字簽名呢尝苇?
設(shè)想一下铛只,王五截獲了李四的報(bào)價(jià)文件,王五雖然無法知道李四的實(shí)際報(bào)價(jià)糠溜,但是他完全可以偽造一份李四的報(bào)價(jià)(文件名:lisi.txt
淳玩,文件內(nèi)容:報(bào)價(jià)60萬
),然后將這份偽造文件用張三公布的公鑰zhangsan2
進(jìn)行加密后替換原來的報(bào)價(jià)文件非竿。張三收到后解密發(fā)現(xiàn)報(bào)價(jià)是60萬凯肋,于是張三就以為李四報(bào)的價(jià)是60萬,最后決定將裝修的活給報(bào)價(jià)55萬的王五來做汽馋。
發(fā)生這個(gè)問題的關(guān)鍵就在于張三無法知道報(bào)價(jià)文件是否被篡改過侮东。要解決這個(gè)問題就需要用到數(shù)字簽名圈盔。
首先李四需要自己生成一對(duì)非對(duì)稱加密的秘鑰,私鑰lisi1
自己保存悄雅,公鑰lisi2
發(fā)給張三驱敲。然后李四對(duì)自己的報(bào)價(jià)文件通過摘要算法得到一個(gè)摘要(假設(shè)摘要是aaa
),再用自己的私鑰lisi1
加密這個(gè)摘要就得到了報(bào)價(jià)文件的數(shù)字簽名宽闲,最后將加密的報(bào)價(jià)文件和數(shù)字簽名一起發(fā)給張三众眨,張三收到后先用李四發(fā)過來的公鑰lisi2
解密數(shù)字簽名得到摘要aaa
,然后用自己的私鑰zhangsan1
解密加密的文件得到報(bào)價(jià)源文件容诬,然后對(duì)報(bào)價(jià)源文件進(jìn)行摘要算法娩梨,看計(jì)算得到的結(jié)果是不是aaa
,如果不是aaa
的話就說明報(bào)價(jià)文件被篡改了览徒。
在這種情況下狈定,如果王五截獲了李四發(fā)給張三的文件。王五是無法解密報(bào)價(jià)文件的习蓬。如果王五偽造一份報(bào)價(jià)文件的話纽什,等張三收到后就會(huì)發(fā)現(xiàn)報(bào)價(jià)文件和數(shù)字簽名不匹配。那王五能不能偽造報(bào)價(jià)文件的同時(shí)也偽造簽名呢躲叼?因?yàn)橥跷鍥]有李四的私鑰芦缰,所以沒法對(duì)偽造的報(bào)價(jià)文件的摘要進(jìn)行加密,所以也就沒法偽造簽名枫慷。
結(jié)論:
非對(duì)稱加密雖然能確保加密文件內(nèi)容不被竊取让蕾,但不能保證文件不被篡改。數(shù)字簽名就是用來驗(yàn)證文件是否被篡改過或听。
2.4 數(shù)字證書有什么用
既然非對(duì)稱加密可以保證文件內(nèi)容的安全性探孝,數(shù)字簽名又可以保證文件不被篡改,那還要數(shù)字證書有什么用呢神帅?
我們?cè)賮碓O(shè)想一下,王五自己也生成了一對(duì)用于非對(duì)稱加密的秘鑰萌抵,私鑰是wangwu1
找御,公鑰是wangwu2
。前面李四將自己的公鑰lisi2
發(fā)給張三的過程中被王五給截獲了绍填,王五用自己的公鑰wangwu2
替換了李四的公鑰lisi2
霎桅,所以張三最后收到的公鑰實(shí)際上是王五的,但張三對(duì)這并不知情讨永。后面李四發(fā)的數(shù)字簽名和加密的報(bào)價(jià)文件都被王五截獲滔驶,并且王五偽造了一份報(bào)價(jià)文件,同時(shí)用自己的私鑰加密報(bào)價(jià)文件的摘要生成偽造的簽名并發(fā)給張三卿闹,張三收到后進(jìn)行驗(yàn)證發(fā)現(xiàn)數(shù)字簽名和報(bào)價(jià)文件是匹配的揭糕,就以為這份報(bào)價(jià)文件是真實(shí)的萝快。
出現(xiàn)這個(gè)問題的關(guān)鍵就在于張三沒法確認(rèn)收到的公鑰到底是不是李四發(fā)的,這個(gè)時(shí)候數(shù)字證書就起到作用了著角。李四到權(quán)威的數(shù)字證書機(jī)構(gòu)申請(qǐng)數(shù)字證書揪漩,證書里面包含了公鑰(lisi2
)和公鑰的擁有者(李四
)等相關(guān)信息,然后李四將證書發(fā)給張三吏口,張三通過證書里面的信息就可以知道公鑰到底是不是李四的了奄容。
那證書在發(fā)送過程中有沒有可能被王五截獲并篡改呢?要知道證書里面還包含CA的數(shù)字簽名产徊,這個(gè)簽名是證書機(jī)構(gòu)用他們自己的私鑰對(duì)證書的摘要進(jìn)行加密的昂勒,而公鑰是公開的。所以即便王五截獲并篡改了證書內(nèi)容舟铜,他也無法偽造證書機(jī)構(gòu)的簽名戈盈,張三在收到證書后通過驗(yàn)證簽名也會(huì)發(fā)現(xiàn)證書被篡改了。所以到這一步才能保證數(shù)據(jù)傳輸?shù)恼嬲踩?/p>