- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我尝试将 XTR-DH 用于此示例的 key 协议(protocol):
//////////////////////////////////////////////////////////////////////////
// Alice
// Initialize the Diffie-Hellman class with a random prime and base
AutoSeededRandomPool rngA;
DH dhA;
dh.Initialize(rngA, 128);
// Extract the prime and base. These values could also have been hard coded
// in the application
Integer iPrime = dhA.GetGroupParameters().GetModulus();
Integer iGenerator = dhA.GetGroupParameters().GetSubgroupGenerator();
SecByteBlock privA(dhA.PrivateKeyLength());
SecByteBlock pubA(dhA.PublicKeyLength());
SecByteBlock secretKeyA(dhA.AgreedValueLength());
// Generate a pair of integers for Alice. The public integer is forwarded to Bob.
dhA.GenerateKeyPair(rngA, privA, pubA);
//////////////////////////////////////////////////////////////////////////
// Bob
AutoSeededRandomPool rngB;
// Initialize the Diffie-Hellman class with the prime and base that Alice generated.
DH dhB(iPrime, iGenerator);
SecByteBlock privB(dhB.PrivateKeyLength());
SecByteBlock pubB(dhB.PublicKeyLength());
SecByteBlock secretKeyB(dhB.AgreedValueLength());
// Generate a pair of integers for Bob. The public integer is forwarded to Alice.
dhB.GenerateKeyPair(rngB, privB, pubB);
//////////////////////////////////////////////////////////////////////////
// Agreement
// Alice calculates the secret key based on her private integer as well as the
// public integer she received from Bob.
if (!dhA.Agree(secretKeyA, privA, pubB))
return false;
// Bob calculates the secret key based on his private integer as well as the
// public integer he received from Alice.
if (!dhB.Agree(secretKeyB, privB, pubA))
return false;
// Just a validation check. Did Alice and Bob agree on the same secret key?
if (VerifyBufsEqualp(secretKeyA.begin(), secretKeyB.begin(), dhA.AgreedValueLength()))
return false;
return true;
这里是我的代码:
//Alice
AutoSeededRandomPool aSRPA;
XTR_DH xtrA(aSRPA, 512, 256);
Integer iPrime = xtrA.GetModulus();
Integer i_qnumber = xtrA.GetSubgroupOrder();
Integer iGeneratorc1 = xtrA.GetSubgroupGenerator().c1;
Integer iGeneratorc2 = xtrA.GetSubgroupGenerator().c2;
SecByteBlock privateA(xtrA.PrivateKeyLength());
SecByteBlock publicA(xtrA.PublicKeyLength());
SecByteBlock secretKeyA(xtrA.AgreedValueLength());
xtrA.GenerateKeyPair(aSRPA, privateA, publicA);
//Bob
AutoSeededRandomPool aSRPB;
XTR_DH xtrB(iPrime, i_qnumber, iGeneratorc1); // Use c1 or c2 or both ???
SecByteBlock privB(xtrB.PrivateKeyLength());
SecByteBlock publB(xtrB.PublicKeyLength());
SecByteBlock secretKeyB(xtrB.AgreedValueLength());
xtrB.GenerateKeyPair(aSRPB, privateB, publicB);
// Agreement
// Alice calculates the secret key based on her private integer as well as the
// public integer she received from Bob.
if (!xtrA.Agree(secretKeyA, privateA, publicB))
return false;
// Bob calculates the secret key based on his private integer as well as the
// public integer he received from Alice.
if (!xtrB.Agree(secretKeyB, privateB, publicA))
return false;
// Just a validation check. Did Alice and Bob agree on the same secret key?
if (VerifyBufsEqualp(secretKeyA.begin(), secretKeyB.begin(), xtrA.AgreedValueLength()))
return false;
return true;
我遇到了这个错误
Severity Code Description Project File Line Suppression State
Error C2664 'CryptoPP::XTR_DH::XTR_DH(CryptoPP::XTR_DH &&)': cannot convert argument 3 from 'CryptoPP::Integer' to 'const CryptoPP::GFP2Element &' ConsoleApplication1 d:\tugas akhir\code\consoleapplication1\consoleapplication1\consoleapplication1.cpp 91
我的问题是:
先谢谢
最佳答案
XTR_DH xtrB(iPrime, i_qnumber, iGeneratorc1); // Use c1 or c2 or both ???
您应该使用 XTR-DH | Constructors 中的以下构造函数:
XTR_DH (const Integer &p, const Integer &q, const GFP2Element &g)
有两种方法可以设置xtrB
。一、使用构造函数(和人为的小参数)的方式:
$ cat test.cxx
#include "cryptlib.h"
#include "osrng.h"
#include "xtrcrypt.h"
#include <iostream>
int main()
{
using namespace CryptoPP;
AutoSeededRandomPool aSRP;
XTR_DH xtrA(aSRP, 170, 160);
const Integer& iPrime = xtrA.GetModulus();
const Integer& iOrder = xtrA.GetSubgroupOrder();
const GFP2Element& iGenerator = xtrA.GetSubgroupGenerator();
XTR_DH xtrB(iPrime, iOrder, iGenerator);
std::cout << "Prime: " << std::hex << xtrB.GetModulus() << std::endl;
std::cout << "Order: " << std::hex << xtrB.GetSubgroupOrder() << std::endl;
std::cout << "Generator" << std::endl;
std::cout << " c1: " << std::hex << xtrB.GetSubgroupGenerator().c1 << std::endl;
std::cout << " c2: " << std::hex << xtrB.GetSubgroupGenerator().c2 << std::endl;
return 0;
}
然后:
$ g++ -DNDEBUG -g2 -O3 -fPIC -pthread test.cxx ./libcryptopp.a -o test.exe
$ ./test.exe
Prime: 2d4c4f9f4de9e32e84a7be42f019a1a4139e0fe7489h
Order: 89ab07fa5115443f51ce9a74283affaae2d7748fh
Generator
c1: 684fedbae519cb297f3448d5e564838ede5ed1fb81h
c2: 39112823212ccd7b01f10377536f51bf855752c7a3h
其次,将域参数存储在 ASN.1 对象中的方式(以及人为的小参数):
$ cat test.cxx
#include "cryptlib.h"
#include "osrng.h"
#include "files.h"
#include "xtrcrypt.h"
#include <iostream>
int main()
{
using namespace CryptoPP;
AutoSeededRandomPool prng;
XTR_DH xtrA(prng, 170, 160);
xtrA.DEREncode(FileSink("params.der").Ref());
XTR_DH xtrB(FileSource("params.der", true).Ref());
std::cout << "Prime: " << std::hex << xtrB.GetModulus() << std::endl;
std::cout << "Order: " << std::hex << xtrB.GetSubgroupOrder() << std::endl;
std::cout << "Generator" << std::endl;
std::cout << " c1: " << std::hex << xtrB.GetSubgroupGenerator().c1 << std::endl;
std::cout << " c2: " << std::hex << xtrB.GetSubgroupGenerator().c2 << std::endl;
return 0;
}
然后:
$ g++ -DNDEBUG -g2 -O3 -fPIC -pthread test.cxx ./libcryptopp.a -o test.exe
$ ./test.exe
Prime: 2ee076b3254c1520151bbe0391a77971f92e277ba37h
Order: f7674a8c2dd68d32c3da8e74874a48b9adf00fcbh
Generator
c1: 2d469e63b474ac45578a0027a38864f303fad03ba9h
c2: 1d5e5714bc19ef25eee0535584176889df8f26c4802h
最后:
$ dumpasn1 params.der
0 94: SEQUENCE {
2 22: INTEGER 02 EE 07 6B 32 54 C1 52 01 51 BB E0 39 1A 77 97 1F 92 E2 77 BA 37
26 21: INTEGER 00 F7 67 4A 8C 2D D6 8D 32 C3 DA 8E 74 87 4A 48 B9 AD F0 0F CB
49 21: INTEGER 2D 46 9E 63 B4 74 AC 45 57 8A 00 27 A3 88 64 F3 03 FA D0 3B A9
72 22: INTEGER 01 D5 E5 71 4B C1 9E F2 5E EE 05 35 58 41 76 88 9D F8 F2 6C 48 02
: }
在实践中你可能想使用这样的东西,它在加载参数后验证它们。您应该始终验证您的安全参数。
// Load the domain parameters from somewhere
const Integer& iPrime = ...;
const Integer& iOrder = ...;
const GFP2Element& iGenerator = ...;
// Create the key agreement object using the parameters
XTR_DH xtrB(iPrime, iOrder, iGenerator);
// Verify the the parameters using the key agreement object
if(xtrB.Validate(aSRP, 3) == false)
throw std::runtime_error("Failed to validate parameters");
您可能会使用类似于上面显示的第二种方法。也就是说,您将一次性生成您的域参数,然后双方都将使用它们。下面双方 xtrA
和 xtrB
使用 params.der
:
int main()
{
using namespace CryptoPP;
AutoSeededRandomPool prng;
XTR_DH xtrA(FileSource("params.der", true).Ref());
XTR_DH xtrB(FileSource("params.der", true).Ref());
if(xtrA.Validate(prng, 3) == false)
throw std::runtime_error("Failed to validate parameters");
if(xtrB.Validate(prng, 3) == false)
throw std::runtime_error("Failed to validate parameters");
...
}
关于c++ - 与 XTR-DH Crypto++ 的 key 协议(protocol),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52587187/
我在构建 debian 软件包时遇到了问题。 至于规则文件的文件:https://www.debian.org/doc/manuals/maint-guide/dreq.en.html#rules d
我使用某些 g 生成了一个 Diffie-Hellman key 和 p参数,像这样: $ cat dhparam.pem -----BEGIN DH PARAMETERS----- MIIBCAKC
我需要支持 Diffie Hellman 加密,现在为了测试这个我需要创建一个带有 DH key 参数的证书,例如。 key 长度 - 2048 等 据我所知,DH 不适用于自签名证书,因此基本上我需
我们最近升级了我们的一个工具(使用 java 实现),现在它很难连接到我们公司的一个内部端点。对于其他端点,它工作正常。假设它不起作用的端点是 xyz.abc.com 我们每次看到的错误是 javax
我的一份文档说 Generate the private and public keys using the Diffie-Hellman parameters (‘p’ and ‘g’). The
我正在构建一个 debian 软件包,它使用其他名称将多个配置文件安装到不同的位置。为此,我想使用 dh-exec 安装重命名功能。 在 control 文件中,我将 dh-exec 声明为 Buil
根据 RFC 4419,在客户端 DH key 交换初始化消息之前,服务器将向客户端发送一个大的安全素数 (p) 和子组 (g) 的生成器。我正在查看一个wireshark 数据包捕获,但没有看到它们
运行 java 代码时出现以下异常'无法生成 DH key 对'(我使用 TLSv1.2)。 我将素数大小从 1024 转换为 2048,但总是遇到相同的错误。 然后我禁用了 DH,它运行得很好。 但
刚刚开始使用 dh-virtualenv,并一直在关注 https://nylas.com/blog/packaging-deploying-python/ 上的教程。 我有一个简单的 2 文件测试应
我在通过具有 Java 版本 1.6.0_26 的代理服务器访问第三方 URL 时收到以下错误。 java.lang.RuntimeException: Could not generate DH
我正在尝试使用 CA 证书在 activemq 中设置一个安全的 websocket,但我一直在浏览器中收到此消息: SSL received a weak ephemeral Diffie-Hell
我正在尝试使用一个简单的 PERL 脚本连接到一个关闭的服务器 - 一台空调 #!/usr/bin/perl use 5.10.1; use warnings; use strict; use IO:
尝试使用 suds 发送 SOAP 请求, 我正在使用 Python 2.7.6 . 我不是很精通安全我被引导相信无论是我的机器或服务器机器上的安全 key 太小,我不知道如何解决。我是否会生成一些新
我编写了一个使用 openssl 的程序,并将其 dockerized。 但是当我尝试使用 python:3.7 基础镜像时,出现以下错误: [SSL: DH_KEY_TOO_SMALL] dh ke
我听说 SSH 使用 RSA 和 diffie hellman。我也知道 key 交换过程如下。 客户端初始化 服务器初始化 key 交换请求 回复 新 key 它在 key 交换过程中使用 DH。
我尝试在 Eclipse 中提交/更新项目时遇到错误(在终端中没有问题)。 窗口详细信息: org.apache.subversion.javahl.ClientException: svn: E17
我正在 Anypoint Studio 中创建一个简单的 Mule 流程 - 它定期轮询目录,当文件放置在目录中时,它会将其发送到 SFTP 服务器。但是,当应用程序开始与服务器协商安全连接时,它会失
我正在尝试将 Debian 打包与自包含的基于 virtualenv 的 Python 部署相结合 this使用 dh-virtualenv 的教程。 debian/兼容: 9 debian/cont
这是我用来生成 DH key 对的代码: KeyPairGenerator keyGen = KeyPairGenerator.getInstance("DH"); keyGen.initialize
每次我尝试抓取页面时,例如 HtmlPage page1 = (HtmlPage)client.GetHtmlPage("https://groceries.morrisons.com/"); 我收
我是一名优秀的程序员,十分优秀!