【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

指定されたキーとアルゴリズムに基づいて生成された、キー拡張値(鍵拡張値)を文字列として返します。

【PHP8.x】hash_hkdf関数の使い方 | いっしー@Webエンジニア