PHP Conference Japan 2024

hash_hkdf

(PHP 7 >= 7.1.2, PHP 8)

hash_hkdf產生指定金鑰輸入的 HKDF 金鑰衍生

說明

hash_hkdf(
    字串 $algo,
    #[\SensitiveParameter] 字串 $key,
    整數 $length = 0,
    字串 $info = "",
    字串 $salt = ""
): 字串

參數

algo

所選雜湊演算法的名稱(例如 "sha256")。支援的演算法列表請參閱 hash_hmac_algos()

注意事項:

不允許使用非加密雜湊函式。

key(金鑰)

輸入的金鑰素材(原始二進位資料)。不可為空。

length(長度)

所需的輸出長度,以位元組為單位。不可超過所選雜湊函式大小的 255 倍。

如果 length0,則輸出長度將預設為所選雜湊函式的大小。

info(資訊)

應用程式/上下文相關的資訊字串。

salt(鹽)

衍生過程中使用的鹽。

雖然是選用的,但加入隨機鹽可以顯著提高 HKDF 的強度。

返回值

返回一個字串,包含衍生金鑰(也稱為輸出金鑰素材 - OKM)的原始二進位表示法。

錯誤/例外

如果 key 為空、algo 未知/非加密、length 小於 0 或太大(大於雜湊函式大小的 255 倍),則會拋出 ValueError 例外。

更新日誌

版本 說明
8.0.0 現在在發生錯誤時會拋出 ValueError 例外。先前會返回 false 並發出 E_WARNING 訊息。

範例

範例 #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 進行加密和驗證。

參見

新增筆記

使用者貢獻的筆記 1 則筆記

To Top