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