【PHP8.x】hash_hkdf関数の使い方
作成日: 更新日:
hash_hkdf関数は、HKDF (HMAC-based Extract-and-Expand Key Derivation Function) と呼ばれる、弱いキーから暗号学的に安全なキーを導出するためのアルゴリズムを実行し、強力な鍵を導出する関数です。
この関数は、情報量の少ない初期キーや秘密情報から、暗号化や認証などのセキュリティ用途に適した、予測困難で安全な鍵を生成するために利用されます。具体的には、algo
引数で指定されたハッシュアルゴリズム(例: 'sha256')を使用し、key
引数で与えられた入力キー、オプションのsalt
引数で与えられるソルト値、そしてinfo
引数で与えられるキーの用途を区別するための追加情報に基づいて、length
引数で指定されたバイト長の導出キーを生成します。
生成された導出キーはバイナリ文字列として返されます。主に、共通鍵暗号化の鍵生成やメッセージ認証コード(MAC)の鍵派生など、セキュリティが非常に重要なアプリケーションで安全な鍵を構築する際に役立ちます。
利用する際は、適切なハッシュアルゴリズムの選択と、ランダムでユニークなソルトの使用が推奨されます。ただし、この関数はパスワードを直接ハッシュ化して保存する目的には推奨されません。パスワードストレージには、password_hash()
関数のような専用の機能を使用するべきです。
この関数はPHP 8.4で追加された機能です。
基本的な使い方
構文(syntax)
<?php
$derivedKey = hash_hkdf(
'sha256', // 使用するハッシュアルゴリズム
'input key material', // 入力鍵マテリアル (IKM)
32, // 生成する鍵の長さ (バイト単位)。0の場合、アルゴリズムのハッシュ出力長になる
'info for encryption', // 鍵の用途やコンテキスト情報
'salt value' // ソルト値
);
?>
引数(parameters)
string $algo, string $key, int $length = 0, string $info = '', string $salt = ''
- string $algo: 鍵導出関数で使用するハッシュアルゴリズム名 (例: 'sha256')
- string $key: 導出する鍵の元となる秘密鍵
- int $length = 0: 導出する鍵の長さ。0を指定するとアルゴリズムのデフォルト長が使用される
- string $info = '': 派生鍵のコンテキストや用途を指定する情報文字列
- string $salt = '': 鍵導出プロセスで使用するソルト。指定しない場合はランダムなソルトが生成される
戻り値(return)
string
指定されたキーとアルゴリズムに基づいて生成された、キー拡張値(鍵拡張値)を文字列として返します。