hash_hkdf

(PHP 7 >= 7.1.2, PHP 8)

hash_hkdfGenera una derivación de clave HKDF desde una clave proporcionada

Descripción

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

Parámetros

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.

Valores devueltos

Devuelve un string que contiene una representación binaria en bruto de la clave derivada (también conocida como output keying material - 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 de hash).

Historial de cambios

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.

Ejemplos

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.

Ver también

add a note

User Contributed Notes 1 note

To Top