【问题标题】:With RSA encryption, should I use the same certificate to sign and encrypt a message?使用 RSA 加密,我应该使用相同的证书来签署和加密消息吗?
【发布时间】:2010-05-20 18:02:54
【问题描述】:

如果我想使用 X509 证书对消息进行签名和加密,是否有任何理由不使用相同的证书进行加密和签名?

更新:回首往事,我认为这一定是我在 SO 上问过的最愚蠢的问题。对不起。

【问题讨论】:

    标签: encryption rsa signing


    【解决方案1】:

    发件人使用他自己的私钥对消息进行签名。消息使用 recipient 公钥加密。证书包含公钥。据推测,发件人的公钥(对应于用于签署消息的发件人私钥)也在证书中表示。

    收件人使用他自己的私钥(对应于他证书中的公钥)来解密传入的消息。收件人使用发件人公钥(来自发件人证书)来验证签名。

    话虽如此,您可以设想一个通用场景,每个人都可以发送和接收电子邮件。因此,每个人都有一个密钥对(在证书中包含公共部分),用于加密和解密电子邮件(Bob 的公钥用于加密发送给 Bob 的电子邮件,Bob 使用相应的私钥解密它们,即阅读电子邮件)。 另外,每个人都有一个用于签名的密钥对(Bob 使用他的私钥对他发送的消息进行签名,Alice 使用 Bob 的公钥来验证据称由 Bob 计算的签名)。 那么问题来了:Bob 是否有两对密钥(一对用于加密/解密,一对用于签名/验证),还是只有一对用于这两项工作的密钥对?

    碰巧 RSA 公共加密算法和 RSA 签名算法可以使用同一种密钥,称为(从逻辑上讲)“RSA 密钥”。所以这是可行的,实际上它经常发生。

    但是,一般来说,签名密钥和加密密钥具有不同的生命周期和管理程序。在业务环境中,该方向将用于加密的所有私钥的副本保存在安全中,因为丢失加密密钥意味着丢失数据。员工可能会变得“不可用”(员工被解雇,员工退休,员工被公共汽车撞到......)。相反,当签名密钥丢失时,之前发出的签名仍然有效且可验证,因此只需创建一个新的密钥对即可生成其他签名。此外,只有在某处保险箱中没有密钥副本的情况下,数字签名才能获得强大的法律地位。因此,一般建议是将加密密钥和签名密钥分开。对两者使用相同的密钥是一种近似值,可能会产生不必要的副作用(例如数据丢失或缺乏法律价值)。根据具体情况,这可能是也可能不是问题。

    【讨论】:

    • 感谢您解决这个有趣的问题。但是,您的意思是“方向将用于加密的所有私钥的副本保存在安全中”中的“解密”,不是吗?
    【解决方案2】:

    X509 证书包含公钥。要进行加密,您可以使用可能从他们的证书中获得的收件人的公钥。要签名,您使用您的私钥,可能来自安全商店。收件人使用您的公钥验证签名,可能来自您的证书。这些是基础。

    【讨论】:

    • 谢谢。我正在处理一些 Windows Identity Foundation (WIF) 代码。我陷入了使框架运行的细节中,以至于我忘记了我对证书所做的基本操作!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2020-07-14
    • 2017-11-08
    • 2012-11-10
    • 1970-01-01
    相关资源
    最近更新 更多