(PHP 7 >= 7.1.2)
hash_hkdf — Формирования ключа HKDF для заданных входных данных
$algo
, string $ikm
[, int $length
= 0
[, string $info
= ''
[, string $salt
= ''
]]] ) : string
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()
<?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 для кодирования и аутентификации соответственно.