【问题标题】:MS CSP: Difference between AT_SIGNATURE and RSA_KEY_SIGN (and also AT_KEYEXCHANGE and CALG_RSA_KEYX)MS CSP:AT_SIGNATURE 和 RSA_KEY_SIGN(以及 AT_KEYEXCHANGE 和 CALG_RSA_KEYX)之间的区别
【发布时间】:2010-08-25 17:39:19
【问题描述】:

我正在为我公司销售的智能卡编写 CSP 库(用于 CryptoAPI)。

我对私钥的 AT_SIGNATURE 密钥类型和 CALG_RSA_SIGN 算法之间的区别有疑问(AT_KEYEXCHANGE 和 CALG_RSA_KEYX 也一样)。

我知道 MSDN 网站上写的是什么,但是如果在调用 CPGenKey() 函数时指定了 CALG_RSA... 算法中的任何一个,CSP DLL 应该如何工作?我的意思是它应该生成会话 RSA 私钥还是应该生成密钥并将其保存在卡上?或者它可能取决于 CPAcquireContext() 调用中指定的标志(即 CRYPT_VERIFY_CONTEXT

谢谢

【问题讨论】:

    标签: windows cryptography cryptoapi rsacryptoserviceprovider


    【解决方案1】:

    不是我的回答,只是在网上找到了一个good explanation

    AT_SIGNATURE 密钥 acn 仅用于签署消息。它不能用于 包装(导出)会话密钥。 AT_KEYEXCHANGE 键可用于两个目的。 因此,如果您只想为两者使用 1(一个)密钥对,您肯定需要 AT_KEYEXCHANGE 密钥对。

    您还需要了解一些安全隐患 - 以及为什么要使用两个 密钥比为两者使用相同的密钥对更好:

    通常你不应该透露你的签名私钥。如果丢失了,你 只需生成一个新的签名密钥对并从那个时间点开始使用它。 另一方面,您通常需要备份您的密钥交换密钥, 因为没有它,您将来无法解密消息(如果 私钥丢失)。但是,备份意味着密钥可能对 其他人 - 现在可以签署据称来自你的消息 - 和 你不会想要的。 如果您对这两个操作使用不同的密钥对,则可以确保安全 签名(您的签名私钥永远不会消失)并且仍然可以备份您的 密钥交换密钥。

    关于生成这些密钥的另一个注意事项: 由于您不想知道您的签名密钥,因此当您生成它时 CryptGenKey(AT_SIGNATURE) 你不应该设置标志 KEY_EXPORTABLE 或 KEY_ARCHIVABLE 并且您可能需要额外的保护并添加 CRYPT_USER_PROTECTED,因此每次使用签名密钥时,用户都知道它。 另一方面,当使用生成密钥交换密钥时 CryptGenKey(AT_KEYEXCHANGE) 你应该立即备份它:设置标志 CRYPT_ARCHIVABLE 并立即导出密钥以进行备份。 (这个标志允许 只导出一次密钥 - 就在它创建之后 - 所以它更多 比通过设置 CRYPT_EXPORTABLE 允许随时导出更安全。)

    拉兹洛·埃尔特托 SafeNet, Inc.

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-05
      • 2015-09-10
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      • 2010-12-19
      • 2011-04-16
      相关资源
      最近更新 更多