PHP 8.5.0 Beta 2 available for testing

hash_hkdf

(PHP 7 >= 7.1.2, PHP 8)

hash_hkdfGenera una derivación de clave HKDF a partir de una clave de entrada proporcionada

Descripción

hash_hkdf(
    string $algo,
    #[\SensitiveParameter] string $key,
    int $length = 0,
    string $info = "",
    string $salt = ""
): string

Parámetros

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.

key

Material de clave de entrada (binario sin tratar). No puede estar vacío.

length

Longitud 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.

info

String de información específica de la aplicación/contexto.

salt

Salt a utilizar durante la derivación.

Aunque es opcional, añadir un salt aleatorio mejora significativamente la robustez de HKDF.

Valores devueltos

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).

Errores/Excepciones

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).

Historial de cambios

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.

Ejemplos

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)
?>

add a note

User Contributed Notes 1 note

up
1
landers dot robert at gmail dot com
3 years ago
Make sure the info parameter contains random elements.

From: https://soatok.blog/2021/11/17/understanding-hkdf/
To Top