2016-09-24 11 views
0

Я пытаюсь вычислить общий секрет для ECDH (эллиптическая кривая Diffie Hellman) с использованием PHP.openssl_dh_compute_key возвращает false

Предположим, у меня есть чей-то открытый ключ:

$clientPublickey="BOLcHOg4ajSHR6BjbSBeX_6aXjMu1V5RrUYXqyV_FqtQSd8RzdU1gkMv1DlRPDIUtFK6Nd16Jql0eSzyZh4V2uc"; 

Я генерировать ключи с помощью OpenSSL:

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

Тогда я вызываю:

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

... и я получаю ложные , Вызов 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.