Разбор элемента GFP2 в Crypto ++ - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь использовать пример DH для генерации ключа AES на этом сайте https://www.cryptopp.com/wiki/Diffie-Hellman

Но я меняю его с помощью XTR-DH и хочу распечатать номер генератора, и он можетне появляется, потому что .GetSubgroupGenerator() с использованием класса GFP2Element

Вот код

int main()
{
    AutoSeededRandomPool aSRP;
    XTR_DH xtr(aSRP, 251, 224);
    SecByteBlock priv(xtr.PrivateKeyLength());
    SecByteBlock publ(xtr.PublicKeyLength());
    SecByteBlock secretKey(xtr.AgreedValueLength());
    xtr.GenerateKeyPair(aSRP, priv, publ);

    cout << "Prime: " << xtr.GetModulus() << endl;
    cout << "Generator" << xtr.GetSubgroupGenerator() << endl;
    system("pause");
    return 0;
}

Итак, каково решение?Благодаря.

1 Ответ

0 голосов
/ 25 сентября 2018

GFP2Element не имеет перегруженного оператора извлечения.Вы просто печатаете c1 и c2 элементы, которые Integer типов.(Это та же самая стратегия, скажем, для элементов поля эллиптической кривой).

$ cat test.cxx
#include "cryptlib.h"
#include "osrng.h"
#include "xtrcrypt.h"

#include <iostream>

int main()
{
    using namespace CryptoPP;

    AutoSeededRandomPool aSRP;
    XTR_DH xtr(aSRP, 251, 224);

    std::cout << "Prime: " << std::hex << xtr.GetModulus() << std::endl;
    std::cout << "Generator" << std::endl;
    std::cout << "  c1: " << std::hex << xtr.GetSubgroupGenerator().c1 << std::endl;
    std::cout << "  c2: " << std::hex << xtr.GetSubgroupGenerator().c2 << std::endl;

    return 0;
}

И:

$ g++ -DNDEBUG -g2 -O3 -fPIC -pthread test.cxx ./libcryptopp.a -o test.exe
$ ./test.exe
Prime: 607cd5cbdfa7ac6ed4fecaa83458fb7d9675a32f002a54380f22fd54d1b9c67h
Generator
  c1: 420c85a614a6f0426e6655a44fe6e1ea00ed27fbf1adbe23f4ad358ad837c9ah
  c2: 2ef44b40639a34fb0b4f9a5aab1d89bd0eca5c19c160e007daf1dd2bbe730eeh

Также см. XTR-DH на Crypto ++Вики и заголовочный файл xtr.h.


Относительно:

XTR_DH xtr(aSRP, 251, 224);

pbits=251 и qbits=224 немного не соответствует.Для обеспечения безопасности в 80 бит рекомендуется использовать pbits=170 и qbits=160.Это примерно равно 1024-битному модулю RSA.

Для 112-битной защиты рекомендуется использовать pbits=341 и qbits=224-256.Это примерно равно 2048-битному модулю RSA.

Для 128-битной защиты рекомендуется использовать pbits=512 и qbits=256.Это примерно равно 3072-битному модулю RSA.

Также см. Уровень безопасности в вики Crypto ++.

...