2016-09-24 19 views
0

PHPを使用してECDH(楕円曲線Diffie Hellman)の共有秘密を計算しようとしています。openssl_dh_compute_keyがfalseを返す

は私が誰かの公開鍵を持っていると仮定します

$clientPublickey="BOLcHOg4ajSHR6BjbSBeX_6aXjMu1V5RrUYXqyV_FqtQSd8RzdU1gkMv1DlRPDIUtFK6Nd16Jql0eSzyZh4V2uc"; 

私はOpenSSLを使用して、私の鍵を生成:

$sharedSecret=openssl_dh_compute_key(base64_decode($clientPublickey), $private); 

...と私は偽の取得:

exec('openssl ecparam -genkey -name prime256v1 -noout -out example-ecc.pem'); 
$private = openssl_pkey_get_private("file://example-ecc.pem"); 

は、その後、私は呼んで。 openssl_error_string()を呼び出すと何も返されず、エラーは発生しません。

私はvar_dumped openssl_pkey_get_details($ private)を正しく作成したことを確認しました。

この機能に関する情報はあまりないようです。 http://php.net/manual/en/function.openssl-dh-compute-key.php

+0

私はこの機能がECキーをサポートしていないと感じていますが、RSAのみです。 –

答えて

0

https://www.openssl.org/docs/manmaster/crypto/DH_compute_key.htmlは、(非EC)Diffie Hellmanの機能として記載されている。 ECDH_compute_keyが必要です(PHPが公開するかどうかわかりません)。

https://wiki.openssl.org/index.php/Elliptic_Curve_Diffie_Hellmanでは、低レベルのルーチンの代わりにEVP_PKEYラッパーを使用することをお勧めします。しかし、再び、私はPHPが何をサポートしているかは言えません。