Tls

在 TLS 1.3 中,非 PSK 派生密鑰計劃中的 Binder Key 是否始終是一致的值?

  • July 19, 2021

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 binderor res binder)。

我的解釋正確嗎?如果是這樣,那麼密鑰調度的輸出密鑰之一永遠不會改變,這怎麼不降低安全性呢?

綁定器密鑰僅用於PSK 綁定器,它

形成 PSK 和目前握手之間的綁定,以及建立 PSK 的會話和目前會話之間的綁定。

如果沒有以前的會話來建立 PSK,就沒有什麼可以綁定的。沒有 PSK 綁定到目前握手,也沒有建立 PSK 的先前會話。因此,當不使用 PSK 時,綁定密鑰恆定的,因為它僅用於確保客戶端知道伺服器儲存的相同 PSK。

引用自:https://crypto.stackexchange.com/questions/92141