通过套接字发送公钥的安全方法

时间:2013-11-06 09:38:56

标签: cryptography rsa crypto++

通过套接字向另一个用户发送RSA :: PublicKey的安全方法是什么?我想将密钥导出到ByteQueue并将字节数组发送给用户,他可以再次构建公钥。

或者这是否泄漏可能被误用的信息?

//Generate keys
AutoSeededRandomPool rng;

InvertibleRSAFunction params;
params.GenerateRandomWithKeySize(rng, 3072);

//Create
RSA::PublicKey publicKey(params);

//Save
ByteQueue queue;
publicKey.Save(queue);

byte publicKeyBuffer[1000];
size_t size = queue.Get((byte*)&publicKeyBuffer, sizeof(publicKeyBuffer));

//Load
RSA::PublicKey loadkey;
ByteQueue queue2;
queue2.Put2((byte *)&publicKeyBuffer, size, 0, true);

loadkey.Load(queue2);

1 个答案:

答案 0 :(得分:3)

  

通过套接字向另一个用户发送RSA :: PublicKey的安全方法是什么?

是的,如果不担心隐私,您可以发送纯文本。接收它的人需要验证公钥,这意味着他们需要确保其真正的密钥,而不是冒名顶替的密钥。

验证公钥是密钥分发问题,它是密码学中一个棘手的难题。如果可以解决密钥分发问题,那么许多隐私问题就会消失。

有两种方法可以尝试解决密钥分发问题:信任根和信任网。信任根在公共和私人CA的PKI中使用;而PGP和朋友使用信任网。

使用PKI和公共CA在互联网上取得了不同程度的成功,解决了密钥分发问题。例如,参见RFC 5280,Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile,了解它应该如何工作;并看到彼得古特曼的Engineering Security关于它在实践中如何失败(有时以惊人的方式)。

对于不使用“信任根”或PKI的对等应用程序,最新趋势是(1)使用Short Authentication String (SAS)和初始消息,以及(2)将所有后续会话绑定到过去的会议(主要是从第一届会议形成一个链)。在初始消息期间,接收方通过回读公共密钥指纹等小型摘要(语音是一种很好的认证机制),使用语音验证来自发送方的公钥密钥。

如果您的对等应用程序无法使用SAS来验证公钥,那么您应该采用信任首次使用(TOFU)策略并练习密钥连续性。古特曼在他的书Engineering Security中详细介绍了安全多元化战略。


  

将密钥导出到ByteQueue并发送字节数组

这只是一个演示级别的细节。您可以按照自己喜欢的方式对其进行编码,包括raw,hexadecimal,Base32或Base64。真正的威胁是确保您的同伴收到您发送的公钥(如ntoskrnl指出的那样)。


另请注意,隐私可以成为一个问题,就像那些在被压迫国家的持不同政见者一样。异议和压迫政权不是唯一的用例,也可能是certification and accreditation (C&A)的关注点。

我曾经在美国联邦调查失败,因为我泄露了一个电子邮件地址。在这种情况下,电子邮件地址与密钥一起在用户证书中。 (所有证书都通过“权限”签名将公钥绑定到身份)。