c - 在 PKCS#11 中使用 key 对象句柄

标签 c encryption pkcs#11 hsm

我正在尝试使用供应商提供的 PKCS#11 函数与 HSM 进行交互。 我使用以下一系列函数来生成 key 、加密和解密数据。 以下序列效果很好。

  1. C_Initialize
  2. C_OpenSession
  3. C_Login
  4. C_GenerateKey//3DES KEY
  5. C_EncryptInit
  6. C_Encrypt
  7. C_DecryptInit
  8. C_Decrypt
  9. C_Logout
  10. C_CloseSession

我的问题:

  1. 在使用 C_Logout 和 C_CloseSession 之后,有没有办法通过重新登录并使用相同的登录凭据再次打开 session 来再次使用相同的 KEY(之前生成的)?

  2. 当我使用 C_CreateObject 时,它会创建 session 对象并在使用 C_CloseSession 时销毁它吗?

最佳答案

Question: After using C_Logout & C_CloseSession is there a way to reuse same KEY(generated earlier) again by logging back and opening session again with same login credentials?

是的,只需将 CKA_TOKEN 设置为 CK_TRUE 并使用 CKA_LABEL 提供标签以使用 C_FindObjects 搜索它.


Question: When I use C_CreateObject does it create session object and destroy it on using C_CloseSession?

嗯,是的,根据 PKCS#11 规范(v2.20、10.4、表 21):

CKA_TOKEN is CK_TRUE if object is a token object; CK_FALSE if object is a session object. Default is CK_FALSE.


请注意,您的 token 可能不允许设置所有可能的属性或属性组合,并且可能有内存和其他限制。

关于c - 在 PKCS#11 中使用 key 对象句柄,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20410567/

相关文章:

c: valgrind "Conditional jump or move depends on uninitialised value(s)"

c - ulimit -c unlimited 命令如何使用,它有什么作用?

java - 如何在 Java 中将 HMAC key 指定为十六进制

java - GNU 加密货币 : JCE cannot authenticate the provider GNU-CRYPTO

c++ - 如何从USB设备读取证书并将其发送到浏览器,如firefox

c++ - std::bad_alloc 使用 Botan 进行 PKCS#11

c - 为什么在输入字符之前需要 %d?

c++ - 为什么我的解密函数更加加扰密文,而不是解密它?

encryption - KMIP 和 PKCS#11 有什么关系?

c - 为什么我得到 "Header file missing"(出错)?