加密API中的Exchange密钥和签名密钥有什么区别?

4
在.NET加密API中,我注意到CspParameters对象具有一个KeyNumber属性,可用于指定密钥是签名密钥还是交换密钥。
就RSA密钥而言,这两者之间是否有任何真正的区别?具体而言,如果我使用交换密钥进行签名,生成的密钥是否存在不适合或不安全的问题?

你是如何传输密钥的?PFX/P12?令牌? - Raj
@Raj - 我正在将密钥导出为Csp Blob。然后,我使用从用户密码派生的单独AES密钥对私钥进行加密,并将其存储在数据库中。 - Eric Petroelje
1个回答

1
您不应该使用交换密钥进行签名。根据MSDN,交换密钥是分发给其他人的,以便他们加密内容并将其发送给您。如果他们想要签署消息以表示他们发送了它,则会使用他们自己的私钥(签名密钥)进行签名,并使用您的公钥进行加密。按照Diffie-Hellman术语,如果您使用公钥对东西进行签名,然后与其他人分发/交换它们,他们将能够签署消息,使其似乎来自您。只需将交换密钥视为您的公钥,将签名密钥视为您的私钥即可。

如果您正在使用内置的安全性来定义谁可以访问和谁不能访问密钥,无论他们是否可以使用私钥或公钥以及用途是什么,我认为这很适用。在我的情况下,我正在导出密钥以供其他地方使用,因此我更关心密钥本身的属性,而不是Crypto API管理密钥周围安全性的方式(希望这样说得清楚)。 - Eric Petroelje

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