Encryption 如何将RSA公钥上载到HSM(使用PKCS#11库)?

Encryption 如何将RSA公钥上载到HSM(使用PKCS#11库)?,encryption,cryptography,pkcs#11,hsm,Encryption,Cryptography,Pkcs#11,Hsm,我对使用PKCS#11库很陌生,所以也许有经验的人可以把事情弄清楚 我想做以下工作: 上载到HSM现有RSA公钥(在PC上生成) 然后使用这个上传的密钥包装在HSM上生成的对称密钥 我知道如何生成对称密钥,但如何上载现有的RSA公钥 使用PKCS#11库甚至可以做到这一点吗 在这里似乎也有类似的问题,但它使用的是在HSM上生成的RSA密钥对。我需要自己将RSA公钥上传到HSM。我们可以使用PKCS#11的C#u CreateObject函数将公钥导入到HSM。 这可以从 函数->对象管理函数-

我对使用PKCS#11库很陌生,所以也许有经验的人可以把事情弄清楚

我想做以下工作:

  • 上载到HSM现有RSA公钥(在PC上生成)
  • 然后使用这个上传的密钥包装在HSM上生成的对称密钥
  • 我知道如何生成对称密钥,但如何上载现有的RSA公钥

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


    在这里似乎也有类似的问题,但它使用的是在HSM上生成的RSA密钥对。我需要自己将RSA公钥上传到HSM。

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

    函数->对象管理函数->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) {
    .
    .
    }
    

    是的,当然,这是可能的。创建一个“公钥”类型的新对象。细节取决于您试图使用的API。但我们真的可以声明任意HSM允许公钥导入吗?API是PKCS#11。哪种API方法允许您创建此公钥?GenerateKey?@EugeneMayevski'AlliedBits您指的是哪种API,如果有的话?我不知道该怎么做。有标准的API调用吗?@JonasJnz你知道吗?