hash_hkdf în PHP

Securitate și hash PHP 7.1.2+

Derivă una sau mai multe chei separate dintr-o cheie de bază puternică, cu algoritmul HKDF.

Sintaxă
hash_hkdf(string $algo, string $key, int $length = 0, string $info = '', string $salt = ''): string

Ce face hash_hkdf

HKDF (RFC 5869) pornește de la o cheie secretă deja puternică (generată aleatoriu, nu o parolă) și produce chei noi pentru scopuri diferite. Parametrul $info diferențiază cheile: aceeași cheie de bază cu "criptare" și cu "semnare" dă două chei independente.

Rezultatul este mereu binar. Pentru parole introduse de oameni nu folosi HKDF, ci password_hash sau hash_pbkdf2.

Parametri

Parametru Descriere
$algo Algoritmul, de exemplu "sha256".
$key Cheia de bază, nevidă.
$length Opțional. Lungimea în octeți; 0 înseamnă lungimea algoritmului (32 pentru sha256).
$info Opțional. Eticheta scopului cheii.
$salt Opțional. Sare, recomandată.

Ce returnează

Cheia derivată, binară.

Exemple

Exemplul 1: Două chei din aceeași cheie principală

<?php
$principala = "cheie-principala-de-32-octeti!!";

$criptare = hash_hkdf("sha256", $principala, 32, "criptare", "sare");
$semnare = hash_hkdf("sha256", $principala, 32, "semnare", "sare");

echo bin2hex($criptare) . "\n";
echo bin2hex($semnare) . "\n";
var_dump($criptare === $semnare);

Rezultat

b074e5d913880f2bbd134d568a650f78c0317feafcb193455248beeeb216bb90
0ce88f70e7a2e1761f8c042aa1f4ce596c0b8cc737086c7b403ff0b241e273a9
bool(false)

Greșeli frecvente

  • Afișezi sau salvezi direct rezultatul ca text. Este binar; transformă-l cu bin2hex sau base64_encode.

Comenzi înrudite

  • hash_pbkdf2: Derivă o cheie dintr-o parolă cu algoritmul PBKDF2: multe iterații de HMAC, ca să încetinească ghicirea parolei.
  • hash_hmac / hash_equals: Calculează o semnătură HMAC: o amprentă care depinde și de o cheie secretă. Dovedește că datele nu au fost modificate.
  • random_int: Generează un număr întreg aleatoriu, sigur, între două valori.