做爲一個開發人員,或多或少都據說過對稱加密、非對稱加密、摘要、數字簽名、數字證書這幾個概念,它們是用來保證在互聯網通訊過程當中數據傳輸安全的。有人可能會有疑惑,我給傳輸數據加個密不就安全了,爲何還要搞這麼多花樣出來?本文主要經過一個案例來說解這幾個概念的實際做用。算法
在此以前,我先簡單介紹一下這幾個概念。安全
對稱加密是指用來加密和解密的是同一個祕鑰。其特色是加密速度快,可是祕鑰容易被黑客截獲,因此安全性不高。常見的有AES、DES算法。併發
非對稱加密是指用來加密和解密的是不一樣的祕鑰,它們是成對出現的,稱爲公鑰和私鑰,知道其中一個祕鑰是沒法推導出另一個祕鑰的。用公鑰加密的內容須要用私鑰才能解密,用私鑰加密的內容須要用公鑰才能解密。非對稱加密的特色是安全性高,缺點是加密速度慢。常見的有RSA算法。性能
所謂的摘要就是一段信息或者一個文件經過某個哈希算法(也叫摘要算法)而獲得的一串字符。摘要算法的特色就是不一樣的文件計算出的摘要是不一樣的(也有可能相同,可是可能性很是很是低),好比一個1G的視頻文件,哪怕只是改動其中一個字節,最後計算獲得的摘要也是徹底不一樣的,因此摘要算法一般是用來判斷文件是否被篡改過。其還有一個特色就是經過摘要是沒法推導出源文件的信息的。經常使用的摘要算法有MD五、SHA等。加密
數字簽名就是一個文件的摘要加密後的信息。數字簽名是和源文件一塊兒發送給接收方的,接收方收到後對文件用摘要算法算出一個摘要,而後和數字簽名中的摘要進行比對,二者不一致的話說明文件被篡改了。code
數字證書是一個經證書受權中心生成的文件,數字證書裏通常會包含公鑰、公鑰擁有者名稱、CA的數字簽名、有效期、受權中心名稱、證書序列號等信息。其中CA的數字簽名是驗證證書是否被篡改的關鍵,它其實就是對證書裏面除了CA的數字簽名之外的內容進行摘要算法獲得一個摘要,而後CA機構用他本身的私鑰對這個摘要進行加密就生成了CA的數字簽名,CA機構會公開它的公鑰,驗證證書時就是用這個公鑰解密CA的數字簽名,而後用來驗證證書是否被篡改。視頻
場景:開發
張三要找人裝修一個房子,原則是誰的出價便宜就給誰裝修,因此對於報價文件就是屬於機密文件。下面咱們來看下不一樣的方式傳輸報價文件都會有什麼風險。class
如今李四想接這個裝修的活,他作了一份報價文件(文件名:lisi.txt
,文件內容:報價50萬
)。而後李四用一個對稱祕鑰123
對這個文件進行加密。最後李四將這個祕鑰和加密的文件發給張三,張三收到後用這個祕鑰解密,知道了李四的報價是50萬。互聯網
同時王五也想接這個裝修的活,他原本是想報價55萬的,可是又擔憂報價過高而丟掉這個活。恰巧王五是個黑客高手,因而他截獲了李四發給張三的祕鑰和加密文件,知道了李四報價是50萬。最後王五將本身的報價改爲了49萬發給張三,結果王五接下了這個裝修活。
結論: 用對稱加密的話,一旦祕鑰被黑客截獲,加密就形同虛設,因此安全性比較低。
首先張三會生成一對祕鑰,私鑰是zhangsan1
,公鑰是zhangsan2
,私鑰張三本身保存,將公鑰公佈出去。
李四將報價文件list.txt
用張三公佈的公鑰zhangsan2
進行加密後傳給張三,而後張三用私鑰zhangsan1
進行解密獲得李四的報價是50萬。
這個時候即便王五截獲到了李四發給張三的報價文件,因爲王五沒有張三的私鑰,因此他是沒法解密文件的,也就沒法知道李四的報價。最後王五由於報價55萬而丟掉了這個裝修的機會。
因此用非對稱加密是能夠保證數據傳輸安全的。不過這裏說一句題外話,既然非對稱加密安全性高,那爲何不淘汰掉對稱加密呢?其實關鍵就在於加密速度,非對稱加密計算量很大,因此加密速度是很慢的,若是發送消息很是頻繁,使用非對稱加密的話就會對性能形成很大影響。因此在實際開發過程當中一般是對稱加密和非對稱加密結合使用的。也就是對稱加密的祕鑰是用非對稱加密後發送的,這樣能保證對稱加密的祕鑰不被黑客截獲,而後在發送業務數據時就用對稱加密。這樣既保證了安全性也保證了加密速度。
結論: 非對稱加密能夠防止黑客截獲加密後的內容,安全性高。
前面都說了非對稱加密是安全的,那爲何還要數字簽名呢?
設想一下,王五截獲了李四的報價文件,王五雖然沒法知道李四的實際報價,可是他徹底能夠僞造一份李四的報價(文件名:lisi.txt
,文件內容:報價60萬
),而後將這份僞造文件用張三公佈的公鑰zhangsan2
進行加密後替換原來的報價文件。張三收到後解密發現報價是60萬,因而張三就覺得李四報的價是60萬,最後決定將裝修的活給報價55萬的王五來作。
發生這個問題的關鍵就在於張三沒法知道報價文件是否被篡改過。要解決這個問題就須要用到數字簽名。
首先李四須要本身生成一對非對稱加密的祕鑰,私鑰lisi1
本身保存,公鑰lisi2
發給張三。而後李四對本身的報價文件經過摘要算法獲得一個摘要(假設摘要是aaa
),再用本身的私鑰lisi1
加密這個摘要就獲得了報價文件的數字簽名,最後將加密的報價文件和數字簽名一塊兒發給張三,張三收到後先用李四發過來的公鑰lisi2
解密數字簽名獲得摘要aaa
,而後用本身的私鑰zhangsan1
解密加密的文件獲得報價源文件,而後對報價源文件進行摘要算法,看計算獲得的結果是否是aaa
,若是不是aaa
的話就說明報價文件被篡改了。
在這種狀況下,若是王五截獲了李四發給張三的文件。王五是沒法解密報價文件的。若是王五僞造一份報價文件的話,等張三收到後就會發現報價文件和數字簽名不匹配。那王五能不能僞造報價文件的同時也僞造簽名呢?由於王五沒有李四的私鑰,因此無法對僞造的報價文件的摘要進行加密,因此也就無法僞造簽名。
結論: 非對稱加密雖然能確保加密文件內容不被竊取,但不能保證文件不被篡改。數字簽名就是用來驗證文件是否被篡改過。
既然非對稱加密能夠保證文件內容的安全性,數字簽名又能夠保證文件不被篡改,那還要數字證書有什麼用呢?
咱們再來設想一下,王五本身也生成了一對用於非對稱加密的祕鑰,私鑰是wangwu1
,公鑰是wangwu2
。前面李四將本身的公鑰lisi2
發給張三的過程當中被王五給截獲了,王五用本身的公鑰wangwu2
替換了李四的公鑰lisi2
,因此張三最後收到的公鑰其實是王五的,但張三對這並不知情。後面李四發的數字簽名和加密的報價文件都被王五截獲,而且王五僞造了一份報價文件,同時用本身的私鑰加密報價文件的摘要生成僞造的簽名併發給張三,張三收到後進行驗證發現數字簽名和報價文件是匹配的,就覺得這份報價文件是真實的。
出現這個問題的關鍵就在於張三無法確認收到的公鑰究竟是不是李四發的,這個時候數字證書就起到做用了。李四到權威的數字證書機構申請數字證書,證書裏面包含了公鑰(lisi2
)和公鑰的擁有者(李四
)等相關信息,而後李四將證書發給張三,張三經過證書裏面的信息就能夠知道公鑰究竟是不是李四的了。
那證書在發送過程當中有沒有可能被王五截獲並篡改呢?要知道證書裏面還包含CA的數字簽名,這個簽名是證書機構用他們本身的私鑰對證書的摘要進行加密的,而公鑰是公開的。因此即使王五截獲並篡改了證書內容,他也沒法僞造證書機構的簽名,張三在收到證書後經過驗證簽名也會發現證書被篡改了。因此到這一步才能保證數據傳輸的真正安全。