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.
keyMaterial de chaveamento de entrada (binário bruto). Não pode estar vazio.
lengthComprimento 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.
infoString de informação específica da aplicação/contexto.
saltSalt 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.
|
O exemplo abaixo 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.
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)
?>
Make sure the info parameter contains random elements.From: https://soatok.blog/2021/11/17/understanding-hkdf/