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

时间:2016-05-17 10:21:34

标签: encryption rsa signing crypto++

我有一个程序A需要向程序B1发送消息。消息必须加密,并且还要签名。这意味着只有B1可以解码,他必须确保消息来自A。

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

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

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

2)实际上,在Crypto ++库中,PrivateKey类也包含公钥。有没有办法只加载私钥?

1 个答案:

答案 0 :(得分:1)

  

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

这是一个广泛的话题。根据您的威胁模型和风险状况,您可以执行许多操作。您应该首先研究key management and separation

由于您选择了RSA,因此您可能需要查看Crypto.SE上的Bleichenbacher 1998 “Million message attack” on RSA,并将其改进为30,000条消息(IIRC)。这就是您的威胁模型和风险因素对事物的影响。

  

实际上,在Crypto ++库中,PrivateKey类还包含公钥。有没有办法只加载私钥?

我认为你对钥匙有误解。公钥不能从私钥中删除。

公钥是{n,e}对,私钥是{n,e,d}{n,e,d,p,q,dp,dp,u}。如果您删除ne,则私钥将无效。如果您单独删除e,则需要考虑n以恢复e。另请参阅Stack Overflow上的RSA function generates public key (e) always to 17