(PHP 7 >= 7.1.2)
hash_hkdf — Génère une dérivation de clé HKDF Generate depuis une clé fournis
$algo
, string $ikm
[, int $length = 0
[, string $info = ''
[, string $salt = ''
]]] ) : string
algoNom de l'algorithme de hachage sélectioné (par exemple : "sha256", "sha512", "haval160,4", etc...) Voir hash_algos() pour une liste d'algorithmes supporté.
Note:
Les fonctions de hachages qui ne sont pas cryptographique sont interdite.
ikmDonnées (Input keying material) en binaire qui serviront au clavetage. Ne peut pas être vide.
lengthLongueur désiré 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 function de hachage choisie
infoInformation sous forme de chaîne de caractères spécifique à l'Application/contexte.
saltSel à utiliser lors de la dérivation.
Bien qu'optionel, ajouté un sel aléatoire augmente de façon significative la robustesse de HKDF.
Retourne un chaîne de caractères contenant une représentation binaire brut de la clé dérivé
(aussi connue sous le nom de output keying material - OKM) ; ou FALSE en cas d'échec.
Une E_WARNING sera émise si ikm
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).
Exemple #1 Exemple avec hash_hkdf()
<?php
// Génère une clé aléatoire, et un sel pour la renvorcer lors de la dérivation.
$inputKey = random_bytes(32);
$salt = random_bytes(16);
// Dérive une paire de clés séparé, utilisant les mêmes données crée 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é, 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.