Общий секрет ECDH не совпадает в цикле, с Crypto++

CryptoPP::OID CURVE = CryptoPP::ASN1::secp256r1();
CryptoPP::AutoSeededRandomPool prng;
std::vector<kpStruct> KPVecRSU;

(loop begin)
kpStruct keyP;
CryptoPP::ECDH < CryptoPP::ECP >::Domain dhA( CURVE );
CryptoPP::SecByteBlock privA(dhA.PrivateKeyLength()), pubA(dhA.PublicKeyLength());
dhA.GenerateKeyPair(prng, privA, pubA);
CryptoPP::SecByteBlock sharedA(dhA.AgreedValueLength());
keyP.sharedECDH = sharedA;
KPVecRSU.push_back(keyP);
(loop end)

Я хочу создать общий секрет между 3 модулями, но этот код дает мне другие! Любая идея, пожалуйста?

1 ответ

Решение

Общий секрет ECDH не совпадает в цикле, с Crypto++

Каждый запуск протокола создает разные общие секреты, потому что и клиент, и сервер предоставляют случайные значения во время соглашения о ключах. Наследственная случайность обеспечивает прямую секретность, то есть плохие парни не могут восстановить простой текст в более поздний момент времени, потому что случайные значения были временными или эфемерными (забытыми после выполнения протокола).

В реализации Crypto++ библиотека даже не делает различий между клиентом и сервером, потому что в протоколе так много симметрии. Протоколы со слишком большой симметрией могут пострадать от атаки Chess Grand-Master, где одно выполнение протокола используется для решения другого выполнения протокола (представьте, что это человек посередине, где плохой парень - прокси для обоих мастера). Часто вы настраиваете параметр с одной или другой стороны, чтобы нарушить симметрию (клиент использует 14-байтовое случайное число, сервер использует 18-байтовое случайное число).

В других схемах согласования ключей, которые мы добавляем , необходимо проводить различие между клиентом и сервером, например, Hashed MQV (HMQV) и Fully Hashed MQV (FHMQV). Клиент и Сервер называются Инициатором и Ответчиком в HMQV и FHMQV.


Я хочу создать общий секрет между 3 модулями, но этот код дает мне другие.

Это другая проблема. Это известно как группа Диффи-Хеллман или Многопартийная Диффи-Хеллман. Он имеет приложения, например, для чата и трансляции защищенного контента, где пользователи являются частью группы или присоединяются к группе. Более сложная часть проблемы заключается в том, как отозвать доступ к группе, когда пользователь покидает группу или больше не авторизован.

Насколько мне известно, Crypto++ не предоставляет никаких групповых схем DH. Вы можете изменить существующие источники, чтобы сделать это.

Для Group Diffie-Hellman вам нужно найти документы в Google Scholar. Обратите особое внимание на атрибуты безопасности схемы, например, как присоединиться и выйти из группы (предоставить и отозвать доступ).

Другие вопросы по тегам