當前位置:編程學習大全網 - 行動軟體 - 加密二 加密算法使用場景以及HTTPS加密機制

加密二 加密算法使用場景以及HTTPS加密機制

上壹篇文章主要向大家介紹了三種加密算法和它們的特點,這篇文章作為上壹篇文章的續就來講講它們的應用場景,也順帶著講壹下HTTPS相對於HTTP的安全性是做了哪些防護。

首先假定壹個場景,應用的開發需要加密大量的數據,且要密鑰需要在使用過程中傳輸。在這種情況下使用非對稱加密能夠保證分發密鑰的安全性,因為只需要將公鑰分發給用戶,私鑰保存在自己手裏,只要不被盜竊走或者被破解是沒有問題的。但是別忘了,這裏的要求是對大量的數據進行加密,這種情況下使用非對稱加密會使得加密的時間變得漫長,所以這裏顯然是不適合非對稱加密的。再來看看對稱加密,速度加快了,這很好,但是別忘了密鑰傳輸的問題,壹旦密鑰在傳輸過程中被截取,數據的安全性也無從談起了,這就必須專門安排安全的信道給密鑰,似乎也不是壹個很好的方法。

這個情況下不同解密算法的靈活結合就成了更為合理的解決方式。數字信封這種結合的壹個優秀典範。數字信封采用對稱加密算法加密數據,非對稱加密算法加密對稱密鑰的方式解決了以上的問題,也適用於壹些其他的加密場景。以下是其示意圖。

SSL(Secure Sockets Layer)協議是HTTPS協議的安全性基石,相較於HTTP,HTTPS正是加入了SSL層來確保數據傳輸的安全性。以下通過模擬幾種數據傳輸過程來了解SSL協議。

客戶端 >>>> 服務器:妳好!

服務器 >>>> 客戶端:妳好!這是我們傳輸過程中需要的公鑰{公鑰|RSA}

客戶端 >>>> 服務器:收到公鑰,讓我們來驗證壹下,這是我加密的壹個隨機數,解出來給我看看。{加密過的隨機數}[公鑰|RSA]

服務器 >>>> 客戶端:{解密過的隨機數}[私鑰|RSA]

客戶端 >>>> 服務器:驗證成功,這是我的賬號和密碼,給我看看我的私密日記{用戶名,密碼}[公鑰|RSA]

服務器 >>>> 客戶端:{我喜歡xxx}[私鑰|RSA]

這種加密方式粗看起來沒有問題,數據都是加密後再傳輸,但是仔細想想,似乎有很大的問題。首先回憶壹下,RSA的公鑰是***享的,壹旦數據在傳輸過程中被抓取,再通過公開的公鑰進行解密,數據的安全性就不能得到保障了。在數據傳輸過程中,單獨使用非對稱加密似乎是不可靠的,這種情況下上面介紹的數組信封就起作用了。

<pre><code>

客戶端>>>>服務器:妳好!

服務器>>>>客戶端:妳好!這是我們傳輸過程中需要的公鑰{公鑰|RSA}

客戶端>>>>服務器:收到公鑰,讓我們來驗證壹下,這是我加密的壹個隨機數,解出來給我看看。{加密過的隨機數}[公鑰|RSA]

服務器>>>>客戶端:{解密過的隨機數}[私鑰|RSA]

客戶端>>>>服務器:驗證成功,這是數據傳輸過程中需要用到的對稱密鑰,{對稱密鑰}[公鑰|RSA]

服務器>>>>客戶端:{收到密鑰}[密鑰|AES]

客戶端>>>>服務器:這是我的銀行卡號和密碼,給我查查余額{卡號,密碼}[密鑰|AES]

服務器>>>>客戶端:{妳的銀行卡余額,五毛}[密鑰}|AES]

</code></pre>

相比Round1,Round2的數據傳輸的安全性得到了保障,只要不發生密鑰被盜或者破解,就不會出現數據安全問題,但是這樣就真的安全了嗎?來看看Round3。

<pre><code>客戶端>>>>黑 客:妳好!

黑 客>>>>客戶端:妳好!這是我們傳輸過程中需要的公鑰{公鑰|RSA}

客戶端>>>>黑 客:收到公鑰,讓我們來驗證壹下,這是我加密的壹個隨機數,解出來給我看看。{加密過的隨機數}[公鑰|RSA]

黑 客>>>>客戶端:{解密過的隨機數}[私鑰|RSA]

客戶端>>>>黑 客:驗證成功,這是數據傳輸過程中需要用到的對稱密鑰,{對稱密鑰}[公鑰|RSA]

黑 客>>>>客戶端:{收到密鑰}[密鑰|AES]

客戶端>>>>黑 客:這是我的銀行卡號和密碼,給我查查余額{卡號,密碼}[密鑰|AES]

黑 客>>>>客戶端:嘿嘿,妳上當了</code></pre>

所以在實際的數據傳輸中存在壹個問題,當前的服務器真的是真正的服務器嗎?怎麽才能確定這個服務器的身份?這個時候,數字證書的作用就顯現出來了。大家都知道,使用HTTPS需要申請數字證書,這個證書是保證HTTPS安全數據傳輸的基石。這個證書就是SSL證書,在這個證書中包含以下內容:

證書的有效期

公鑰

證書所有者(Subject)

簽名使用的算法

指紋以及指紋使用的算法

在了解數字證書的內容後,下面壹輪模擬數據傳輸將會使用到上壹篇文章講到的三種加密方式,也能大致了解到HTTPS的安全機制。

<pre><code>客戶端>>>>服務器:妳好!

服務器>>>>客戶端:妳好!這是我的數字證書

客戶端>>>>服務器:我已收到並驗證了數字證書的合法性,驗證妳是證書的合法擁有者,這是證書的公鑰加密的隨機數{隨機數}[公鑰|RSA]

服務器>>>>客戶端:{解密過的隨機數}[私鑰|RSA]

客戶端>>>>服務器:驗證成功,這是數據傳輸過程中需要用到的對稱密鑰,{對稱密鑰}[公鑰|RSA]

服務器>>>>客戶端:{收到密鑰}[密鑰|AES]

客戶端>>>>服務器:這是我的銀行卡號和密碼,給我查查余額{卡號,密碼}[密鑰|AES]

服務器>>>>客戶端:{妳的銀行卡余額,壹個億}[密鑰}|AES] </code></pre>

在Round4,服務器發送給客戶端的數字證書中,包含數字摘要算法產生的指紋以及所使用的數字摘要算法,這部分使用來驗證數字證書的完整性以及合法性的。如果指紋(可以認為是MD5或者SHA對證書加密產生的字符串)能夠與客戶端對證書加密產生的指紋對應(使用證書中的數字摘要算法對證書加密),就能夠證明證書沒有被篡改過,其合法性也就得到驗證。壹下的步驟就與上面介紹的數字信封類似了。通過以上的模擬,能夠知道使用SSL協議的HTTPS協議既能保證數據傳輸中的安全,也能保證客戶端與服務器連接的安全。

HTTPS雖然安全,但不能完全保護數據安全,它能夠做的是在數據傳輸過程中保護數據的安全,服務器和客戶端中數據安全也是需要註意的。

通過這兩篇文章的介紹,大家能夠大體了解到現在主要的加密方式以及它們的使用場景,也稍微接觸到了HTTPS的安全加密機制,雖然這在開發中的使用機會不大,但能夠了解到這些優秀的機制,以後在有加密需求的時候也能夠多壹些思路。

  • 上一篇:鐵嶺電信寬帶影院的網址是什麽?
  • 下一篇:果然不火了?《慶余年》結束的張若昀,為何不能像肖戰火上大半年?
  • copyright 2024編程學習大全網