El paso de extracción (Extract) comprime el material de claves de entrada con una sal en una clave pseudoaleatoria PRK = HMAC(salt, IKM); el de expansión (Expand) la estira hasta el material de claves de salida OKM = T(1) ‖ T(2) ‖ … con T(i) = HMAC(PRK, T(i−1) ‖ info ‖ i), hasta 255 longitudes de hash (8160 bytes con SHA-256). La cadena info separa las claves para distintos fines, de modo que un mismo secreto nunca produzca dos veces la misma clave.
Todo el key schedule de TLS 1.3 es HKDF con etiquetas (HKDF-Expand-Label, RFC 9846 §7.1); HPKE, Signal, Noise, MLS y QUIC también la usan, y el NIST aprueba la misma construcción en dos pasos en SP 800-56C Rev. 2.
HKDF no es un hash de contraseñas: es rápida por diseño, así que pasarle una contraseña de baja entropía no protege contra los intentos de adivinarla. Usa Argon2id, scrypt o PBKDF2 para las contraseñas y HKDF para los secretos de alta entropía.