LibCrypt, как получить мой сгенерированный открытый ключ с помощью API низкого уровня

В моем проекте для реализации соглашения о групповом ключе я решил использовать низкоуровневый API OpenSSl для Диффи Хеллмана (фрагмент кода взят из документация )

#include <libssl/dh.h>
// Some code here

DH *privkey;
int codes;
int secret_size;

/* Generate the parameters to be used */
if(NULL == (privkey = DH_new())) handleErrors();
if(1 != DH_generate_parameters_ex(privkey, 2048, DH_GENERATOR_2, NULL)) handleErrors();

if(1 != DH_check(privkey, &codes)) handleErrors();
if(codes != 0)
{
    /* Problems have been found with the generated parameters */
    /* Handle these here - we'll just abort for this example */
    printf("DH_check failed\n");
    abort();
}

/* Generate the public and private key pair */
if(1 != DH_generate_key(privkey)) handleErrors();

/* Send the public key to the peer.
 * How this occurs will be specific to your situation (see main text below)
 */

// Another code here

//Cleanups
OPENSSL_free(secret);
BN_free(pubkey);
DH_free(privkey);

Но как из сгенерированной структуры DH сгенерировать открытый ключ?


person Dimitrios Desyllas    schedule 23.01.2019    source источник


Ответы (1)


Если вы читаете документацию для DH_generate_key, она делает (как говорится в комментарии).

DH_generate_key() ожидает, что dh будет содержать общие параметры dh->p и dh->g. Он генерирует случайное частное значение DH, если dh->priv_key уже не установлен, и вычисляет соответствующее общедоступное значение dh->pub_key, которое затем можно опубликовать.

Таким образом, часть открытого «ключа» обмена Диффи Хеллмана находится в «privkey->pub_key», и вы публикуете его вместе с вашими общими параметрами «privkey->p» и "privkey->g" на другую сторону.

person Shane Powell    schedule 24.01.2019