Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cryptography 通过套接字发送公钥的安全方法_Cryptography_Rsa_Crypto++ - Fatal编程技术网

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

Cryptography 通过套接字发送公钥的安全方法,cryptography,rsa,crypto++,Cryptography,Rsa,Crypto++,通过套接字向其他用户发送RSA::PublicKey的安全方法是什么?我正在考虑将密钥导出到字节队列中,并将字节数组发送给用户,用户可以在那里再次构造公钥 或者这是否泄露了可能被误用的信息 //Generate keys AutoSeededRandomPool rng; InvertibleRSAFunction params; params.GenerateRandomWithKeySize(rng, 3072); //Create RSA::PublicKey publicKey(pa

通过套接字向其他用户发送RSA::PublicKey的安全方法是什么?我正在考虑将密钥导出到字节队列中,并将字节数组发送给用户,用户可以在那里再次构造公钥

或者这是否泄露了可能被误用的信息

//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);
通过套接字向其他用户发送RSA::PublicKey的安全方法是什么

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

公钥认证是密钥分配问题,也是密码学中的一个难题。如果密钥分发问题能够得到解决,那么许多隐私问题就会消失

有两种方法试图解决密钥分配问题:信任根和信任网。信任根用于公钥基础设施(PKI)中的公共CA和私有CA;而PGP和朋友使用的是信任网

密钥分发在使用PKI和公共CA的Internet上得到了不同程度的成功解决。例如,参见RFC 5280,了解其工作原理;看看彼得·古特曼(Peter Gutmann)关于它如何在实践中失败(有时以惊人的方式)

对于不使用“信任根”或PKI的对等应用程序,最新的趋势是(1)在初始消息中使用a,以及(2)将所有后续会话绑定到过去的会话(基本上从第一个会话形成一个链)。在初始消息期间,接收方使用语音通过读回一个小摘要(如公钥指纹)来验证发送方的公钥(语音是一种很好的身份验证机制)

如果对等应用程序无法使用SAS验证公钥,则应采用首次使用信任(TOFU)策略并练习密钥连续性。古特曼在他的书中详细论述了安全多样化战略


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

这只是一个演示级别的细节。您可以按自己喜欢的方式对其进行编码,包括原始、十六进制、Base32或Base64。真正的威胁是确保您的对等方收到您发送的公钥(如前所述)


还需要注意的是,隐私可能是一个问题,就像在一个受压迫国家的持不同政见者一样。持不同政见者和压迫性政权不是唯一的使用案例,它也可能是一个令人担忧的问题


我曾经在美国联邦政府的一次审计中失败,因为我泄露了一个电子邮件地址。在本例中,电子邮件地址与密钥一起位于用户证书中。(证书所做的只是通过“授权”签名将公钥绑定到身份上)。

据我所知,公钥被称为公钥是有原因的。您可以安全地发送、发布它们,这就是它们的用途。正如贝雷尔所说,公钥是公开的。但问题是中间人攻击者可以将自己的公钥发送到客户端,从而彻底击败该方案。这里有一些关于这个问题的讨论: