CakeFest 2024: The Official CakePHP Conference

hash_hkdf

(PHP 7 >= 7.1.2, PHP 8)

hash_hkdfGénère une dérivation de clé HKDF depuis une clé fournie

Description

hash_hkdf(
    string $algo,
    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", "sha512", "haval160,4", etc...) Voir hash_algos() pour une liste d'algorithmes supportés.

Note:

Les fonctions de hachages qui ne sont pas cryptographiques sont interdites.

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

add a note

User Contributed Notes 1 note

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

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