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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何将公共RSA密钥上传到HSM(使用PKCS#11库)?相关的知识,希望对你有一定的参考价值。

我对使用PKCS#11库非常陌生,所以也许有经验丰富的人可以清理一下。

我想做以下事情:

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

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

这甚至可以使用PKCS#11库吗?

Wrap a secret key with a public key using PKCS#11似乎有类似的问题,但它使用在HSM上生成的RSA密钥对。我需要自己将RSA公钥上传到HSM。

答案

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

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

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

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) {
.
.
}

以上是关于如何将公共RSA密钥上传到HSM(使用PKCS#11库)?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用pkcs11接口读取证书的密钥进行RSA

在 Java 中生成 PKCS#1 格式的 RSA 密钥

如何从字符串获取 PKCS8 RSA 私钥/从 XML 获取 RSA 密钥对

如何在 microsoft azure vault 中配置 RSA HSM 私钥和公钥?

如何使用javascript进行RSA/ECB/PKCS1Padding算法加密

RSA 私钥的 PKCS#1 和 PKCS#8 格式 [关闭]