PHP 8.3.7 Released!

hash_hkdf

(PHP 7 >= 7.1.2, PHP 8)

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

Описание

hash_hkdf(
    string $algo,
    string $key,
    int $length = 0,
    string $info = "",
    string $salt = ""
): string

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

algo

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

Замечание:

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

key

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

length

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

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

info

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

salt

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

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

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

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

Ошибки

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

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

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

Примеры

Пример #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)

?>

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

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

add a note

User Contributed Notes 1 note

up
2
landers dot robert at gmail dot com
1 year ago
Make sure the info parameter contains random elements.

From: https://soatok.blog/2021/11/17/understanding-hkdf/
To Top