Voi aborda doar partea HKDF.
HKDF a fost introdus în următoarea lucrare: https://eprint.iacr.org/2010/264.pdf
În acest context, HMAC este utilizat în două scopuri oarecum distincte: 1) extragerea aleatorie și 2) PRF cu lungime variabilă (intrare/ieșire).
Schimbarea cheii are loc pentru extragerea aleatorie. Situația aici este că ni se oferă un material de cheie $IKM$ care nu este aleatoriu (pseudo)uniform și doriți să creați o cheie $PRK$ adică pseudoaleatoare (adică, nu se poate distinge din punct de vedere computațional de aleatoriu).
După cum ați observat, HMAC este, de asemenea, dovedit a fi un PRF. Cu toate acestea, nu ne putem baza pe securitatea PRF pentru a argumenta securitatea $PRK$. Dar lucrarea susține că această utilizare a HMAC este potrivită pentru furnizarea unui extractor de calcul aleatoriu (a se vedea secțiunea 6).
Vorbind despre PRF, un lucru interesant de remarcat este că unele dovezi de securitate, cum ar fi TLS, se bazează de fapt pe așa-numita ipoteză PRF-ODH (https://eprint.iacr.org/2017/517.pdf). Când se aplică utilizării HKDF în TLS: reamintim că cele două părți schimbă acțiuni DH $(g^x, g^y)$; ipoteza (on varianta) spune aproximativ că: funcția $F(K, X) = HMAC (X, K) $ este un PRF în ipoteza că funcția de compresie de bază este un oracol aleatoriu; chiar dacă atacatorului i s-a dat acces la un oracol $\mathcal{O}(T,v) = F (T^x, v) $. (Omis aici: restricții privind valorile $(T,x)$ și numărul maxim de interogări).
Rețineți că funcția $F$ de mai sus are spațiu pentru taste $\langle G \rangle$, grupul folosit pentru schimbul DH. Deci avem de-a face cu o cheie aleatorie uniformă pe spațiul cheie în contextul PRF-ODH.
P.S: luați în considerare și să citiți acest răspuns https://crypto.stackexchange.com/a/30461/58690