Tls
TLS1.2 中 GCM 隨機數的正確用法是什麼?
我在 C# 庫的充氣城堡的幫助下編寫了一個程序。
我正在監視客戶端和伺服器之間發送的流量,並發現了一些(我發現)奇怪的東西。客戶端使用以下密碼套件將應用程序數據發送到伺服器:TLS_PSK_WITH_AES_128_GCM_SHA256。GCM 隨機數從 1 開始,然後伺服器用隨機數 1 發回數據,然後客戶端用隨機數 2 發送數據,伺服器用隨機數 2 發回,等等。
它是否正確?隨機數不應該永遠不會相同兩次嗎?那麼伺服器不應該用nonce 2而不是1來響應嗎?
TLS 對兩個不同的方向有不同的密鑰。也就是說,伺服器到客戶端的連接使用一組密鑰加密,客戶端到伺服器的連接使用另一組密鑰加密。兩組密鑰是同時派生的,但它們是不同的。
因為鍵是不同的,所以使用相同的 nonce 不是問題。
實際上並沒有改變答案的技術點:實際上,通過網路發送的實際上是隨機數的後 64 位;當我們生成密鑰時,也會派生 32 位隨機數。當然,可能會為兩個方向選擇相同的 32 位。另一方面,即使他們這樣做,如上所述,這種碰撞也是無害的(除非鍵也發生碰撞)