【網絡協議】【http】【https】ECDHE-TLS1.2
ECDHE算法
1.客戶端和服務器端事先確定好使用哪種橢圓曲線,和曲線上的基點G,這兩個參數都是公開的,
雙方各自隨機生成一個隨機數作為私鑰d,并與基點 G相乘得到公鑰Q(Q=dG),此時客戶端的公鑰Q1, 私鑰
d1,服務器的公鑰 Q2,私鑰d2
雙方交換各自的公鑰,最后客戶端計算點(x1,y1)=d1Q2,服務器計算點(x2,y2)=d2Q1,由于橢
圓曲線上是可以滿足乘法交換和結合律,所以 d1Q2=d1d2G=d2d1G=d2Q1
因此雙方的x坐標是一樣的,所以它是共享密鑰,也就是會話密鑰生成材料。(會話密鑰根據客戶端隨機數,服務器端隨機數 以及x生成)
ECDHE生成會話密鑰
1.客戶端
客戶端向服務器發送一個“ClientHello”消息
客戶端支持的協議版本。
客戶端支持的密碼套件(密鑰交換算法+簽名算法+對稱加密算法+摘要算法)列表。
客戶端生成的一個隨機數(Client Random)
2.服務器
服務器收到客戶端消息后,返回一個“ServerHello”消息
服務器選擇的協議版本。
服務器從客戶端提供的密碼套件列表中選定的密碼套件。
服務器生成的一個隨機數(Server Random)
服務器會發送自己的數字證書,供客戶端驗證服務器的身份。
服務器發送【server key Exchange】消息(這里的消息會進行簽名 因為這個數據不能出錯,需要證明可靠性)生成橢圓曲線Diffie-Hellman(ECDH)的公鑰(d2),私鑰(Q2)對,并將公鑰Q2發送給客戶端。
3.客戶端身份驗證與密鑰生成:
客戶端收到服務器的數字證書后,會驗證證書的有效性,確保服務器的身份可信。
客戶端也有自己的ECDH密鑰公鑰(d1),私鑰(Q1),并將公鑰Q1發送給服務端。通過ECDHE算法,與服務器的公鑰(Q2)以及雙方的私鑰數生成一個共享的秘密密鑰x。
密鑰派生:
客戶端和服務器各自基于雙方生成的共享密鑰x以及客戶端隨機數,服務端隨機數,生成最終的會話密鑰。
消息認證:
客戶端使用會話密鑰加密之前發送的所有數據的摘要,并發送給服務器進行驗證。
4.服務器同樣驗證摘要,確認無誤后,雙方進入安全的數據通信階段。
后續會說明一下session ticket,session id 和TLS1.3,以及基于TLS1.3的QUIC
但是由于TLS1.3及其后續資料沒有確切規范,說什么的都有,如有問題,希望大佬指出,并能給出我參考資料 那將萬分感謝!
部分轉自:https://zhuanlan.zhihu.com/p/686461033
部分轉自:https://www.cnblogs.com/ToTigerMountain/articles/18220849