Crypto++ RSA - 使用相同的密钥对加密和签名

Crypto++ RSA - Encrypt and sign with the same key pair

我有一个程序A需要向程序B1发送消息。消息必须加密并签名。也就是说只有B1可以解码,他必须确定消息来自A.

此外,B1 不应该能够加密消息并以 A 的角色处理同一程序的另一个实例 B2。

理论上,应该可以使用单个 RSA 密钥对,一个密钥用于 A,一个密钥用于 B1。一旦被 B 解码,如果恢复的消息被验证(例如通过哈希函数),则它一定是由 A 发送的,A 没有向任何人透露其密钥。在那种情况下,两个密钥都是私有的(这意味着它们必须在安全通道中交换)

1) 这是推荐的还是有强烈的论据支持使用独立的密钥对进行单独的加密和签名步骤?

2) 实际上,在 Crypto++ 库中,PrivateKey class 还包含 public 密钥。有没有办法只加载私钥?

Is this recommended or is there a strong argument in favor of having separate encryption and signing steps with independent key pairs?

这是一个广泛的话题。根据您的威胁模型和风险态势,您可以做很多事情。您可能应该从研究 key management and separation.

开始

既然您选择了 RSA,那么您可能想看看 Crypto.SE 上的 Bleichenbacher 1998 “Million message attack” on RSA 并关注它对 30,000 条消息的改进 (IIRC)。这就是您的威胁模型和风险态势因素。


Practically, in the Crypto++ library, the PrivateKey class also contains the public key. Is there a way to load a private key only?

我认为你对按键有误解。 public 密钥无法从私钥中分离出来。

public 密钥是 {n,e} 对,私钥是 {n,e,d}{n,e,d,p,q,dp,dp,u}。如果删除 ne,则私钥将不起作用。如果单独删除 e,则需要分解 n 才能恢复 e。另请参阅 Stack Overflow 上的