确保 info 参数包含随机元素。
来自: https://soatok.blog/2021/11/17/understanding-hkdf/
(PHP 7 >= 7.1.2, PHP 8)
hash_hkdf — 生成提供的密钥输入的 HKDF 密钥派生
algo
所选哈希算法的名称(例如 "sha256"
)。有关支持的算法列表,请参见 hash_hmac_algos()。
注意:
不允许使用非加密哈希函数。
key
输入密钥材料(原始二进制)。不能为空。
length
所需的输出长度(以字节为单位)。不能大于所选哈希函数大小的 255 倍。
如果 length
为 0
,则输出长度将默认为所选哈希函数的大小。
info
应用程序/上下文特定的信息字符串。
salt
派生过程中使用的盐。
虽然是可选的,但添加随机盐可以显著提高 HKDF 的强度。
返回一个字符串,其中包含派生密钥的原始二进制表示形式(也称为输出密钥材料 - OKM)。
如果 key
为空,algo
未知/非加密,length
小于 0
或太大(大于哈希函数大小的 255 倍),则抛出 ValueError 异常。
示例 #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 结构,分别使用 AES-256 和 SHA-256 进行加密和身份验证。
确保 info 参数包含随机元素。
来自: https://soatok.blog/2021/11/17/understanding-hkdf/