在 Crypto++ 中解析 GFP2Element
Parsing the GFP2Element in Crypto++
我正在尝试使用 DH 示例在该站点中生成 AES 密钥 https://www.cryptopp.com/wiki/Diffie-Hellman
但我正在用 XTR-DH 更改它,我想打印出发电机编号,但它无法显示,因为 .GetSubgroupGenerator()
使用 GFP2Element class
这是代码
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;
}
那么,解决办法是什么?谢谢
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 on the Crypto++ wiki and the 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++ wiki 上的 Security Level。
我正在尝试使用 DH 示例在该站点中生成 AES 密钥 https://www.cryptopp.com/wiki/Diffie-Hellman
但我正在用 XTR-DH 更改它,我想打印出发电机编号,但它无法显示,因为 .GetSubgroupGenerator()
使用 GFP2Element class
这是代码
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;
}
那么,解决办法是什么?谢谢
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 on the Crypto++ wiki and the 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++ wiki 上的 Security Level。