# hash_hkdf

(PHP 7 >= 7.1.2, PHP 8)

hash_hkdf — Génère une dérivation de clé HKDF depuis une clé fournie

### Description

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

### Liste de paramètres

`algo`

  Nom de l'algorithme de hachage sélectioné (par exemple : `"sha256"`). Pour une liste des algorithmes supportés voir hash_hmac_algos().

  > Note:

  > Les fonctions de hachage non cryptographiques ne sont pas autorisées.

`key`

  Données (Input keying material) en binaire qui serviront au clavetage. Ne peut pas être vide.

`length`

  Longueur désirée des données de sortie en octets. Ne peut être plus grand que 255 fois la taille de la fonction de hachage.

  Si `length` vaut `0`, la longueur des données de sortie sera par défaut la taille de la fonction de hachage choisie.

`info`

  Information sous forme de chaîne de caractères spécifique à l'Application/contexte.

`salt`

  Sel à utiliser lors de la dérivation.

  Bien qu'optionel, ajouté un sel aléatoire augmente de façon significative la robustesse de HKDF.

### Valeurs de retour

Retourne un chaîne de caractères contenant une représentation binaire brute de la clé dérivée (aussi connue sous le nom de output keying material - OKM).

### Erreurs / Exceptions

Lève une exception ValueError si `key` est vide, `algo` est inconnue/pas cryptographique, `length` est moins que `0` ou trop grand (plus grand que 255 fois la taille de la fonction de hachage).

### Historique

Version | Description
--- | ---
8.0.0 | Lève une exception ValueError en cas d'erreur dorénavant. Précédemment, `false` était retournée et un message `E_WARNING` était émis.

### Exemples

Exemple #1 Exemple avec hash_hkdf()

`<?php
// Génère une clé aléatoire, et un sel pour la renforcer lors de la dérivation.
$inputKey = random_bytes(32);
$salt = random_bytes(16);
// Dérive une paire de clés séparées, utilisant les mêmes données créées juste avant.
$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)
?>`

L'exemple ci-dessus produit une paire de clés séparées, qui convient à la création d'une construction chiffrer-puis-HMAC (encrypt-then-HMAC), en utilisant AES-256 et SHA-256 pour le chiffrement et l'authentification respectivement.

### Voir aussi

- hash_pbkdf2()
- » RFC 5869
- » userland implementation