Tls
在 TLS 1.3 中,非 PSK 派生密鑰計劃中的 Binder Key 是否始終是一致的值?
TLS 1.3 RFC中的Key Schedule是這樣開始的:
0 | v PSK -> HKDF-Extract = Early Secret | +-----> Derive-Secret(., "ext binder" | "res binder", "") | = binder_key | +-----> Derive-Secret(., "c e traffic", ClientHello) | = client_early_traffic_secret | +-----> Derive-Secret(., "e exp master", ClientHello) | = early_exporter_master_secret ...
稍後在第 7.1 節中,RFC 提供了有關在實際未使用預共享密鑰時使用什麼作為 PSK 替代值的指南:
If a given secret is not available, then the 0-value consisting of a string of Hash.length bytes set to zeros is used. Note that this does not mean skipping rounds, so if PSK is not in use, Early Secret will still be HKDF-Extract(0, 0).
client_early_traffic_secret
和包括客戶端問候的early_exporter_master_secret
腳本雜湊,其中包括客戶端生成的隨機數。所以這兩個密鑰對於每個 SSL 會話都是不同的。但是,
binder_key
不包括任何成績單雜湊。這意味著*(根據我的解釋)*,輸入binder_key
秘密的唯一值都是每個人都知道的並且永遠不會改變(0 作為起始值,000…0 作為 PSK 的替代品,以及常量標籤ext binder
orres binder
)。我的解釋正確嗎?如果是這樣,那麼密鑰調度的輸出密鑰之一永遠不會改變,這怎麼不降低安全性呢?
綁定器密鑰僅用於PSK 綁定器,它
形成 PSK 和目前握手之間的綁定,以及建立 PSK 的會話和目前會話之間的綁定。
如果沒有以前的會話來建立 PSK,就沒有什麼可以綁定的。沒有 PSK 綁定到目前握手,也沒有建立 PSK 的先前會話。因此,當不使用 PSK 時,綁定密鑰是恆定的,因為它僅用於確保客戶端知道伺服器儲存的相同 PSK。