(PHP 7 >= 7.1.2)
hash_hkdf — Формирования ключа HKDF для заданных входных данных
$algo
, string $ikm
[, int $length
= 0
[, string $info
= ''
[, string $salt
= ''
]]] )
algo
Имя выбранного хеширующего алгоритма (т.е. "sha256", "sha512", "haval160,4" и т.д.) Список поддерживаемых алгоритмов см. в описании функции hash_algos().
Замечание:
Не криптографические хеширующие функции не допустимы.
ikm
Входные данные (сырые бинарные данные). Не может быть пустым.
length
Выбранная длина вывода в байтах. Не может быть более чем в 255 раз больше размера выбранной хеширующей функции.
Если length
установлено как 0, то вывод
по длине будет равен размеру выбранной хеширующей функции.
info
Информационная строка специфичная для приложения/контекста.
salt
Соль, используемая при формировании ключа.
Хотя и необязательно, но добавление случайной соли значительно улучшает силу HKDF.
Возвращает строку, содержащую сырые бинарные данные, представляющие
сформированный ключ или FALSE
в случае неудачи.
Ошибка уровня E_WARNING
будет сгенерирована в случае,
если параметр ikm
пуст, в параметре
algo
указан неизвестный либо не криптографический
алгоритм, параметр length
меньше 0 или
очень большой (более чем в 255 раз больше размера хеш функции).
Пример #1 hash_hkdf() example
<?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 для кодирования и аутентификации соответственно.