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 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.
key
Datos (Input keying material) en binario que servirán para el clavetage. No puede estar vacío.
length
Longitud 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.
info
Información en forma de string específica de la aplicación/contexto.
salt
Sal 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.
Make sure the info parameter contains random elements.
From: https://soatok.blog/2021/11/17/understanding-hkdf/