openssl_dh_compute_key возвращает false

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

Предположим, у меня есть чей-то открытый ключ. $ 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");

Используя следующий код, я получаю false как значение для $sharedSecret.

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

openssl_error_string() не возвращает ошибок.

Я скопировал var_dump openssl_pkey_get_details($private) и убедился, что он был создан правильно.

Как использовать openssl_dh_compute_key()?


person jeremyj11    schedule 24.09.2016    source источник
comment
Такое ощущение, что функция не поддерживает ключи EC, только RSA ..   -  person jeremyj11    schedule 24.09.2016


Ответы (2)


https://www.openssl.org/docs/manmaster/crypto/DH_compute_key.html описывает эту функцию как предназначенную (не относящуюся к ЕС) Диффи Хеллмана. Вам понадобится ECDH_compute_key (который я не знаю, предоставляет ли PHP).

Хотя https://wiki.openssl.org/index.php/Elliptic_Curve_Diffie_Hellman рекомендует использовать Обертки EVP_PKEY вместо подпрограмм низкого уровня. Но, опять же, я не могу сказать, какая поддержка есть у PHP.

person bartonjs    schedule 25.09.2016

Довольно старый пост, но все же ..

Я думаю, ваш открытый ключ отформатирован не в Base64, а в URL-safe-Base64.
См .: https://en.wikipedia.org/wiki/Base64#URL_applications

Кроме того, теперь вы можете создавать ключи также из PHP. Использование openssl_pkey_new().
См .: https://www.php.net/manual/en/function.openssl-pkey-new.php

person Rednael    schedule 29.06.2019