使用RSA加密时,我应该使用相同的证书来签名和加密消息吗?

5
如果我想使用X509证书对消息进行签名和加密,是否有任何理由不使用相同的证书进行加密和签名?
更新:回过头来看,我认为这一定是我在SO上问过的最愚蠢的问题。很抱歉。
2个回答

5
发送方使用自己的私钥对消息进行签名。消息使用收件人公钥加密。证书包含公钥。假设发送者的公钥(与用于签署消息的发送者私钥相对应)也包含在证书中。
接收方使用自己的私钥(对应于其证书中的公钥)解密传入的消息。接收方使用发送者证书中的发送者公钥来验证签名。
话虽如此,您可以想象一个通用的情况,每个人都可以发送和接收电子邮件。因此,每个人都有一对密钥(其中公共部分在证书中),用于加密和解密电子邮件(Bob的公钥用于加密发送给Bob的电子邮件,而Bob使用相应的私钥将它们解密,即阅读电子邮件)。此外,每个人都有一对用于签名的密钥(Bob使用他的私钥签名他发送的消息,Alice使用Bob的公钥验证据称由Bob计算的签名)。
问题是:Bob会有两个密钥对(用于加密/解密和签名/验证),还是仅使用一个密钥对来完成这两个工作?
恰好,RSA公共加密算法和RSA签名算法可以使用同一类型的密钥,称为“RSA密钥”。因此,这是可行的,并且实际上经常发生。
然而,一般来说,签名密钥和加密密钥具有不同的生命周期和管理程序。在商业环境中,方向会在保险柜中保存用于加密的所有私钥的副本,因为丢失加密密钥意味着失去数据。员工可能会变得“不可用”(员工被解雇,员工退休,员工被公共汽车撞击……)。相反,当签名密钥丢失时,以前发出的签名仍然是有效和可验证的,因此只需创建新的密钥对即可生成其他签名。此外,只有没有密钥在某个地方的情况下,数字签名才可能具有强有力的法律地位。因此,一般建议将加密和签名密钥分开。使用相同的密钥来完成两者是近似值,可能会产生不需要的副作用(例如数据丢失或缺乏法律价值)。根据上下文,这可能是个问题或不是个问题。

感谢您处理这个有趣的方面。但是,您在“该方向保留用于加密的所有私钥的副本以保护它们”中的“保护”一词中是指“解密”,对吗? - efie

1

X509证书包含公钥。要进行加密,您需要使用收件人的公钥,该公钥通常从其证书中获取。要签名,您需要使用自己的私钥,通常从安全存储中获取。收件人使用您的公钥(通常从您的证书中获取)验证签名。这些是基础知识。


谢谢。我正在处理一些Windows身份基础(WIF)代码。我被使框架正常运行的细节所困扰,以至于忘记了我在证书方面要做什么基本工作! - Vivian River

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接