【PHP8.x】openssl_pkey_derive関数の使い方

作成日: 更新日:

『openssl_pkey_derive関数は、通信相手の公開鍵と自身の秘密鍵を用いて、共有秘密鍵を計算(導出)する処理を実行する関数です。この関数は、主に楕円曲線ディフィー・ヘルマン鍵共有(ECDH)などの鍵交換プロトコルにおいて中心的な役割を果たします。その目的は、盗聴の可能性がある安全でない通信経路上であっても、通信を行う二者間が安全に共通の秘密情報を生成することにあります。引数には、通信相手から受け取った公開鍵と、自身が保有する秘密鍵を指定します。これらの鍵は、OpenSSLAsymmetricKeyオブジェクトやPEM形式の文字列などで指定することが可能です。処理が成功すると、計算された共有秘密が文字列として返され、失敗した場合はfalseが返されます。この関数によって得られた共有秘密は、そのまま暗号化キーとして使用されることは少なく、通常は鍵導出関数(KDF)への入力として用いられ、最終的な共通鍵を生成するための元データとして利用されます。

基本的な使い方

構文(syntax)

<?php

$myPrivateKey = '-----BEGIN PRIVATE KEY-----...-----END PRIVATE KEY-----';
$peerPublicKey = '-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----';

$derivedSharedSecret = openssl_pkey_derive($myPrivateKey, $peerPublicKey);

引数(parameters)

OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $public_key, OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $private_key, int $key_length = 0

  • OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $public_key: 共有鍵導出に使用する公開鍵。OpenSSLAsymmetricKeyオブジェクト、OpenSSLCertificateオブジェクト、または公開鍵を表す配列や文字列で指定します。
  • OpenSSLAsymmetricKey|OpenSSLCertificate|array|string $private_key: 共有鍵導出に使用する秘密鍵。OpenSSLAsymmetricKeyオブジェクト、OpenSSLCertificateオブジェクト、または秘密鍵を表す配列や文字列で指定します。
  • int $key_length = 0: 導出する共有鍵のバイト長を指定する整数。0を指定すると、鍵のアルゴリズムによってデフォルトの長さが使用されます。

戻り値(return)

string|false

openssl_pkey_derive 関数は、共有秘密鍵の導出に成功した場合は文字列でその結果を返します。導出に失敗した場合は false を返します。

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