与えられたキーから導出されるHKDFキーを生成する

# hash_hkdf

(PHP 7 >= 7.1.2, PHP 8)

hash_hkdf — 与えられたキーから導出されるHKDFキーを生成する

### 説明

function hash_hkdf(
string `$algo`,
#[\SensitiveParameter]string `$key`,
int `$length` = 0,
string `$info` = "",
string `$salt` = ""
): string

### パラメータ

`algo`

  選択したハッシュアルゴリズムの名前 (例: `"sha256"`)。 サポートされているアルゴリズムの一覧は hash_hmac_algos() を参照ください。

  > 注意:

  > 暗号に適さないハッシュ関数は許可されません。

`key`

  入力キー (生のバイナリ)。 空ではいけません。

`length`

  出力の長さをバイト単位で指定します。 選んだハッシュ関数のサイズの255倍以下でなければなりません。

  `length` が `0` の場合、 出力の長さはハッシュ関数が選んだデフォルトのサイズになります。

`info`

  アプリケーション/コンテキスト依存の情報を示す文字列

`salt`

  導出の間に使うソルト

  この値はオプションですが、 ランダムなソルトを追加するとHKDFの強度が飛躍的に向上します。

### 戻り値

導出されたキーの生バイナリ表現の文字列を返します(この値は、 出力キーマテリアル(OKM) としても知られています)。 失敗時には `false` を返します。

### エラー / 例外

`key` が空の場合だったり、 `algo` が未知だったり/暗号に適さなかったり、 `length` が0より小さいか大きすぎる (ハッシュ関数のサイズの255倍より大きい)場合、 ValueError がスローされます。

### 変更履歴

バージョン | 説明
--- | ---
8.0.0 | エラーが発生した場合に ValueError をスローするようになりました。 これより前のバージョンでは、 `false` を返し、かつ `E_WARNING` が発生していました。

### 例

上の例は、AES-256 encryption と SHA-256 authentication をそれぞれ使い、 encrypt-then-HMAC を生成する用途に合った、 異なるキーペアを生成します。

例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)
    ?>

### 参考

- hash_pbkdf2() - PBKDF2 を使ってパスワードからキーを生成する
- » RFC 5869
- » userland implementation

`↑` and `↓` to navigate • `Enter` to select • `Esc` to close • `/` to open