與 DH 的 TLS 握手
我嘗試了解與 DH 的 TLS 握手。我用Google搜尋了這些概念,我想我理解了基礎知識。但有些事情我仍在苦苦掙扎。我還閱讀了以下兩篇文章為什麼 SSL/TLS 握手有客戶端隨機?為什麼 SSL/TLS 握手有客戶端和伺服器隨機?
我不明白客戶端隨機、伺服器隨機、pre-master-secret 和 master-secret 與 DH 參數的關係。
Client-Public-DH-Value A (A = g^a mod p) 是否與 pre-master-secret 相同?並且主密鑰與 DH 密鑰/會話密鑰 s (s = A^a mod p) 相同?
有很多圖像,例如Wikipedia,但我看不到這些步驟之間的關係。
Meta:雖然兩者都是合理的,但我實際上認為這個 Q 比加密更適合安全性。是因為它可能 ….
在https://security.stackexchange.com/questions/81597/in-psk-tls-how-is-the-key-used-for-encryption-derived(由RoraZ建議)中,從 premaster 到 master 到工作的步驟是適用,但 premaster 步驟(即使對於 DH_PSK)與正常的 DH 密鑰交換不同,而且 TLS1.0 已過時。 SSL/TLS 中預主密鑰的目的是什麼? 以及SSL/TLS 中客戶端和伺服器共享的四個不同秘密的目的是什麼?同樣關注後面的步驟,儘管前者確實提到了 (EC)DH。
所以把它擺出來:
- 兩個對等點的公鑰和私鑰值只是密鑰。TLS 規範使用符號,其中 X 是私鑰,Y = G^X mod P 是公鑰,加上擁有密鑰的一方的標識符:dh_Ys 是伺服器公鑰,dh_Yc 是客戶端公鑰。
儘管 TLS 對此並不謹慎,但實際上一方面參數P、G 之間存在區別,這些參數必須在 TLS 對等方之間共享,並且可以在更大範圍內(例如組織或社區)共享,另一方面,在另一方面,密鑰(對)的X,Y 對於一個對等方來說應該是唯一的並且不共享,對於臨時 DH(首選類型)應該進一步對一個會話來說是唯一的並且不儲存。
在迄今為止的 TLS 中(儘管草案 1.3 建議更改這一點),伺服器選擇組(參數),並在該組中臨時生成伺服器密鑰對;客戶端在同一組中為臨時生成其密鑰對。
- DH協議值作為premaster secret;請參閱RFC5246 秒 8.1.2。使用 TLS 表示法,這是 Ys^Xc(在客戶端計算)或 Yc^Xs(在伺服器計算)。對於其他密鑰交換方法,此步驟(非常)不同。
- premaster secret 加上兩個 nonce(client_random 和 server_random)用於根據8.1導出主密鑰,然後使用 master secret 和 nonces 導出每個6.3的工作密鑰。在重新協商的情況下,使用來自第二次握手的新隨機數重複第二次推導(從主密鑰到工作密鑰),參見F.1.4。這些步驟對於所有密鑰交換方法都是相同的。
兩個密鑰派生步驟都使用現在稱為“偽隨機函式”的 PRF。與其他步驟不同,這在協議版本之間有所不同:SSL3 使用嵌套的 MD5 和 SHA1(並且沒有將其標記為 PRF),TLS1.0 和 1.1 使用雙倍的 HMAC-MD5 和 HMAC-SHA1,而 TLS1.2 使用雙倍的 HMAC可以為每個密碼套件選擇的雜湊值,但到目前為止始終是 SHA-256 或 SHA-384。