Extract verdichtet das Eingabeschlüsselmaterial mit einem Salt zu einem pseudozufälligen Schlüssel PRK = HMAC(salt, IKM); Expand dehnt diesen zu Ausgabeschlüsselmaterial OKM = T(1) ‖ T(2) ‖ … mit T(i) = HMAC(PRK, T(i−1) ‖ info ‖ i), bis zu 255 Hashlängen (8.160 Byte mit SHA-256). Der String info trennt Schlüssel für unterschiedliche Zwecke, sodass ein Geheimnis nie zweimal denselben Schlüssel ergibt.
Der gesamte Key Schedule von TLS 1.3 ist HKDF mit Labels (HKDF-Expand-Label, RFC 9846 §7.1); auch HPKE, Signal, Noise, MLS und QUIC nutzen es, und NIST lässt dieselbe zweistufige Konstruktion in SP 800-56C Rev. 2 zu.
HKDF ist kein Passwort-Hash: Es ist absichtlich schnell, deshalb schützt es ein Passwort mit wenig Entropie nicht gegen Erraten. Nutze Argon2id, scrypt oder PBKDF2 für Passwörter und HKDF für Geheimnisse mit hoher Entropie.