2017-01-17 5 views
0

PKCS # 11을 통해 보안 카드에 ECC 키 쌍을 생성하려고합니다. 함수 2B 06 09 24 03 03 02 08 01 01 07C_GenerateKeyPair가 오류를 반환하는 이유는 무엇입니까 (PKCS # 11)?

인 곡선 BrainpoolP256r1한다 사용될 (1.3.36.3.3.2.8.1.1.7)는 상기 DER 인코딩된다

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를 반환합니다.

어떤 속성이 잘못 될 수 있는지 전혀 알지 못합니다. 나는 그 정보가 열악하다는 것을 알고 있지만, 나는 다른 것을 시도했고 여전히이 오류가있다. 근본적으로 잘못된 것이 있습니까?

답변

1

다른 곡선이 작동한다고 가정하면 곡선이 단순히 카드/PKCS # 11 모듈에 설치되지 않은 것일 수 있습니다. 이 경우 다른 곡선 (예 : P-256)을 시도하거나 이름 (OID) 대신 값으로 도메인 매개 변수를 명시 적으로 지정해야합니다.