PHP 8.5.0 Alpha 4 available for testing

hash_hkdf

(PHP 7 >= 7.1.2, PHP 8)

hash_hkdfФормирует HKDF-ключ из исходного ключа

Описание

hash_hkdf(
    string $algo,
    #[\SensitiveParameter] string $key,
    int $length = 0,
    string $info = "",
    string $salt = ""
): string

Список параметров

algo

Название алгоритма хеширования, например "sha256". Список алгоритмов, которые поддерживает функция, приводит описание функции hash_hmac_algos().

Замечание:

Некриптографические хеширующие функции не допускаются.

key

Входные необработанные двоичные данные. Параметр нельзя оставлять пустым.

length

Длина вывода в байтах. Нельзя превышать размер хеш-функции более чем в 255 раз.

При передаче в параметр length значения 0 длина вывода по умолчанию приравнивается к размеру хеш-значения, которое возвращает заданная в первом параметре хеш-функция.

info

Информационная строка, специфичная для приложения или контекста.

salt

Соль для формирования ключа.

Добавление произвольной соли значительно повышает прочность HKDF-ключа, хотя параметр и необязателен.

Возвращаемые значения

Функция возвращает строку, которая содержит необработанное двоичное представление производного ключа, которое также знают как выходной ключевой материал (англ. Output Keying Material, OKM).

Ошибки

Функция выбрасывает исключение ValueError, если параметр key пуст, в параметре algo указали неизвестный или некриптографический алгоритм, параметр length меньше 0 или чрезмерно большой — больше чем в 255 раз превышает размер хеш-функции.

Список изменений

Версия Описание
8.0.0 Функция при ошибке теперь выбрасывает ошибку ValueError; раньше выдавалась ошибка уровня E_WARNING и возвращалось значение false.

Примеры

В приведённом примере создаётся пара отдельных ключей, которые подходят для создания конструкции «зашифровать, затем сформировать ключ HMAC» через алгоритм AES-256 для шифрования и алгоритм SHA-256 для аутентификации.

Пример #1 Пример формирования HKDF-ключ из исходного функцией 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)

?>

Смотрите также

Добавить

Примечания пользователей 1 note

To Top