【发布时间】:2016-05-17 10:21:33
【问题描述】:
我有一个程序 A 需要向程序 B1 发送消息。消息必须加密并签名。也就是说只有 B1 可以解码,他必须确定消息来自 A。
此外,B1 不应该能够加密消息并在同一程序的另一个实例 B2 中扮演 A 的角色。
理论上,应该可以使用单个 RSA 密钥对,一个密钥用于 A,一个密钥用于 B1。一旦被 B 解码,如果恢复的消息经过验证(例如通过散列函数),则它一定是由 A 发送的,而 A 没有向任何人透露其密钥。在这种情况下,两个密钥都是私有的(这意味着它们必须在安全通道中交换)
1) 是否建议这样做,或者是否有强烈的论据支持使用独立的密钥对进行单独的加密和签名步骤?
2) 实际上,在 Crypto++ 库中,PrivateKey 类也包含公钥。有没有办法只加载私钥?
【问题讨论】:
-
尝试安全堆栈交换似乎是个好主意。当然,为了让 RSA 工作,公钥需要完全公开。如果双方都知道私钥-公钥对,那么
PrivateKey类也包含公钥又有什么关系呢?我没有发现任何重大的安全漏洞——但这一切似乎都没有动机。即使安全,使用 RSA 作为对称密钥密码也不会很有效。 -
@JohnColeman :不应允许 B 创建任何这些消息。他应该只能解密和验证它们。我将此添加到问题中,因为这显然会增加不对称性。
-
在那种情况下,我不知道您所说的“两个密钥都是私有的(这意味着它们必须在安全通道中交换)”是什么意思,所以密钥不是毕竟都是在安全通道上交换的?无论如何-您确实应该在此处删除此问题并将其发布到安全堆栈交换。对于安全问题,您需要的东西比程序员的即兴预感更好。
-
第三方应该无法解密来自 A 的消息。这意味着 B 的密钥(解密密钥)是私有的。但是第三方不应该能够向 B 发送消息并扮演 A 的角色。这意味着 A 的密钥(签名)也是私有的。
标签: encryption rsa signing crypto++