CakeFest 2024: The Official CakePHP Conference

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

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

Замечание:

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

key

Входные данные (необработанные бинарные данные). Не может быть пустым.

length

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

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

info

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

salt

Соль, используемая при формировании ключа.

Хотя и необязательно, но добавление случайной соли значительно улучшает силу HKDF.

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

Возвращает строку, содержащую необработанные бинарные данные, представляющие сформированный ключ.

Ошибки

Выбрасывается 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)
?>

В примере выше создана пара разных ключей, подходящих для создания конструкции 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