Какая функция согласования ключей (или деривации ключей) используется openssl?
Я пытаюсь заменить код openssl на код WinGP CNG. Ниже представлен код openssl, который у меня есть.
const char *generator = ""; // 256 character hex string
const char *prime = ""; // 256 character hex string
dh = DH_new();
// Initialize dh's generator and prime
BN_hex2bn(&(dh->g), generator);
BN_hex2bn(&(dh->p), prime);
// Generate public and private keys
DH_generate_key(dh);
// Extract server's public key from init_msg's 'key'
BIGNUM *server_pub_key = BN_new();
BN_hex2bn(&server_pub_key, " *** 256 character server public key as hex string ***");
// Use DH to calculate the shared key
vector<unsigned char> shared_key;
shared_key.resize(DH_size(dh));
err = DH_compute_key(shared_key.data(), server_pub_key, dh);
Приведенный выше код сгенерировал общий ключ из шестнадцатеричной строки из 256 символов (128 байт). Что такое функция согласования ключей, используемая openssl для создания такого ключа. Заранее спасибо.
2 ответа
Это не так. Или "НУЛЬ КДФ", или f(x) -> x
,
DH_compute_key
выполняет необработанную операцию ЦО и возвращает результат.
Ни одно из задокументированных значений KDF для BCryptDeriveKey
вернуть необработанное значение. Всегда возможно, что они добавили значения BCRYPT_KDF, которые еще не попали в документы, вам нужно проверить bcrypt.h
из последних выпусков SDK.
То, что вы получаете, является прямым результатом соглашения о ключе Диффи-Хеллмана (DH) до того, как какой-либо KDF будет использован. Я не уверен, что вы ожидаете от нас, кроме этого. Это беззнаковое старшее порядковое число в диапазоне вплоть до размера ключа (1024 бита) в байтах (128 байт).
Это было бы BCRYPT_DH_ALGORITHM
конечно.