互聯(lián)網(wǎng)在為我們的生活帶來極大便利的情況下恬涧,也引入了很多安全隱患注益。比如信息在網(wǎng)絡(luò)傳輸過程中可能會被黑客截取并篡改,這會帶來很嚴(yán)重的后果溯捆。為了解決信息在網(wǎng)絡(luò)傳輸過程中的安全問題丑搔,對應(yīng)就產(chǎn)生了:加密算法、數(shù)字簽名和數(shù)字證書提揍。
一啤月、加密算法
加密簡單理解就是將一串需要傳遞的明文信息轉(zhuǎn)換為密文信息后再進(jìn)行傳輸。接收方收到密文后碳锈,再按照規(guī)律進(jìn)行解密,得到原始的明文信息欺抗。在這個信息的傳輸過程中售碳,如果被黑客截獲,但是因為信息內(nèi)容是密文绞呈,所以黑客也無法得知信息的具體內(nèi)容贸人,從而保障了信息的安全性。
加密算法可以分為對稱加密和非對稱加密佃声。
對稱加密算法的特點(diǎn)是:雙方使用同樣的秘鑰(可以理解成一串隨機(jī)數(shù)艺智,由信息發(fā)送方生成)進(jìn)行加解密,算法計算量小圾亏,加解密速度快十拣,因此被廣泛使用在加密內(nèi)容較多的場景下封拧。常用的對稱加密算法有:AES、DES等夭问。但是加密算法有個缺點(diǎn)泽西,就是發(fā)送方該如何將秘鑰交給接收方呢?因為秘鑰本身在網(wǎng)絡(luò)傳輸過程中也有可能被黑客截獲缰趋。
非對稱加密算法的特點(diǎn)是:雙方使用不同的秘鑰(一對“公鑰和私鑰”)進(jìn)行加解密捧杉。用公鑰加密的內(nèi)容只有對應(yīng)的私鑰才能解開,反之亦然秘血。公鑰是對外公開的味抖,任何人都可以獲取公鑰,但是不能通過公鑰反推出私鑰(非對稱性)灰粮;并且一個公鑰有且只有一個對應(yīng)的私鑰(唯一性)仔涩。非對稱加密算法因為不需要向?qū)Ψ絺鬏斔借€,因此安全性要比對稱加密算法高谋竖。但是算法要比對對稱加密復(fù)雜红柱,加解密速度慢,不適合需要大量加密的場景蓖乘。常用的非對稱加密算法有RSA锤悄、ESA等。
綜上我們可以發(fā)現(xiàn)嘉抒,對稱加密算法效率高零聚,適合用于大量加密內(nèi)容,但是無法保證秘鑰安全的傳輸給對方些侍;而非對稱加密算法不需要傳輸私鑰隶症,安全性好,但是算法復(fù)雜度高岗宣,加解密效率低蚂会,不適合用于大量加密。
結(jié)合它倆的特點(diǎn)耗式,以前的大神們想出了一個解決對稱加密秘鑰傳輸安全性的方法:先用接收方的公鑰將對稱加密秘鑰加密胁住,然后傳輸給對方;接收方收到后刊咳,用自己的私鑰解密彪见,就得到了發(fā)送方的對稱加密秘鑰,這樣雙方就可以使用對稱加密算法愉快的通信了娱挨。這時候余指,即使對稱加密秘鑰在網(wǎng)絡(luò)傳輸過程中被黑客截獲,但是秘鑰被接收方的公鑰加密過了跷坝,黑客沒有接收方的私鑰酵镜,無法破解碉碉。這個方法保證了秘鑰傳輸?shù)陌踩裕瑫r后續(xù)的通信內(nèi)容是用對稱加密算法進(jìn)行的笋婿,也兼顧了加密通信的效率誉裆。
上面的方法看起來已經(jīng)萬無一失了,黑客即使截獲了秘鑰缸濒,也無法破解足丢。但是,黑客仍有辦法搞事情---篡改信息庇配。比如黑客雖然無法破解秘鑰斩跌,但是因為接收方的公鑰是公開的,黑客也能獲取到捞慌,所以黑客可以自己偽造一份對稱秘鑰耀鸦,然后使用接收方的公鑰加密,再傳給接收方啸澡。這時候接收方使用私鑰解密后袖订,得到的對稱秘鑰就是黑客傳來的,而接收方完全感知不到這點(diǎn)嗅虏,后續(xù)使用黑客的秘鑰加密傳輸內(nèi)容洛姑,這就出問題了。
為了解決這個問題皮服,就需要用到數(shù)字簽名大法楞艾。
二、數(shù)字簽名
1.摘要算法
介紹數(shù)字簽名之前龄广,需要先提一下摘要算法硫眯。摘要算法可以簡單理解為:一份源文本,經(jīng)過摘要算法處理后择同,得到一串摘要值两入。(可以理解為哈希)
摘要算法的特點(diǎn):同一份源文本,使用同樣的摘要算法敲才,得到的結(jié)果相同裹纳;而不同的源文本,即使使用相同的摘要算法归斤,結(jié)果必然不同痊夭。并且刁岸,無法從摘要值反推出源文本(這是摘要算法與加密算法的顯著區(qū)別脏里,加密算法經(jīng)過解密后是可以得到初始明文的)『缡铮基于以上特性迫横,摘要算法可以用來校驗信息是否被篡改番舆,因為篡改后的信息和摘要值肯定無法匹配。
常用的摘要算法有:MD5矾踱、SHA等恨狈。
2. 數(shù)字簽名
上面提到摘要算法可以用來校驗信息是否被黑客修改。但是萬一黑客改完源文本后呛讲,連摘要值也一起篡改了呢禾怠?這時候數(shù)字簽名就排上用場了。
數(shù)字簽名說白了就是加密后的摘要值贝搁。發(fā)送方使用摘要算法提取出源文本的摘要值后吗氏,使用自己的私鑰對摘要值進(jìn)行加密,得到源文本的數(shù)字簽名雷逆,再使用接收方的公鑰對源文本進(jìn)行加密弦讽,這樣源文本和摘要值都是密文了。在消息傳輸過程中膀哲,將數(shù)字簽名附上一起傳輸往产。
即使信息被黑客截獲,黑客通過發(fā)送方的公鑰解密出了摘要值某宪,但由于摘要算法的不可逆性仿村,無法反推出源文本的內(nèi)容。而如果黑客想要篡改信息缩抡,重新偽造一份源文本奠宜,就算他使用同樣的摘要算法偽造了摘要值,但是因為他沒有發(fā)送方的私鑰瞻想,這時他是沒法生成數(shù)字簽名的压真。接收方收到篡改后的信息后,如果可以使用發(fā)送方公鑰正常解密數(shù)字簽名蘑险,得到摘要值滴肿,再使用自己的私鑰解密源文本,得到文本內(nèi)容佃迄,最后再使用同樣的摘要算法提取文本內(nèi)容的摘要值和數(shù)字簽名解密出來的摘要值做對比泼差,二者一致就可以證明源文本沒有被人篡改過;如果無法使用發(fā)送方的公鑰解密數(shù)字簽名呵俏,或者重新提取的摘要值和數(shù)字簽名中的摘要值不匹配堆缘,這時候接收方就可以意識到信息可能是被篡改過了。
到了這里是不是看起來一切都沒問題了普碎?Naive吼肥。黑客還是有辦法搞事情的。因為接收方無法確定自己用的公鑰就是發(fā)送方的公鑰。黑客完全可以一開始就偽造一個發(fā)送方的公鑰傳給接收方缀皱。黑客再使用自己的私鑰去偽造數(shù)字簽名斗这,附在偽造的源文本上一起傳給接收方。因為接收方可以正常使用發(fā)送方的公鑰(此時已是黑客偽造的公鑰)解密數(shù)字簽名啤斗,并且偽造的數(shù)字簽名和偽造的源文本是匹配的表箭。這時候接收方還是無法識別信息被篡改。
可以發(fā)現(xiàn)钮莲,這時候問題的關(guān)鍵點(diǎn)在于如何確保發(fā)送方公鑰的可靠性免钻。為了解決這個問題,就需要用到數(shù)字證書大法崔拥。
三伯襟、數(shù)字證書
數(shù)字證書是一份經(jīng)過證書授權(quán)中心(CA)簽發(fā)數(shù)字簽名的,包含有公鑰所有者信息以及公鑰內(nèi)容的文件握童。簡單理解姆怪,數(shù)字證書里包含有:公鑰、公鑰所有者的信息澡绩、CA的數(shù)字簽名稽揭、CA名稱、證書有效期肥卡、序列號等信息溪掀。
數(shù)字證書如何保證公鑰的可靠性呢?關(guān)鍵在于CA的數(shù)字簽名步鉴。CA使用摘要算法得到數(shù)字證書內(nèi)容的摘要值揪胃,然后用自己的私鑰進(jìn)行加密,得到數(shù)字簽名氛琢。這樣證書的使用者在得到數(shù)字證書后喊递,只要使用CA的公鑰(任何人都能獲取)解密數(shù)字簽名阳似,得到摘要值骚勘,再使用同樣的摘要算法提取數(shù)字證書內(nèi)容的摘要值,二者進(jìn)行對比撮奏,就可以知道證書是否被篡改過了俏讹。
這里我們可能又會發(fā)現(xiàn),數(shù)字證書安全性的關(guān)鍵就是確保CA的私鑰和公鑰是可靠的畜吊。這一點(diǎn)的話可以由受信任的CA機(jī)構(gòu)來負(fù)責(zé)保證泽疆,因為這是要給錢的,花錢保平安~
申請商用證書實(shí)質(zhì)上就是把自己生成的公鑰等信息發(fā)給受信任的CA機(jī)構(gòu)玲献,由他們簽署數(shù)字簽名殉疼,這樣一份可靠的數(shù)字證書就誕生了逗嫡。(私鑰不用發(fā)給CA,自己保存就好)
Ps:自簽名證書
顧名思義株依,自己給自己的證書簽署數(shù)字簽名。自簽名證書中是沒有受信任CA機(jī)構(gòu)的信息的延窜,所以使用自簽名證書提供服務(wù)的時候恋腕,都會在瀏覽器上提示證書不安全之類的問題,這是因為瀏覽器無法在受信任的CA機(jī)構(gòu)列表中找到證書中的CA機(jī)構(gòu)信息逆瑞,所以認(rèn)為證書不安全荠藤。要想規(guī)避的話,只需將證書添加到受信任的CA機(jī)構(gòu)列表中即可获高。但是要徹底解決的話哈肖,還是需要花錢去申請商用證書。
自簽名證書的優(yōu)點(diǎn):不要錢念秧;缺點(diǎn):證書可能在傳輸途中被篡改淤井。