Protocol-Design
TLS 1.2 中的版本回滾攻擊防護?
使用 TLS 1.2 時是否有任何方法可以防止版本回滾攻擊(除了禁用較低版本)?我已經閱讀了 TLS 1.3 如何提供嵌入在伺服器隨機隨機數中的降級保護機制。TLS 1.2 中有這樣的機制嗎?
在所有版本的 TLS 中,通過篡改 ClientHello/ServerHello 交換的回滾被 Finished 檢測並阻止。對於普通 RSA 密鑰交換,客戶端版本還被“走私”在加密的預主密鑰中,這允許更早地檢測 - 但自 2010 年代初(十幾歲?)以來,普通 RSA 大部分已被棄用或丟棄,因為它不提供前向保密. 對於在 TLS 1.0-1.2 中使用客戶端身份驗證的(所有)套件,客戶端簽名還涵蓋包括版本在內的副本,因此可以檢測回滾,但使用客戶端身份驗證是可選的且很少見。
通過導致較高版本的握手失敗來降級,從而誘導客戶端使用(並接受)較低版本的變化。
TLS 1.0-1.2通過在普通 RSA 密鑰交換(這是 SSLv2 中唯一的密鑰交換)中加密之前設置預主密鑰的低字節來指定對降級*到 SSLv2的檢查;*這是 RFC 2246 和 4346 中的 E.2 和RFC 5246 中的 E.3。但是到了上世紀中後期,當 1.1 和 1.2 被採用時,幾乎每個人/所有東西都放棄了 SSLv2,並且在 2011 年被 RFC6176 正式禁止,所以這變得沒有實際意義。(Java JSSE 直到 2011 年的 j7 預設使用來自 SSLv2 的“過渡” hello 格式,但 JSSE 從不支持實際的 SSLv2 協議。)
對於 TLS 1.0-1.2,2015 年的RFC 7507定義了一個 SCSV 來檢測降級(並在包含警報程式碼的 RFC8446 中引用)。