ECDH共享密钥与循环不匹配,使用Crypto ++

时间:2016-08-17 01:42:24

标签: crypto++ ecdhe

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 个答案:

答案 0 :(得分:0)

  

ECDH共享密钥与循环匹配,使用Crypto ++

协议的每次运行都会产生不同的共享密钥,因为客户端和服务器都在密钥协议期间提供随机值。继承随机性提供了前向保密,这意味着坏人无法在以后恢复纯文本,因为随机值是临时的或短暂的(在协议执行后被遗忘)。

在Crypto ++实现中,库甚至没有区分客户端和服务器,因为协议中存在如此多的对称性。具有太多对称性的协议可能会受到Chess Grand-Master攻击,其中一个协议执行用于解决另一个协议执行(将其视为中间人,其中坏人是两者的代理)大师)。通常,您在一侧或另一侧调整参数以打破对称性(客户端使用14字节随机,服务器使用18字节随机)。

我们添加 do 的其他关键协议方案需要区分客户端和服务器,例如Hashed MQV (HMQV) and Fully Hashed MQV (FHMQV)客户端服务器在HMQV和FHMQV中称为 Initiator Responder

  

我想在3个单元之间创建共享密钥,但是这段代码给了我不同的。

这是一个不同的问题。这被称为 Group Diffie-Hellman或多方 Diffie-Hellman。它具有应用程序,例如,受保护内容的聊天和广播,其中用户是组的一部分或加入组。问题的棘手部分是当用户离开组或不再授权时如何撤销对组的访问。

据我所知,Crypto ++不提供任何组DH方案。您可以修改现有资源来执行此操作。

对于群组 Diffie-Hellman,您需要搜索Google Scholar for the papers。请特别注意该方案的安全属性,例如如何加入和离开组(授予和撤销访问权限)。