确保 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)
?>
上面的示例生成一对独立的密钥,适合使用 AES-256 和 SHA-256 分别进行加密和身份验证来创建加密-然后-HMAC 结构。
确保 info 参数包含随机元素。
来自:https://soatok.blog/2021/11/17/understanding-hkdf/