Make sure the info parameter contains random elements.
From: https://soatok.blog/2021/11/17/understanding-hkdf/
(PHP 7 >= 7.1.2, PHP 8)
hash_hkdf — Gera uma derivação de chave HKDF de uma entrada de chave fornecida
algo
Nome do algoritmo de hash selecionado (por exemplo, "sha256"
).
Para uma lista de algoritmos suportados, veja hash_hmac_algos().
Nota:
Funções de hash não criptográficas não são permitidas.
key
Material de chaveamento de entrada (binário bruto). Não pode estar vazio.
length
Comprimento de saída desejado em bytes. Não pode ser maior que 255 vezes o tamanho da função hash escolhida.
Se length
for 0
, o comprimento de saída
será definido como padrão para o tamanho da função hash escolhida.
info
String de informação específica da aplicação/contexto.
salt
Salt a ser usado na derivação.
Embora opcional, adicionar salt aleatório melhora significativamente a força do HKDF.
Retorna uma string contendo uma representação binária bruta da chave derivada (também conhecida como material de chaveamento de saída - OKM).
Lança uma exceção ValueError se key
estiver vazio, algo
for desconhecido ou não criptográfico,
length
for menor que 0
ou muito grande
(maior que 255 vezes o tamanho da função hash).
Versão | Descrição |
---|---|
8.0.0 |
Agora lança uma exceção ValueError em caso de erro.
Anteriormente, false era retornado e uma mensagem E_WARNING
era emitida.
|
Exemplo #1 Exemplo de hash_hkdf()
<?php
// Gera uma chave aleatória e adiciona um salt para fortalecê-la durante a derivação.
$inputKey = random_bytes(32);
$salt = random_bytes(16);
// Deriva um par de chaves separadas, usando a mesma entrada criada acima.
$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)
?>
O exemplo acima produz um par de chaves separadas, adequadas para a criação de uma construção de criptografia seguida de HMAC, usando AES-256 e SHA-256 para criptografia e autenticação, respectivamente.
Make sure the info parameter contains random elements.
From: https://soatok.blog/2021/11/17/understanding-hkdf/