為什麼 TLS-PSK 的 TLS 規範說不要從密碼中獲取共享密鑰?
根據 TLS 1.3 規範( RFC 8446)第 2.2 節末尾的註釋,
當使用帶外預置的預共享密鑰時,一個關鍵的考慮因素是在密鑰生成期間使用足夠的熵,如 [ RFC4086 ] 中所述。從密碼或其他低熵源中獲取共享機密是不安全的。低熵秘密或密碼會受到基於 PSK 綁定器的字典攻擊。即使與 Diffie-Hellman 密鑰建立一起使用,指定的 PSK 身份驗證也不是基於強密碼的身份驗證密鑰交換。具體來說,它不會阻止可以觀察到握手的攻擊者對密碼/預共享密鑰執行暴力攻擊。
這里關注的漏洞是觀察握手將允許攻擊者基於 PSK 綁定器暴力破解共享秘密離線嗎?
而且,如果攻擊者可以恢復共享密鑰,那麼之前觀察到的 TLS-PSK 流的機密性是否會受到損害?或者這只允許攻擊者破壞未來的流(例如通過欺騙伺服器和/或客戶端作為中間人?)
這里關注的漏洞是觀察握手將允許攻擊者基於 PSK 綁定器暴力破解共享秘密離線嗎?
有時; TLS 1.3 有兩種方式與 PSK 協商;僅使用 PSK,或使用 PSK 和 (EC)DH。如果使用(EC)DH,這里關注的漏洞是客戶端(最初不知道 PSK)將能夠嘗試與伺服器協商,並且作為該交換的結果,執行離線測試在大量可能的 PSK 上。另一方面,如果只使用 PSK,那麼是的,被動攻擊者可以通過並測試各種 PSK(然後解密加密數據)。
當使用 (EC)DH 時,攻擊客戶端會做的是向客戶端發送問候(帶有適當的 pre_shared_key 標識符和誠實的 DH 密鑰共享,即他知道私有值的密鑰);伺服器將響應伺服器問候,然後是“加密擴展”。
此加密擴展使用基於客戶端知道的內容(隨機數、DH 共享密鑰)和 PSK 的密鑰進行加密。客戶端可以做什麼,對於 PSK 的每次猜測,將其插入(使用他已經知道的輸入)到 TLS 1.3,並派生相應的會話密鑰,然後使用該密鑰驗證加密擴展中的身份驗證標籤.
一旦他找到一個使認證標籤生效的 PSK,他就可以使用該 PSK 在未來的交換中偽裝成客戶端或伺服器(或進行活動 MITM)。
或者這只允許攻擊者破壞未來的流(例如通過欺騙伺服器和/或客戶端作為中間人?)
TLS 1.3 允許僅 PSK 模式或 PSK 以及 (EC)DH 交換。如果選擇僅 PSK 模式,則攻擊者可以被動監聽。如果客戶端決定執行 PSK 加 (EC)DH,則攻擊者無法被動監聽未來(或過去)流;這僅允許主動攻擊。