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", "sha512", "haval160,4" и т.д.) Список поддерживаемых алгоритмов можно посмотреть в описании функции hash_algos().
Замечание:
Не криптографические хеширующие функции не допускаются.
key
Входные данные (необработанные бинарные данные). Не может быть пустым.
length
Выбранная длина вывода в байтах. Не может быть более чем в 255 раз больше размера выбранной хеширующей функции.
Если length
установлено как 0
, то вывод
по длине будет равен размеру выбранной хеширующей функции.
info
Информационная строка, специфичная для приложения/контекста.
salt
Соль, используемая при формировании ключа.
Хотя и необязательно, но добавление случайной соли значительно улучшает силу HKDF.
Возвращает строку, содержащую необработанные бинарные данные, представляющие сформированный ключ.
Выбрасывается 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)
?>
В примере выше создана пара разных ключей, подходящих для создания конструкции encrypt-then-HMAC, используя AES-256 и SHA-256 для кодирования и аутентификации соответственно.
Make sure the info parameter contains random elements.
From: https://soatok.blog/2021/11/17/understanding-hkdf/