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

# hash_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

### Descripción

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

### Ver también

- hash_pbkdf2() - Genera una clave PBKDF2 derivada de la contraseña proporcionada
- » RFC 5869
- » implementación en espacio de usuario

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open