OpenSSL поддерживает ECDH? - PullRequest
0 голосов
/ 20 мая 2019

https://php.net/openssl-dh-compute-key заставляет меня думать, что это не так.Это говорит только о DH - не ECDH.Кроме того, открытый ключ - это просто простое число в base-256, и есть конкретные инструкции по удалению компонента -----BEGIN PUBLIC KEY----- из открытого ключа, поскольку он не поддерживается.Кроме того, технически строки, начинающиеся с -----BEGIN PUBLIC KEY-----, являются действительными числами с базовым 256.

Кроме того, если ключи ECDH совпадают с ключами ECDSA, тогда открытый ключ для ECDH состоит из координат X, Y и кривой(будь то именованная или указанная кривая), и не сразу очевидно, в каком формате должен быть открытый ключ, чтобы openssl_dh_compute_key() работал.

Тем не менее я пытался и, к моему удивлениюЯ не получил ошибку, но также не получил никакого вывода:

<?php

$public = '-----BEGIN PUBLIC KEY-----
MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEkldhVs+UpzZ/E6hYF536mSYvdnfN
oEa/Idsfu7pBEcqPGHTsp+zDM/rquKwr8eoxn554LYw/3udRgzEpHk4vag==
-----END PUBLIC KEY-----';

$private = openssl_pkey_get_private('-----BEGIN PRIVATE KEY-----
MIGHAgEAMBMGByqGSM49AgEGCCqGSM49AwEHBG0wawIBAQQgF1ZD0LhQm5q71gL9
O+yzfX8g/sdYTBz/50nkw6wrE16hRANCAAQeZkUZ3ey7W5Czz52pOLmgSBHlnI3u
9gLcbr9NVCecEstDR0EK2+fJMfokogfW+RdoEJKN0qLdHilGPGHV/aq1
-----END PRIVATE KEY-----');

$s = openssl_dh_compute_key($public, $private);

echo bin2hex($s);

echo "\n\n";

echo openssl_error_string();

$s было ложным.

1 Ответ

1 голос
/ 20 мая 2019

OpenSSL поддерживает ECDH . Я предполагаю, что PHP не раскрывает методы ECDH, необходимые для поддержки ECDH, как это делает для DH.

Я предполагаю, что ECH рекомендуется использовать функциональность EVP, которая несколько абстрагирует спецификацию DH, тогда как использование ECDH_compute_key на самом деле не задокументировано.

Не похоже, что PHP предоставляет достаточно возможностей EVP для поддержки ECDH.

...