MS CSP:AT_SIGNATURE 和 RSA_KEY_SIGN 之间的差异(以及 AT_KEYEXCHANGE 和 CALG_RSA_KEYX)

发布于 2024-09-16 03:48:28 字数 386 浏览 2 评论 0原文

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

我对私钥的 AT_SIGNATURE 密钥类型和 CALG_RSA_SIGN 算法之间的差异有疑问(AT_KEYEXCHANGE 和 CALG_RSA_KEYX 也相同)。

我知道 MSDN 网站上写的是什么,但是如果在调用 CPGenKey() 函数时指定了 CALG_RSA... 算法中的任何一个,那么 CSP DLL 具体应该如何工作?我的意思是它应该生成会话 RSA 私钥还是应该生成密钥并将其保存在卡上?或者也许它取决于 CPAcquireContext() 调用(即 CRYPT_VERIFY_CONTEXT )上指定的标志,并且 AT_SIGNATURE 应该定义为“签名的默认算法”,对于我们的卡来说是 RSA?

谢谢

I'm writing CSP library (for CryptoAPI) for smartcards my company sells.

I have question about difference between AT_SIGNATURE key type and CALG_RSA_SIGN algorithm for private key (the same also for AT_KEYEXCHANGE and CALG_RSA_KEYX).

I know what is written on MSDN site, but how specifically CSP DLL should work if either of CALG_RSA... algorithms is specified in call for CPGenKey() function? I mean should it generate session RSA private key or the key should be generated and saved on card? Or maybe it depends on flags specified on CPAcquireContext() call (CRYPT_VERIFY_CONTEXT ie.) and AT_SIGNATURE should be defined as "default algorithm for signature", which for our cards is RSA?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

热情消退 2024-09-23 03:48:28

这不是我的答案,只是找到了很好的解释< /a> 在互联网上:

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

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

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

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

拉斯洛·埃尔特托
SafeNet 公司。

It's not my answer, just found a good explanation on the Internet:

AT_SIGNATURE key acn ONLY be used to sign a message. It cannot be used to
wrap (export) session key. AT_KEYEXCHANGE key can be used for BOTH purposes.
So if you want to use only 1 (one) key pair for both, you definitely need
AT_KEYEXCHANGE key pair.

You also need to understand some security implications - and why using two
keys are better than using the same key pair for both:

Normally you should NEVER reveal your signing private key. If it is lost, you
simply generate a new signing key pair and use that from that point of time.
On the other hand, you normally need to back up your key exchange key,
because without that you cannot decrypt messages in the future (if the
private key is lost). However, backup means that the key may be available to
someone else - who now could sign messages purportedly coming from you - and
you wouldn't want that.
If you use different key pairs for the two actions you can have secure
signing (your signing private key never goes out) and still can back up your
key exchange key.

One more note on generating these keys:
Since you don't want your signing key know, when you generate it with
CryptGenKey(AT_SIGNATURE) you should never set flags KEY_EXPORTABLE or
KEY_ARCHIVABLE and you may want the extra protection and add
CRYPT_USER_PROTECTED, so every time the signing key is used the user knows it.
On the other hand, when generating the key exchange key using
CryptGenKey(AT_KEYEXCHANGE) you should immediately back it up: set the flag
CRYPT_ARCHIVABLE and IMMEDIATELY export the key for backup. (This flag allows
to export the key only once - right after it is created -, so it is more
secure than allowing to be exported any time by setting CRYPT_EXPORTABLE.)

Laszlo Elteto
SafeNet, Inc.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文