Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encryption 对于RSA加密,我是否应该使用相同的证书对消息进行签名和加密?_Encryption_Rsa_Signing - Fatal编程技术网

Encryption 对于RSA加密,我是否应该使用相同的证书对消息进行签名和加密?

Encryption 对于RSA加密,我是否应该使用相同的证书对消息进行签名和加密?,encryption,rsa,signing,Encryption,Rsa,Signing,如果我想使用X509证书对邮件进行签名和加密,是否有理由不使用同一证书进行加密和签名 更新:回顾过去,我想这一定是我问过的最愚蠢的问题了。很抱歉。X509证书包含公钥。要加密,请使用收件人的公钥,该公钥可能是从其证书中获得的。要签名,您使用私钥,可能来自安全存储。收件人使用您的公钥(可能来自您的证书)验证签名。这些是基础。发件人使用自己的私钥对邮件进行签名。邮件使用收件人公钥加密。证书包含公钥。据推测,发送方公钥(对应于用于签名消息的发送方私钥)也表示在证书中 接收方使用自己的私钥(对应于其证书

如果我想使用X509证书对邮件进行签名和加密,是否有理由不使用同一证书进行加密和签名


更新:回顾过去,我想这一定是我问过的最愚蠢的问题了。很抱歉。

X509证书包含公钥。要加密,请使用收件人的公钥,该公钥可能是从其证书中获得的。要签名,您使用私钥,可能来自安全存储。收件人使用您的公钥(可能来自您的证书)验证签名。这些是基础。

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

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

话虽如此,您可能会设想一个通用场景,每个人都可以发送和接收电子邮件。因此,每个人都有一个用于加密和解密电子邮件的密钥对(证书中有公共部分)(Bob的公钥用于加密发送给Bob的电子邮件,Bob使用相应的私钥对其进行解密,即读取电子邮件)。此外,每个人都有签名的密钥对(Bob使用他的私钥对他发送的消息进行签名,Alice使用Bob的公钥验证据称由Bob计算的签名)。 问题是:Bob会有两个密钥对(一个用于加密/解密,一个用于签名/验证),还是只有一个密钥对用于两个作业

RSA公共加密算法和RSA签名算法恰好可以使用同一种密钥,在逻辑上称为“RSA密钥”。所以这是可行的,事实上它经常发生


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

谢谢。我正在编写一些Windows身份基础(WIF)代码。我陷入了让框架运行的细节中,以至于我忘记了使用证书的基本操作!感谢您解决这一问题。然而,你的意思是“方向”中的“解密”将用于加密的所有私钥的副本保存在一个安全的地方,不是吗?