Các lịch trình chính bên trong TLS 1.3 RFC bắt đầu như thế này:
0
|
v
PSK -> HKDF-Trích xuất = Bí mật sớm
|
+ -----> 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
...
Sau đó trong Phần 7.1, RFC cung cấp hướng dẫn về những gì nên sử dụng làm giá trị thay thế cho PSK nếu Khóa chia sẻ trước không thực sự được sử dụng:
Nếu một bí mật nhất định không có sẵn, thì giá trị 0 bao gồm một
chuỗi các byte Hash.length được đặt thành 0 được sử dụng. Lưu ý rằng điều này
không có nghĩa là bỏ qua các vòng, vì vậy nếu PSK không được sử dụng, Bí mật sớm
sẽ vẫn là HKDF-Extract(0, 0).
Các client_early_traffic_secret
và Early_exporter_master_secret
bao gồm hàm băm bản ghi của Xin chào khách hàng, bao gồm Số ngẫu nhiên do khách hàng tạo. Vì vậy, hai khóa này sẽ khác nhau đối với mỗi Phiên SSL.
Tuy nhiên, các binder_key
không bao gồm bất kỳ hàm băm bản ghi nào. Nghĩa là (theo diễn giải của tôi), các giá trị duy nhất đưa vào binder_key
bí mật là cả hai được mọi người biết đến và không bao giờ thay đổi (0 là giá trị bắt đầu, 000...0 là giá trị thay thế cho PSK và các nhãn không đổi chất kết dính mở rộng
hoặc chất kết dính độ phân giải
).
Tôi đang giải thích điều đó một cách chính xác? Nếu vậy, làm thế nào điều này không làm giảm tính bảo mật khi một trong các khóa bí mật đầu ra của lịch trình khóa không bao giờ thay đổi?