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

# hash_hkdf

(PHP 7 >= 7.1.2, PHP 8)

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

### Описание

function 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)

    ?>

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

- hash_pbkdf2() - Генерирует PBKDF2-ключ на основе исходного пароля
- » RFC 5869
- » Пользовательская реализация функции

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open