【问题标题】:Why does C_GenerateKeyPair return error (PKCS#11)?为什么 C_GenerateKeyPair 返回错误(PKCS#11)?
【发布时间】:2017-01-18 08:25:56
【问题描述】:

我想通过 PKCS#11 在安全卡上创建 ECC 密钥对。使用的曲线为BrainpoolP256r1(1.3.36.3.3.2.8.1.1.7),DER编码为06 09 2b 24 03 03 02 08 01 01 07

函数是:

CK_RV create_ECC_key_pair()
{
     CK_RV rv;
     CK_OBJECT_HANDLE publicKey, privateKey;
     CK_MECHANISM mechanism = {
          CKM_EC_KEY_PAIR_GEN, NULL_PTR, 0
     };

     CK_BYTE subject[] = "myKey";
     CK_BYTE id[] = {0xa1};
     CK_BBOOL xtrue = CK_TRUE;
     CK_BBOOL xfalse = CK_FALSE;
     CK_BYTE ecparams[] = {0x06, 0x09, 0x2b, 0x24, 0x03, 0x03, 0x02, 0x08, 0x01, 0x01, 0x07};

     CK_ATTRIBUTE publicKeyTemplate[] = {
         {CKA_LABEL,      subject,     sizeof(subject)},
         {CKA_TOKEN,      &xtrue,      sizeof(xtrue)},
         {CKA_MODIFIABLE, &xfalse,     sizeof(xfalse)},
         {CKA_EC_PARAMS,  &ecparams,   sizeof(ecparams)}
     };

     CK_ATTRIBUTE privateKeyTemplate[] = {
          {CKA_TOKEN,        &xtrue,      sizeof(xtrue)},
          {CKA_MODIFIABLE,   &xfalse,     sizeof(xfalse)},
          {CKA_LABEL,        subject,     sizeof(subject)}
     };

     rv = FunctionPtr->C_GenerateKeyPair(Session,
                            &mechanism,
                            publicKeyTemplate, 4,
                            privateKeyTemplate, 3,
                            &publicKey,
                            &privateKey);
     if (rv != CKR_OK) 
     {
        printf("Error C_GenerateKeyPair (ECC): 0x%X\n", rv);
        return rv;
     }

     return CKR_OK;
}

C_GenerateKeyPair 调用返回 0x13 = CKR_ATTRIBUTE_VALUE_INVALID

我不知道哪个属性可能是错误的。 我知道信息很差,但我尝试了不同的方法,仍然有这个错误。有什么根本错误吗?

【问题讨论】:

    标签: c cryptography pkcs#11 key-pair


    【解决方案1】:

    假设其他曲线确实有效,很可能曲线根本没有安装在卡/PKCS#11 模块上。在这种情况下,您可以尝试另一条曲线(例如 P-256),或者您应该明确地按值而不是按名称 (OID) 给出域参数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-09
      相关资源
      最近更新 更多