The Program cheie în TLS 1.3 RFC incepe asa:
0
|
v
PSK -> HKDF-Extract = Early Secret
|
+-----> Derive-Secret(., "ext binder" | "res binder", "")
| = binder_key
|
+-----> Derive-Secret(., "c e trafic", ClientHello)
| = client_early_traffic_secret
|
+-----> Derive-Secret(., "e exp master", ClientHello)
| = early_exporter_master_secret
...
Mai târziu, în Secțiunea 7.1, RFC oferă îndrumări cu privire la ce să utilizați ca valoare de înlocuire pentru PSK dacă o cheie pre-partajată nu este utilizată efectiv:
Dacă un anumit secret nu este disponibil, atunci valoarea 0 constând din a
este folosit șir de octeți Hash.length setați la zero. Rețineți că aceasta
nu înseamnă săriți peste runde, așa că dacă PSK nu este în uz, Early Secret
va fi în continuare HKDF-Extract(0, 0).
The client_early_traffic_secret
și early_exporter_master_secret
includeți un hash de transcriere a clientului Hello, care include un număr aleatoriu generat de client. Deci aceste două chei vor fi diferite pentru fiecare sesiune SSL.
Însă binder_key
nu include niciun hash de transcriere. Care înseamnă (dupa interpretarea mea), singurele valori care se alimentează în binder_key
secrete sunt ambele cunoscut de toată lumea și nu se schimbă niciodată (0 ca valoare de pornire, 000...0 ca înlocuitor pentru PSK și etichetele constantelor ext liant
sau res liant
).
Oare interpretez asta corect? Dacă da, cum nu este aceasta o reducere a securității că una dintre cheile secrete de ieșire din programul de chei nu se schimbă niciodată?