Tôi sẽ chỉ giải quyết phần HKDF.
HKDF đã được giới thiệu trong bài báo sau: https://eprint.iacr.org/2010/264.pdf
Trong bối cảnh này, HMAC được sử dụng cho hai mục đích hơi khác nhau: 1) trích xuất ngẫu nhiên và 2) PRF độ dài biến đổi (đầu vào/đầu ra).
Trao đổi khóa xảy ra để trích xuất ngẫu nhiên. Tình huống ở đây là chúng tôi được cung cấp một tài liệu khóa $IKM$ đó không phải là ngẫu nhiên thống nhất (giả) và muốn tạo khóa $PRK$ đó là giả ngẫu nhiên (nghĩa là không thể phân biệt về mặt tính toán với ngẫu nhiên).
Như bạn đã lưu ý, HMAC cũng được hiển thị là PRF. Tuy nhiên, chúng ta không thể dựa vào bảo mật PRF để tranh luận về bảo mật của $PRK$. Nhưng bài báo lập luận rằng việc sử dụng HMAC này là phù hợp để cung cấp một trình trích xuất tính toán ngẫu nhiên (xem phần 6).
Nói về PRF, một điều thú vị cần lưu ý là một số bằng chứng bảo mật, như TLS, thực sự dựa trên cái gọi là giả định PRF-ODH(https://eprint.iacr.org/2017/517.pdf). Khi áp dụng cho việc sử dụng HKDF trong TLS: nhớ lại việc hai bên trao đổi cổ phiếu DH $(g^x, g^y)$; giả định (về biến thể của) đại khái nói rằng: hàm $F(K, X) = HMAC (X, K) $ là một PRF theo giả định rằng chức năng nén cơ bản là một lời tiên tri ngẫu nhiên; ngay cả khi kẻ tấn công được cấp quyền truy cập vào một lời tiên tri $\mathcal{O}(T,v) = F (T^x, v) $. (Bỏ qua ở đây: hạn chế về giá trị của $(T,x)$ và số truy vấn tối đa).
Lưu ý ở đây rằng chức năng $F$ ở trên có keyspace $\langle G \rangle$, nhóm dùng để trao đổi DH. Vì vậy, chúng tôi đang xử lý một khóa ngẫu nhiên thống nhất trên không gian khóa trong ngữ cảnh PRF-ODH.
P.S: cũng cân nhắc đọc câu trả lời này https://crypto.stackexchange.com/a/30461/58690