我正在为我的公司销售的智能卡编写CSP库(用于CryptoAPI)。
我对私钥的AT_SIGNATURE密钥类型和CALG_RSA_SIGN算法的区别提出了疑问( AT_KEYEXCHANGE和CALG_RSA_KEYX也是一样)。
我知道在MSDN站点上写了什么,但是如果任何一个CALG_RSA.算法是在对CPGenKey()函数的调用中指定的?我的意思是它应该生成会话RSA私钥,还是应该生成密钥并保存在卡上?或者它依赖于在CPAcquireContext()调用(CRYPT_VERIFY_CONTEXT Ie)上指定的标志。而AT_SIGNATURE应该被定义为“默认签名算法”,对于我们的卡来说,哪种算法是RSA?
谢谢
发布于 2014-07-22 08:11:14
这不是我的答案,只是在网上找到了一个好解释:
AT_SIGNATURE密钥仅用于签名消息。它不能用于包装(导出)会话密钥。AT_KEYEXCHANGE密钥可用于这两种用途。因此,如果您希望只使用1(1)个密钥对,那么您肯定需要AT_KEYEXCHANGE密钥对。 您还需要了解一些安全含义--以及为什么使用两个密钥比使用相同的密钥对更好: 通常情况下,你不应该透露你的签名私钥。如果它丢失了,您只需生成一个新的签名密钥对,并从那个时间点开始使用它。另一方面,您通常需要备份密钥交换密钥,因为没有该密钥,您将来就无法解密消息(如果私钥丢失了)。然而,备份意味着密钥可能提供给其他人--他们现在可以签署据称来自您的消息--而您可能不想这样做。如果在这两个操作中使用不同的密钥对,则可以进行安全签名(您的签名私钥永远不会熄灭),并且仍然可以备份您的密钥交换密钥。 关于生成这些密钥的另一个注意事项:由于您不希望您的签名密钥知道,所以当您使用CryptGenKey(AT_SIGNATURE)生成签名密钥时,您不应该设置标志KEY_EXPORTABLE或KEY_ARCHIVABLE,您可能需要额外的保护并添加CRYPT_USER_PROTECTED,所以每次使用签名密钥时,用户都知道它。另一方面,当使用CryptGenKey(AT_KEYEXCHANGE)生成密钥交换密钥时,您应该立即备份它:设置标志CRYPT_ARCHIVABLE并立即导出用于备份的密钥。(此标志只允许在创建-之后导出密钥一次,因此它比允许通过设置CRYPT_EXPORTABLE随时导出更安全。) Laszlo公司
https://stackoverflow.com/questions/3568695
复制相似问题