當前位置:旅游攻略大全網 - 旧房装修 - 對稱加密、非對稱加密、摘要、數字簽名、數字證書

對稱加密、非對稱加密、摘要、數字簽名、數字證書

作為壹個開發人員,或多或少都聽說過對稱加密、非對稱加密、摘要、數字簽名、數字證書這幾個概念,它們是用來保證在互聯網通信過程中數據傳輸安全的。有人可能會有疑惑,我給傳輸數據加個密不就安全了,為什麽還要搞這麽多花樣出來?本文主要通過壹個案例來講解這幾個概念的實際作用。

在此之前,我先簡單介紹壹下這幾個概念。

對稱加密是指用來加密和解密的是同壹個秘鑰。其特點是加密速度快,但是秘鑰容易被黑客截獲,所以安全性不高。常見的有AES、DES算法。

非對稱加密是指用來加密和解密的是不同的秘鑰,它們是成對出現的,稱為公鑰和私鑰,知道其中壹個秘鑰是無法推導出另外壹個秘鑰的。用公鑰加密的內容需要用私鑰才能解密,用私鑰加密的內容需要用公鑰才能解密。非對稱加密的特點是安全性高,缺點是加密速度慢。常見的有RSA算法。

所謂的摘要就是壹段信息或者壹個文件通過某個哈希算法(也叫摘要算法)而得到的壹串字符。摘要算法的特點就是不同的文件計算出的摘要是不同的(也有可能相同,但是可能性非常非常低),比如壹個1G的視頻文件,哪怕只是改動其中壹個字節,最後計算得到的摘要也是完全不同的,所以摘要算法通常是用來判斷文件是否被篡改過。其還有壹個特點就是通過摘要是無法推導出源文件的信息的。常用的摘要算法有MD5、SHA等。

數字簽名就是壹個文件的摘要加密後的信息。數字簽名是和源文件壹起發送給接收方的,接收方收到後對文件用摘要算法算出壹個摘要,然後和數字簽名中的摘要進行比對,兩者不壹致的話說明文件被篡改了。

數字證書是壹個經證書授權中心生成的文件,數字證書裏壹般會包含公鑰、公鑰擁有者名稱、CA的數字簽名、有效期、授權中心名稱、證書序列號等信息。其中CA的數字簽名是驗證證書是否被篡改的關鍵,它其實就是對證書裏面除了CA的數字簽名以外的內容進行摘要算法得到壹個摘要,然後CA機構用他自己的私鑰對這個摘要進行加密就生成了CA的數字簽名,CA機構會公開它的公鑰,驗證證書時就是用這個公鑰解密CA的數字簽名,然後用來驗證證書是否被篡改。

場景:

張三要找人裝修壹個房子,原則是誰的出價便宜就給誰裝修,所以對於報價文件就是屬於機密文件。下面我們來看下不同的方式傳輸報價文件都會有什麽風險。

現在李四想接這個裝修的活,他做了壹份報價文件(文件名: 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的數字簽名,這個簽名是證書機構用他們自己的私鑰對證書的摘要進行加密的,而公鑰是公開的。所以即便王五截獲並篡改了證書內容,他也無法偽造證書機構的簽名,張三在收到證書後通過驗證簽名也會發現證書被篡改了。所以到這壹步才能保證數據傳輸的真正安全。