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 — Формирует HKDF-ключ из исходного ключа
algo
Название алгоритма хеширования (например, "sha256"
).
Список алгоритмов, которые поддерживает функция, приводит описание функции hash_hmac_algos().
Замечание:
Некриптографические хеширующие функции не допускаются.
key
Входные данные (необработанные двоичные данные). Нельзя оставлять пустым.
length
Выбранная длина вывода в байтах. Не может превышать размер хеш-функции более чем в 255 раз.
Если для параметра length
установили значение 0
,
длина вывода по умолчанию будет равна размеру выбранной хеш-функции.
info
Информационная строка, специфичная для приложения или контекста.
salt
Соль для формирования ключа.
Хотя добавление произвольной соли необязательно, оно значительно повышает прочность HKDF-ключа.
Функция возвращает строку, которая содержит необработанное двоичное представление производного ключа (которое также знают как выходной ключевой материал — OKM).
Функция выбрасывает исключение ValueError, если параметр key
пуст,
в параметре algo
указали неизвестный или некриптографический
алгоритм, параметр length
меньше 0
или
чрезмерно большой (более чем в 255 раз превышает размер хеш-функции).
Версия | Описание |
---|---|
8.0.0 |
Теперь выбрасывается исключение ValueError, если возникла ошибка;
раньше выдавалась ошибка уровня E_WARNING и возвращалось значение false .
|
Пример #1 Пример использования функции hash_hkdf()
<?php
// Генерируем случайный ключ и соль для усиления процесса формирования
$inputKey = random_bytes(32);
$salt = random_bytes(16);
// Формируем пару разных ключей с одними и теми же входными данными
$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)
?>
В приведённом примере создаётся пара отдельных ключей, которые подходят для создания конструкции «зашифровать, затем сформировать ключ HMAC» (encrypt-then-HMAC) через алгоритм AES-256 для шифрования и алгоритм SHA-256 для аутентификации.
Make sure the info parameter contains random elements.
From: https://soatok.blog/2021/11/17/understanding-hkdf/