(PHP 7 >= 7.1.2, PHP 8)
hash_hkdf — Genera una derivación de clave HKDF desde una clave proporcionada
algo
Nombre del algoritmo de hash seleccionado (por ejemplo: "sha256").
Para una lista de los algoritmos soportados ver hash_hmac_algos().
Nota:
Las funciones de hash no criptográficas no están permitidas.
keyDatos (Input keying material) en binario que servirán para el clavetage. No puede estar vacío.
lengthLongitud deseada de los datos de salida en octetos. No puede ser mayor que 255 veces el tamaño de la función de hash.
Si length vale 0, la longitud de los
datos de salida será por defecto el tamaño de la función de hash elegida.
infoInformación en forma de string específica de la aplicación/contexto.
saltSal a utilizar durante la derivación.
Aunque opcional, añadir una sal aleatoria aumenta significativamente la robustez de HKDF.
Devuelve un string que contiene una representación binaria en bruto de la clave derivada (también conocida como output keying material - 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 de hash).
| Versión | Descripción |
|---|---|
| 8.0.0 |
Lanza una excepción ValueError en caso de error a partir de ahora.
Anteriormente, se devolvía false y se emitía un mensaje E_WARNING.
|
Ejemplo #1 Ejemplo con hash_hkdf()
<?php
// Genera una clave aleatoria y una sal para reforzarla durante la derivación.
$inputKey = random_bytes(32);
$salt = random_bytes(16);
// Deriva un par de claves separadas, utilizando los mismos datos creados anteriormente.
$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)
?>El ejemplo anterior produce un par de claves separadas, que es adecuado para crear una construcción cifrar-entonces-HMAC (encrypt-then-HMAC), utilizando AES-256 y SHA-256 para el cifrado y la autenticación respectivamente.