互聯網在爲咱們的生活帶來極大便利的狀況下,也引入了不少安全隱患。好比信息在網絡傳輸過程當中可能會被黑客截取並篡改,這會帶來很嚴重的後果。爲了解決信息在網絡傳輸過程當中的安全問題,對應就產生了:加密算法、數字簽名和數字證書。
1、加密算法
加密簡單理解就是將一串須要傳遞的明文信息轉換爲密文信息後再進行傳輸。接收方收到密文後,再按照規律進行解密,獲得原始的明文信息。在這個信息的傳輸過程當中,若是被黑客截獲,可是由於信息內容是密文,因此黑客也沒法得知信息的具體內容,從而保障了信息的安全性。
加密算法能夠分爲對稱加密和非對稱加密。
對稱加密算法的特色是:雙方使用一樣的祕鑰(能夠理解成一串隨機數,由信息發送方生成)進行加解密,算法計算量小,加解密速度快,所以被普遍使用在加密內容較多的場景下。經常使用的對稱加密算法有:AES、DES等。可是加密算法有個缺點,就是發送方該如何將祕鑰交給接收方呢?由於祕鑰自己在網絡傳輸過程當中也有可能被黑客截獲。
非對稱加密算法的特色是:雙方使用不一樣的祕鑰(一對「公鑰和私鑰」)進行加解密。用公鑰加密的內容只有對應的私鑰才能解開,反之亦然。公鑰是對外公開的,任何人均可以獲取公鑰,可是不能經過公鑰反推出私鑰(非對稱性);而且一個公鑰有且只有一個對應的私鑰(惟一性)。非對稱加密算法由於不須要向對方傳輸私鑰,所以安全性要比對稱加密算法高。可是算法要比對對稱加密複雜,加解密速度慢,不適合須要大量加密的場景。經常使用的非對稱加密算法有RSA、ESA等。
綜上咱們能夠發現,對稱加密算法效率高,適合用於大量加密內容,可是沒法保證祕鑰安全的傳輸給對方;而非對稱加密算法不須要傳輸私鑰,安全性好,可是算法複雜度高,加解密效率低,不適合用於大量加密。
結合它倆的特色,之前的大神們想出了一個解決對稱加密祕鑰傳輸安全性的方法:先用接收方的公鑰將對稱加密祕鑰加密,而後傳輸給對方;接收方收到後,用本身的私鑰解密,就獲得了發送方的對稱加密祕鑰,這樣雙方就可使用對稱加密算法愉快的通訊了。這時候,即便對稱加密祕鑰在網絡傳輸過程當中被黑客截獲,可是祕鑰被接收方的公鑰加密過了,黑客沒有接收方的私鑰,沒法破解。這個方法保證了祕鑰傳輸的安全性,同時後續的通訊內容是用對稱加密算法進行的,也兼顧了加密通訊的效率。
上面的方法看起來已經萬無一失了,黑客即便截獲了祕鑰,也沒法破解。可是,黑客仍有辦法搞事情---篡改信息。好比黑客雖然沒法破解祕鑰,可是由於接收方的公鑰是公開的,黑客也能獲取到,因此黑客能夠本身僞造一份對稱祕鑰,而後使用接收方的公鑰加密,再傳給接收方。這時候接收方使用私鑰解密後,獲得的對稱祕鑰就是黑客傳來的,而接收方徹底感知不到這點,後續使用黑客的祕鑰加密傳輸內容,這就出問題了。
爲了解決這個問題,就須要用到數字簽名大法。
2、數字簽名
1.摘要算法
介紹數字簽名以前,須要先提一下摘要算法。摘要算法能夠簡單理解爲:一份源文本,通過摘要算法處理後,獲得一串摘要值。(能夠理解爲哈希)
摘要算法的特色:同一份源文本,使用一樣的摘要算法,獲得的結果相同;而不一樣的源文本,即便使用相同的摘要算法,結果必然不一樣。而且,沒法從摘要值反推出源文本(這是摘要算法與加密算法的顯著區別,加密算法通過解密後是能夠獲得初始明文的)。基於以上特性,摘要算法能夠用來校驗信息是否被篡改,由於篡改後的信息和摘要值確定沒法匹配。
經常使用的摘要算法有:MD五、SHA等。
2. 數字簽名
上面提到摘要算法能夠用來校驗信息是否被黑客修改。可是萬一黑客改完源文本後,連摘要值也一塊兒篡改了呢?這時候數字簽名就排上用場了。
數字簽名說白了就是加密後的摘要值。發送方使用摘要算法提取出源文本的摘要值後,使用本身的私鑰對摘要值進行加密,獲得源文本的數字簽名,再使用接收方的公鑰對源文本進行加密,這樣源文本和摘要值都是密文了。在消息傳輸過程當中,將數字簽名附上一塊兒傳輸。
即便信息被黑客截獲,黑客經過發送方的公鑰解密出了摘要值,但因爲摘要算法的不可逆性,沒法反推出源文本的內容。而若是黑客想要篡改信息,從新僞造一份源文本,就算他使用一樣的摘要算法僞造了摘要值,可是由於他沒有發送方的私鑰,這時他是無法生成數字簽名的。接收方收到篡改後的信息後,若是可使用發送方公鑰正常解密數字簽名,獲得摘要值,再使用本身的私鑰解密源文本,獲得文本內容,最後再使用一樣的摘要算法提取文本內容的摘要值和數字簽名解密出來的摘要值作對比,兩者一致就能夠證實源文本沒有被人篡改過;若是沒法使用發送方的公鑰解密數字簽名,或者從新提取的摘要值和數字簽名中的摘要值不匹配,這時候接收方就能夠意識到信息多是被篡改過了。
到了這裏是否是看起來一切都沒問題了?Naive。黑客仍是有辦法搞事情的。由於接收方沒法肯定本身用的公鑰就是發送方的公鑰。黑客徹底能夠一開始就僞造一個發送方的公鑰傳給接收方。黑客再使用本身的私鑰去僞造數字簽名,附在僞造的源文本上一塊兒傳給接收方。由於接收方能夠正常使用發送方的公鑰(此時已經是黑客僞造的公鑰)解密數字簽名,而且僞造的數字簽名和僞造的源文本是匹配的。這時候接收方仍是沒法識別信息被篡改。
能夠發現,這時候問題的關鍵點在於如何確保發送方公鑰的可靠性。爲了解決這個問題,就須要用到數字證書大法。
3、數字證書
數字證書是一份通過證書受權中心(CA)簽發數字簽名的,包含有公鑰全部者信息以及公鑰內容的文件。簡單理解,數字證書裏包含有:公鑰、公鑰全部者的信息、CA的數字簽名、CA名稱、證書有效期、序列號等信息。
數字證書如何保證公鑰的可靠性呢?關鍵在於CA的數字簽名。CA使用摘要算法獲得數字證書內容的摘要值,而後用本身的私鑰進行加密,獲得數字簽名。這樣證書的使用者在獲得數字證書後,只要使用CA的公鑰(任何人都能獲取)解密數字簽名,獲得摘要值,再使用一樣的摘要算法提取數字證書內容的摘要值,兩者進行對比,就能夠知道證書是否被篡改過了。
這裏咱們可能又會發現,數字證書安全性的關鍵就是確保CA的私鑰和公鑰是可靠的。這一點的話能夠由受信任的CA機構來負責保證,由於這是要給錢的,花錢保平安~
申請商用證書實質上就是把本身生成的公鑰等信息發給受信任的CA機構,由他們簽署數字簽名,這樣一份可靠的數字證書就誕生了。(私鑰不用發給CA,本身保存就好)
Ps:自簽名證書
顧名思義,本身給本身的證書籤署數字簽名。自簽名證書中是沒有受信任CA機構的信息的,因此使用自簽名證書提供服務的時候,都會在瀏覽器上提示證書不安全之類的問題,這是由於瀏覽器沒法在受信任的CA機構列表中找到證書中的CA機構信息,因此認爲證書不安全。要想規避的話,只需將證書添加到受信任的CA機構列表中便可。可是要完全解決的話,仍是須要花錢去申請商用證書。
自簽名證書的優勢:不要錢;缺點:證書可能在傳輸途中被篡改。