深入淺出HTTPS的對稱加密和非對稱加密(面試會問)

作者:全網iOS面試題總結 鏈接:https://www.jianshu.com/p/ac3a80ca59c3 來源:簡書
著作權歸作者所有。商業轉載請聯繫作者獲得授權,非商業轉載請註明出處。

一、HTTPS和HTTP的區別

HTTPS協議 = HTTP協議 + SSL/TLS協議
SSL的全稱是Secure Sockets Layer,即安全套接層協議,是爲網絡通信提供安全及數據完整性的一種安全協議。TLS的全稱是Transport Layer Security,即安全傳輸層協議。
HTTPS是安全的HTTP

二、HTTPS的連接建立流程

HTTPS爲了兼顧安全與效率,同時使用了對稱加密和非對稱加密。在傳輸的過程中會涉及到三個密鑰:

服務器端的公鑰和私鑰,用來進行非對稱加密

客戶端生成的隨機密鑰,用來進行對稱加密
在這裏插入圖片描述

如上圖,HTTPS連接過程大致可分爲八步:

1、客戶端訪問HTTPS連接。

客戶端會把安全協議版本號、客戶端支持的加密算法列表、隨機數C發給服務端。

2、服務端發送證書給客戶端

服務端接收密鑰算法配件後,會和自己支持的加密算法列表進行比對,如果不符合,則斷開連接。否則,服務端會在該算法列表中,選擇一種對稱算法(如AES)、一種公鑰算法(如具有特定祕鑰長度的RSA)和一種MAC算法發給客戶端。
服務器端有一個密鑰對,即公鑰和私鑰,是用來進行非對稱加密使用的,服務器端保存着私鑰,不能將其泄露,公鑰可以發送給任何人。
在發送加密算法的同時還會把數字證書和隨機數S發送給客戶端

3、客戶端驗證server證書

會對server公鑰進行檢查,驗證其合法性,如果發現發現公鑰有問題,那麼HTTPS傳輸就無法繼續。

4、客戶端組裝會話祕鑰

如果公鑰合格,那麼客戶端會用服務器公鑰來生成一個預主祕鑰(Pre-Master Secret,PMS),並通過該預主祕鑰和隨機數C、S來組裝成會話祕鑰

5、客戶端將預主祕鑰加密發送給服務端

是通過服務端的公鑰來對預主祕鑰進行非對稱加密,發送給服務端

6、服務端通過私鑰解密得到預主祕鑰

服務端接收到加密信息後,用私鑰解密得到預主祕鑰。

7、服務端組裝會話祕鑰

服務端通過預主祕鑰和隨機數C、S來組裝會話祕鑰。
至此,服務端和客戶端都已經知道了用於此次會話的主祕鑰。

8、數據傳輸

客戶端收到服務器發送來的密文,用客戶端會員密鑰對其進行對稱解密,得到服務器發送的數據。
同理,服務端收到客戶端發送來的密文,用服務端會員密鑰對其進行對稱解密,得到客戶端發送的數據。

總結:

會話祕鑰 = random S + random C + 前主祕鑰

HTTPS連接建立過程使用非對稱加密,而非對稱加密是很耗時的一種加密方式

後續通信過程使用對稱加密,減少耗時所帶來的性能損耗

其中,對稱加密加密的是實際的數據非對稱加密加密的是對稱加密所需要的客戶端的密鑰。

三、對稱加密和非對稱加密

1、對稱加密

用同一套密鑰來進行加密解密。
對稱加密通常有 DES,IDEA,3DES 加密算法。

2、非對稱加密

用公鑰和私鑰來加解密的算法。
公鑰(Public Key)與私鑰(Private Key)是通過一種算法得到的一個密鑰對(即一個公鑰和一個私鑰),公鑰是密鑰對中公開的部分,私鑰則是非公開的部分,私鑰通常是保存在本地。

用公鑰進行加密,就要用私鑰進行解密;反之,用私鑰加密,就要用公鑰進行解密(數字簽名)。

由於私鑰是保存在本地的,所以非對稱加密相對與對稱加密是安全的。
但非對稱加密比對稱加密耗時(100倍以上),所以通常要結合對稱加密來使用。

常見的非對稱加密算法有:RSA、ECC(移動設備用)、Diffie-Hellman、El Gamal、DSA(數字簽名用)

而爲了確保客戶端能夠確認公鑰就是想要訪問的網站的公鑰,引入了數字證書的概念,由於證書存在一級一級的簽發過程,所以就出現了證書鏈,在證書鏈中的頂端的就是根CA。

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