對稱加密、非對稱加密 和 md5

原文:https://www.cnblogs.com/Caersi/p/6720789.html

數據傳輸安全的要滿足的要求:

  1. 消息的發送方能夠確定消息只有預期的接收方可以解密(不保證第三方無法獲得,但保證第三方無法解密)。
  2. 消息的接收方可以確定消息是由誰發送的(消息的接收方可以確定消息的發送方)。
  3. 消息的接收方可以確定消息在途中沒有被篡改過(必須確認消息的完整性)。

對稱加密

網絡的數據傳輸從發送方發出到接收方接收到,要經過數個節點才能到達目的地,在這個過程中難免會被別有用心的人監聽(現在常用的網絡數據監聽軟件就有charles,具體可以查看相關使用教程,通過這個軟件可以監聽到某個頁面用到了哪些接口,發送以及返回的參數分別是什麼)。所以在傳輸敏感數據的過程中,就要對數據進行加密。現行的加密過程中,一般加密算法是公開的,密鑰是自己持有,發送方有密鑰對數據進行加密傳輸,在傳輸的過程中經過加密的數據即使被第三方竊取到也因爲沒有密鑰不能解密。而接收方同樣持有密鑰通過算法的逆運算把密文解析出對應的明文來。

過程如下:

上述算法即爲對稱加密,特點是加密和解密都是用同一個密鑰。這種算法的前提條件是發送方和接收方用一個密鑰,也就是說在數據傳輸之前,接收方要知道發送方用於發送加密數據所用到的密鑰。但是現實條件是一般不會把密鑰手把手的交給對方,所以下面就要用到非對稱加密算法。

非對稱加密算法

非對稱加密算法中信息的發送方和接收方都分別有兩個密鑰,其中分別爲私鑰和公鑰,私鑰爲數據的發送方持有,公鑰可以公開。其中涉及到兩種模式,它們分別爲加密模式和認證模式。

加密模式:

發送方用公鑰給數據進行加密,然後把加密後的數據發送到接收方,然後接收方用對應的私鑰解密,因爲只有接收方的私鑰才能解析數據,所以即使被第三方竊取到數據也沒有關係。這個模式叫做加密模式。在這個過程中如何保證數據的完整性,保證數據是發送方發送的數據,而不是被第三方篡改後的數據。這時就要用到簽名,在發送方加密明文之前,給明文取md5值,得到其信息的摘要(注:不能通過信息摘要反推明文)。然後用公鑰分別給明文和明文的摘要加密發送到數據的接收方,數據的接收方接收到數據之後,用私鑰對密文和摘要進行解密,然後對解密得到的明文取md5摘要,比對解密後的明文摘要和發送過來的摘要是否一致;一致就證明數據是原始的數據沒有遭到篡改。這個加密的過程中保證了數據的安全性(即只有接收方纔可以解密)和防篡改性(簽名認證),這就保證了上面說的數據傳輸要求中的第一點和第三點。下面是圖解過程:

但是因爲公鑰是公開的,所以在加密模式中我們是不知道到底是誰發送數據給我們的,因此下面就要提到認證模式。

認證模式:

在認證模式中,發送方用私鑰加密數據,給接收方發送數據,接收方用公鑰解密,因爲私鑰是唯一的,所以只要數據解析成功就可以知道數據發送方是誰。

這就附和我們在數據的傳輸要求中的第二點了。下面是圖解過程:

結合加密模式和認證模式就可以實現數據傳輸安全的三大要點了。

下面我們來解釋一下這種高級模式,以發送方和接收方兩個部分來解釋:

  1. 將消息進行散列運算,得到消息摘要。
  2. 使用自己的私鑰對消息摘要加密(認證模式:確保了接收方能夠確認自己)。
  3. 使用接收方的公鑰對消息進行加密(加密模式:確保了消息只能由期望的接收方解密)。
  4. 發送消息和消息摘要。

接下來我們看一下接收方所執行的步驟:

  1. 使用發送方的公鑰對消息摘要進行解密(確認了消息是由誰發送的)。
  2. 使用自己的私鑰對消息進行解密(安全地獲得了實際應獲得的信息)。
  3. 將消息進行散列運算,獲得消息摘要。
  4. 將上一步獲得的消息摘要 和 第一步解密的消息摘要進行對比(確認了消息是否被篡改)。

可以看到,通過上面這種方式,使用了接收方、發送方全部的四個密鑰,再配合使用消息摘要,使得前面提出的安全傳遞的所有三個條件全都滿足了。那麼是不是這種方法就是最好的呢?不是的,因爲我們已經說過了,非對稱加密是一種很耗時的操作,所以這個方案是很低效的。實際上,我們可以通過非對稱加密來解決對稱加密中的密鑰傳遞問題,如果你已經忘記了可以翻到前面再看一看,也就是說,我們可以使用這裏的高級實現方式來進行對稱加密中密鑰的傳遞,對於之後實際的數據傳遞,採用對稱加密方式來完成,因爲此時已經是安全的了。

證書機制

與數字簽名相關的一個概念就是證書機制了,證書是用來做什麼呢?在上面的各種模式中,我們一直使用了這樣一個假設,就是接收方或者發送方所持有的、對方的公鑰總是正確的(確實是對方公佈的)。而實際上除非對方手把手將公鑰交給我們,否則如果不採取措施,雙方在網絡中傳遞公鑰時,一樣有可能被篡改。那麼怎樣解決這個問題呢?這時就需要證書機制了:可以引入一個公正的第三方,當某一方想要發佈公鑰時,它將自身的身份信息及公鑰提交給這個第三方,第三方對其身份進行證實,如果沒有問題,則將其信息和公鑰打包成爲證書(Certificate)。而這個公正的第三方,就是常說的證書頒發機構(Certificate Authority)。當我們需要獲取公鑰時,只需要獲得其證書,然後從中提取出公鑰就可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章