Make sure the info parameter contains random elements.From: https://soatok.blog/2021/11/17/understanding-hkdf/(PHP 7 >= 7.1.2, PHP 8)
hash_hkdf — Genera una derivación de clave HKDF a partir de una clave de entrada proporcionada
algo
Nombre del algoritmo hash seleccionado (por ejemplo, "sha256").
Para ver una lista de algoritmos soportados, consulte hash_hmac_algos().
Nota:
No se permiten funciones hash no criptográficas.
keyMaterial de clave de entrada (binario sin tratar). No puede estar vacío.
lengthLongitud deseada de la salida en bytes. No puede ser mayor que 255 veces el tamaño de la función hash elegida.
Si length es 0, la longitud de salida
será por omisión el tamaño de la función hash elegida.
infoString de información específica de la aplicación/contexto.
saltSalt a utilizar durante la derivación.
Aunque es opcional, añadir un salt aleatorio mejora significativamente la robustez de HKDF.
Devuelve un string que contiene una representación binaria sin tratar de la clave derivada (también conocida como material de clave de salida - OKM).
Lanza una excepción ValueError si key
está vacío, algo es desconocido/no criptográfico,
length es menor que 0 o demasiado grande
(mayor que 255 veces el tamaño de la función hash).
| Versión | Descripción |
|---|---|
| 8.0.0 |
Ahora lanza una excepción ValueError en caso de error.
Anteriormente, se devolvía false y se emitía un mensaje
E_WARNING.
|
El ejemplo siguiente produce un par de claves separadas, adecuadas para crear una construcción de tipo encrypt-then-HMAC, utilizando AES-256 y SHA-256 para cifrado y autenticación respectivamente.
Ejemplo #1 Ejemplo de hash_hkdf()
<?php
// Generar una clave aleatoria y un salt para fortalecerla durante la derivación.
$inputKey = random_bytes(32);
$salt = random_bytes(16);
// Derivar un par de claves separadas, utilizando la misma entrada creada arriba.
$encryptionKey = hash_hkdf('sha256', $inputKey, 32, 'aes-256-encryption', $salt);
$authenticationKey = hash_hkdf('sha256', $inputKey, 32, 'sha-256-authentication', $salt);
var_dump($encryptionKey !== $authenticationKey); // bool(true)
?>Make sure the info parameter contains random elements.From: https://soatok.blog/2021/11/17/understanding-hkdf/