如何将公共 RSA 密钥上传到 HSM(使用 PKCS#11 库)



我对使用 PKCS#11 库很陌生,所以也许有更多经验的人可以解决问题。

我想执行以下操作:

  1. 上传到 HSM 现有 RSA 公钥(在 PC 上生成)
  2. ,稍后使用此上传的密钥包装在 HSM 上生成的对称密钥。

我知道如何生成对称密钥,但如何上传现有的 RSA 公钥?

使用 PKCS#11 库甚至可以做到这一点吗?

在使用PKCS#11将密钥包装为公钥时似乎也有类似的问题,但它使用在HSM上生成的RSA密钥对。我需要自己将 RSA 公钥上传到 HSM。

我们可以使用 PKCS#11 的函数C_CreateObject将公钥导入 HSM。这可以从

RSA PKCS#11函数 -> 对象管理函数 -> C_CreateObject

还有一个加载公钥的示例。但它需要令牌的支持才能从加密库加载公钥。

CK_SESSION_HANDLE hSession;
CK_OBJECT_HANDLE hKey;
CK_OBJECT_CLASS keyClass = CKO_PUBLIC_KEY;
CK_KEY_TYPE keyType = CKK_RSA;
CK_BYTE modulus[] = {... };
CK_BYTE exponent[] = {... };
CK_ATTRIBUTE keyTemplate[] = {
    {CKA_CLASS, &keyClass, sizeof(keyClass)}
    ,
    {CKA_KEY_TYPE, &keyType, sizeof(keyType)}
    ,
    {CKA_WRAP, &true, sizeof(true)}
    ,
    {CKA_MODULUS, modulus, sizeof(modulus)}
    ,
    {CKA_PUBLIC_EXPONENT, exponent, sizeof(exponent)}
};
CK_RV rv;
/* Create an RSA public key object */
rv = C_CreateObject(hSession, &keyTemplate, 5, &hKey);
if (rv == CKR_OK) {
.
.
}

最新更新