6

通过套接字将 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);
4

1 回答 1

5

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

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

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

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

使用 PKI 和公共 CA 在 Internet 上以不同程度的成功“解决”了密钥分发问题。例如,请参阅 RFC 5280、Internet X.509 公钥基础设施证书和证书撤销列表 (CRL) 配置文件,了解它应该如何工作;并查看 Peter Gutmann 的Engineering Security,了解它在实践中是如何失败的(有时以惊人的方式)。

对于不使用“信任根”或 PKI 的点对点应用程序,最新趋势是 (1) 在初始消息中使用短身份验证字符串 (SAS),以及 (2) 将所有后续会话与过去的会话联系起来(基本上从第一次会议开始形成一个链条)。在初始消息期间,接收者使用语音通过读回一个小摘要(如公钥指纹)来验证来自发送者的公钥密钥(语音是一种很好的身份验证机制)。

如果您的点对点应用程序无法使用 SAS 来验证公钥,那么您应该采用首次使用时信任 (TOFU) 策略并练习密钥连续性。Gutmann 在他的《工程安全》一书中详细介绍了安全多样化策略。


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

这只是一个演示级别的详细信息。您可以使用任何您喜欢的方式对其进行编码,包括原始、十六进制、Base32 或 Base64。真正的威胁是确保您的对等方收到您发送的公钥(正如ntoskrnl指出的那样)。


另请注意,隐私可能是一个问题,就像受压迫国家的持不同政见者一样。持不同政见者和压迫政权不是唯一的用例,它也可能是认证和认可 (C&A)的一个问题。

我曾经因为泄露了一个电子邮件地址而未能通过美国联邦的审计。在这种情况下,电子邮件地址与密钥一起在用户证书中。(证书所做的只是通过两者上的“权威”签名将公钥绑定到身份)。

于 2014-01-10T04:12:10.653 回答