密鑰協商機制
https://www.cnblogs.com/-9-8/p/7985989.html
密鑰協商機制,主要來得到通信雙方的臨時會話密鑰。主要的方式有:
一、依靠非對稱加密(公鑰)算法; RSA,ECC等。
防偷窺,防篡改。
拿到對方公鑰的一方隨機產生會話密鑰,利用公鑰加密,通信使用加密後的信息,通信另一方用私鑰進行解密,
這樣通信雙方都拿到會話密鑰。
二、專用的密鑰交換算法; DH,ECDH等。
DHE,ECDHE等。
防偷窺,不防篡改。
只交換產生密鑰的部分數據,各自保證可以產生相同的數據。
三、依靠共享的secret; PSK,SRP等。
雙方依靠共享的信息,直接通過相同的kdf function來產生同一密鑰。
術語:篡改,中間人攻擊,---Man In The middle attack,MIMT。
一、依靠RSA或ECC公鑰算法
1.1 基於RSA的密鑰協商的過程:
1)客戶端連上服務器;
2)服務器發送CA證書給客戶端;
3)客戶端驗證該證書的可靠性;
4)客戶端從CA證書中拿到公鑰;
5)客戶端生成一個隨機密鑰K,用公鑰加密得到K'
6)客戶端將K'發送給服務器;
7)服務器得到K'之後,用自己的私鑰解密得到K;
(基於RSA的密鑰協商的過程是早期的SSLv2使用的一種密鑰協商機制;)
1.2 基於ECC的密鑰協商過程:
整體流程相同,但是ECC並不是直接對msg進行加解密,而是將公鑰經過hash算法,之後與msg做異或運算。
二、基於DH/ECDH/DHE/ECDHE算法的密鑰協商:
2.1 DH
DH本身是基於離散對數分解問題的,算法過程與進行兩次的RSA類似,
最原始的DH算法並不能對抗MIMT(中間人攻擊),所以一般需要配合簽名技術:
- 不配合簽名技術的DH稱爲
DH-ANON
; - 配合RSA簽名的稱爲
DH-RSA
; - 配合DSA簽名的稱爲
DH-DSA
; - 配合ECDSA簽名的稱爲
DH-ECDSA
;
DH協商流程:
- 客戶端連接上服務器;
- 服務器端生成一個隨機數S作爲自己的私鑰,做模冪運算之後,得到公鑰;
- 服務器,選擇RSA,ECDSA,DSA的一種,對模冪運算的參數,以及公鑰進行簽名,併發送給客戶端; 防止服務器被篡改
- 客戶端驗證簽名是否有效; 客戶端並不會對簽名進行解密,DH的特性,雙方只交換公鑰,只做加密操作;
- 客戶端也產生一個隨機數C,加密之後,將公鑰傳給服務器;
- 客戶和服務器,根據得到的公鑰產生同一個會話密鑰;
2.2 ECDH
DH算法的變種==>ECDH算法,數學原理,變爲橢圓曲線上的離散對數的分解問題;
ECDH算法與DH算法類似,但是基礎運算由模冪運算,變爲點乘運算,同樣不能防止MIMT(中間人攻擊);
需要和其他的簽名算法RSA,DSA,ECDSA配合;
2.3 DHE和ECDH
前向保密,forward security,最初用來定義會話密鑰交換協議的一種安全性:即使長期密鑰已經泄露,也不會影響之前的會話密鑰的泄露;也就不會暴露之前的會話內容
DH和ECDH算法爲了實現前向安全,變種加入了另一個隨機變量,ephemeral key,得到新的算法,DHE,ECDHE,
RSA和DH,DSA都是基於整數有限域離散對數來實現;
ECC和ECDH,都是基於橢圓曲線的離散對數難題來實現的;
DSA相比較與RSA,DSA只能用作簽名,並且p,q公開,簽名輸出r和s,兩個字符串。
三、給予PSK預共享密鑰協商通訊密鑰
- PSK
- PSK-RSA
- PSK-ECDSA?
3.2 PSK相關的RFC文檔
- RFC 4279: "Pre-Shared Key Ciphersuites for Transport Layer Security (TLS)".
- RFC 4785: "Pre-Shared Key (PSK) Ciphersuites with NULL Encryption for Transport Layer Security (TLS)".
- RFC 5487: "Pre-Shared Key Cipher Suites for TLS with SHA-256/384 and AES Galois Counter Mode".
- RFC 5489: "ECDHE_PSK Cipher Suites for Transport Layer Security (TLS)".
四、附錄: SSL/TLS對各個算法的支持;
SSL/TLS對各個算法的支持