Ключевое расписание в TLS 1.3 RFC начинается так:
0
|
в
PSK -> HKDF-Extract = ранний секрет
|
+-----> Derive-Secret(., "ext binder" | "res binder", "")
| = связующий_ключ
|
+-----> Derive-Secret(., "c e traffic", ClientHello)
| = client_early_traffic_secret
|
+-----> Derive-Secret(., "e exp master", ClientHello)
| = Early_exporter_master_secret
...
Далее в разделе 7.1, в RFC содержится руководство о том, что использовать в качестве замещающего значения для PSK, если предварительный общий ключ фактически не используется:
Если данный секрет недоступен, то 0-значение, состоящее из
используется строка байтов Hash.length, установленная в нули. Обратите внимание, что это
не означает пропуск раундов, поэтому, если PSK не используется, Early Secret
по-прежнему будет HKDF-Extract(0, 0).
client_early_traffic_secret
и Early_exporter_master_secret
включить хэш расшифровки приветствия клиента, который включает случайное число, сгенерированное клиентом. Таким образом, эти два ключа будут разными для каждого сеанса SSL.
Однако binder_key
не включает в себя хэш расшифровки. Что значит (в моей интерпретации), единственные значения, поступающие в binder_key
секрет оба известный всем и никогда не меняется (0 в качестве начального значения, 000...0 в качестве замены PSK и метки констант доб. связующее
или же связующее вещество
).
Я правильно это интерпретирую? Если да, то как это не снижает безопасность, если один из выходных секретных ключей расписания ключей никогда не меняется?