암호화 오퍼레이션: GREP11 API
IBM Cloud® Hyper Protect Crypto Services 는 클라우드의 HSM(Hardware Security Module)A physical appliance that provides on-demand encryption, key management, and key storage as a managed service. 에서 실행되는 암호화 기능 세트를 제공합니다. gRPC API 호출(GREP11라고도 함)을 통한 Enterprise PKCS #11(EP11)로 이 기능에 원격으로 액세스하여 암호화 오퍼레이션을 수행할 수 있습니다.
GREP11 함수가 PKCS #11 및 EP11과 어떠한 관련이 있는지에 대한 자세한 정보는 GREP11 소개를 참조하십시오.
GREP11 API는 단일 암호화 단위에 대해 초당 최대 500개의 요청을 처리할 수 있습니다.
API에 액세스
GREP11 API 함수 호출을 수행하기 전에 초기화를 위해 GREP11 API 엔드포인트, 서비스 ID API키, IAM 엔드포인트가 필요합니다. 자세한 정보는 GREP11 API 요청 생성을 참조하십시오.
오류 처리
GREP11 은 오류 처리에 대한 gRPC 스펙에 의존합니다. 오류가 발생하면 gRPC 클라이언트는 message Status 프로토콜 버퍼를
수신합니다.
message Status {
int32 code = 1;
string message = 2;
repeated google.protobuf.Any details = 3;
}
오류 메시지에서
code에는google.rpc.Code필드의 열거형(enum) 값인 상태 코드가 포함되어 있습니다.message에는 개발자에게 발생한 오류 메시지(영어)가 포함됩니다. 사용자에게 표시되는 오류 메시지는google.rpc.Status.details필드에서 로컬화된 상태로 전송되거나 사용자가 로컬화해야 합니다.details는 오류 세부사항을 전달하는 메시지를 나열합니다. 공통 메시지 유형 세트는 API에 사용할 수 있습니다.
GREP11은 Detail 필드를 사용하여 추가 오류 코드 정보를 첨부합니다.
message Grep11Error {
uint64 Code = 1;
string Detail = 2;
bool Retry = 3;
}
Code 필드는 PKCS #11의 CK_RV 값으로 캐스트할 수 있습니다. 이 필드에는 PKCS #11 스펙 에 의해 정의되는 오류 코드 또는 EP11에 의해 정의되는 벤더 확장이 포함됩니다. EP11은 PKCS #11이 정의하는 리턴값의 서브세트만 사용합니다. 자세한 정보는 Enterprise PKCS #11 라이브러리 구조의 10.1.6 리턴 값 절을 참조하십시오.
오류를 처리하는 Golang의 예제 를 사용할 수 있습니다.
GREP11 함수 목록
표에서 별표(*)가 표시된 PKCS #11 함수는 gRPC를 통한 EP11로 구현됩니다. 그 외의 함수는 구현되지 않습니다.
| PKCS #11 | Enterprise PKCS #11 | gRPC를 통한 Enterprise PKCS #11 | 설명 |
|---|---|---|---|
| C_Initialize | 해당사항 없음 | 해당사항 없음 | Cryptoki를 초기화합니다. |
| C_Finalize | 해당사항 없음 | 해당사항 없음 | 기타 Cryptoki 관련 리소스를 정리합니다. |
| C_GetInfo | 해당사항 없음 | 해당사항 없음 | Cryptoki에 대한 일반 정보를 가져옵니다. |
| C_GetFunctionList | 해당사항 없음 | 해당사항 없음 | Cryptoki 라이브러리 함수의 시작점을 가져옵니다. |
| C_GetSlotList | 해당사항 없음 | 해당사항 없음 | 시스템에서 슬롯의 목록을 가져옵니다. |
| C_GetSlotInfo | 해당사항 없음 | 해당사항 없음 | 특정 슬롯에 대한 정보를 가져옵니다. |
| C_GetTokenInfo | 해당사항 없음 | 해당사항 없음 | 특정 토큰에 대한 정보를 가져옵니다. |
| C_WaitForSlotEvent | 해당사항 없음 | 해당사항 없음 | 슬롯 이벤트(토큰 삽입, 제거 등)가 발생할 때까지 대기하십시오. |
| C_GetMechanismList* | m_GetMechanismList | GetMechanismList | 토큰에서 지원되는 메커니즘의 목록을 가져오십시오. |
| C_GetMechanismInfo* | m_GetMechanismInfo | GetMechanismInfo | 특정 메커니즘에 대한 정보를 가져옵니다. |
| C_InitToken | 해당사항 없음 | 해당사항 없음 | 토큰을 초기화합니다. |
| C_InitPIN | 해당사항 없음 | 해당사항 없음 | 일반 사용자의 PIN을 초기화합니다. |
| C_SetPIN | 해당사항 없음 | 해당사항 없음 | 현재 사용자의 PIN을 수정합니다. |
| C_OpenSession | 해당사항 없음 | 해당사항 없음 | 애플리케이션과 특정 토큰 간의 연결을 열고 토큰 삽입을 위해 애플리케이션 콜백을 설정합니다. |
| C_CloseSession | 해당사항 없음 | 해당사항 없음 | 세션을 닫습니다. |
| C_CloseAllSessions | 해당사항 없음 | 해당사항 없음 | 토큰이 있는 모든 세션을 닫습니다. |
| C_GetSessionInfo | 해당사항 없음 | 해당사항 없음 | 세션에 대한 정보를 가져옵니다. |
| C_GetOperationState | 해당사항 없음 | 해당사항 없음 | 세션의 암호화 오퍼레이션 상태를 가져옵니다. |
| C_SetOperationState | 해당사항 없음 | 해당사항 없음 | 세션의 암호화 오퍼레이션 상태를 설정합니다. |
| C_Login | 해당사항 없음 | 해당사항 없음 | 토큰에 로그인합니다. |
| C_Logout | 해당사항 없음 | 해당사항 없음 | 토큰에서 로그아웃합니다. |
| C_CreateObject | 해당사항 없음 | 해당사항 없음 | 오브젝트를 작성합니다. |
| C_CopyObject | 해당사항 없음 | 해당사항 없음 | 오브젝트 사본을 작성합니다. |
| C_DestroyObject | 해당사항 없음 | 해당사항 없음 | 오브젝트를 영구 삭제합니다. |
| C_GetObjectSize | 해당사항 없음 | 해당사항 없음 | 오브젝트 크기(바이트)를 가져옵니다. |
| C_GetAttributeValue* | m_GetAttributeValue | GetAttributeValue | 오브젝트의 속성 값을 가져옵니다. |
| C_SetAttributeValue* | m_SetAttributeValue | SetAttributeValue | 오브젝트의 속성 값을 수정합니다. 부울 속성만 수정할 수 있습니다. |
| C_FindObjectsInit | 해당사항 없음 | 해당사항 없음 | 오브젝트 검색 오퍼레이션을 초기화합니다. |
| C_FindObjects | 해당사항 없음 | 해당사항 없음 | 오브젝트 검색 오퍼레이션을 계속합니다. |
| C_FindObjectsFinal | 해당사항 없음 | 해당사항 없음 | 오브젝트 검색 오퍼레이션을 완료합니다. |
| C_EncryptInit* | m_EncryptInit | EncryptInit | 암호화 오퍼레이션을 초기화합니다. |
| C_Encrypt* | m_Encrypt | 암호화 | 단일 파트의 데이터를 암호화합니다. |
| C_EncryptUpdate* | m_EncryptUpdate | EncryptUpdate | 다중 파트의 암호화 오퍼레이션을 계속합니다. |
| C_EncryptFinal* | m_EncryptFinal | EncryptFinal | 다중 파트의 암호화 오퍼레이션을 완료합니다. |
| 해당사항 없음 | m_EncryptSingle | EncryptSingle | IBM 확장으로, Encrypt의 비표준 변형입니다. 한 번 호출하여 원패스(one pass)로 데이터를 처리합니다. 상태를 암호화된 데이터가 아닌 호스트에 리턴하지 않습니다. |
| 해당사항 없음 | m_ReencryptSingle | ReencryptSingle | IBM 확장으로, Encrypt의 비표준 변형입니다. 원래의 키로 데이터를 복호화하고 클라우드 HSM 내에서 단일 호출의 다른 키로 원시 데이터를 암호화합니다. 상태를 다시 암호화된 데이터가 아닌 호스트에 리턴하지 않습니다. |
| C_DecryptInit* | m_DecryptInit | DecryptInit | 복호화 오퍼레이션을 초기화합니다. |
| C_Decrypt* | m_Decrypt | 복호화 | 단일 파트의 암호화된 데이터를 복호화합니다. |
| C_DecryptUpdate* | m_DecryptUpdate | DecryptUpdate | 다중 파트의 복호화 오퍼레이션을 계속합니다. |
| C_DecryptFinal* | m_DecryptFinal | DecryptFinal | 다중 파트의 복호화 오퍼레이션을 완료합니다. |
| 해당사항 없음 | m_DecryptSingle | DecryptSingle | IBM 확장으로, Decrypt의 비표준 변형입니다. 한 번 호출하여 원패스(one pass)로 데이터를 처리합니다. 상태를 복호화된 데이터가 아닌 호스트에 리턴하지 않습니다. |
| C_DigestInit* | m_DigestInit | DigestInit | 메시지 요약 오퍼레이션을 초기화합니다. |
| C_Digest* | m_Digest | 요약 | 단일 파트 데이터를 요약합니다. 입력 데이터의 길이가 0이 되어서는 안되며, 입력 데이터 위치를 지시하는 포인터가 널이 되어서는 안됩니다. |
| C_DigestUpdate* | m_DigestUpdate | DigestUpdate | 다중 파트의 요약 오퍼레이션을 계속합니다. 입력 데이터의 길이가 0이 되어서는 안되며, 입력 데이터 위치를 지시하는 포인터가 널이 되어서는 안됩니다. |
| C_DigestKey | 해당사항 없음 | 해당사항 없음 | 키를 요약합니다. |
| C_DigestFinal* | m_DigestFinal | DigestFinal | 다중 파트의 요약 오퍼레이션을 완료합니다. |
| 해당사항 없음 | m_DigestSingle | DigestSingle | IBM 확장으로, 비표준 확장이며 DigestInit 및 Digest의 조합으로 되어 있습니다. 한 번 호출하여 중간 요약 상태와 불필요한 라운드트립을 구성하지 않고 원패스(one pass)로 데이터를 요약합니다. |
| C_SignInit* | m_SignInit | SignInit | 서명 오퍼레이션을 초기화합니다. |
| C_Sign* | m_Sign | 서명 | 단일 파트의 데이터를 서명합니다. |
| C_SignUpdate* | m_SignUpdate | SignUpdate | 다중 파트의 서명 오퍼레이션을 계속합니다. |
| C_SignFinal* | m_SignFinal | SignFinal | 다중 파트의 서명 오퍼레이션을 완료합니다. |
| C_SignRecoverInit | 해당사항 없음 | 해당사항 없음 | 서명 오퍼레이션을 초기화합니다. 여기서, 서명으로부터 데이터를 복구합니다. |
| C_SignRecover | 해당사항 없음 | 해당사항 없음 | 단일 파트 데이터를 서명합니다. 여기서, 서명으로부터 데이터를 복구합니다. |
| 해당사항 없음 | m_SignSingle | SignSingle | IBM 확장으로, 비표준 확장이며 SignInit 및 Sign의 조합으로 되어 있습니다. 한 번 호출하여 중간 요약 상태를 구성하지 않고 원패스(one pass)로 데이터를 서명하거나 MAC화합니다. 상태를 결과가 아닌 호스트에 리턴하지 않습니다. |
| C_VerifyInit* | m_VerifyInit | VerifyInit | 확인 오퍼레이션을 초기화합니다. |
| C_Verify* | m_Verify | 확인 | 단일 파트 데이터의 서명을 확인합니다. |
| C_VerifyUpdate* | m_VerifyUpdate | VerifyUpdate | 다중 파트의 확인 오퍼레이션을 계속합니다. |
| C_VerifyFinal* | m_VerifyFinal | VerifyFinal | 다중 파트의 확인 오퍼레이션을 완료합니다. |
| C_VerifyRecoverInit | 해당사항 없음 | 해당사항 없음 | 확인 오퍼레이션을 초기화합니다. 여기서, 서명으로부터 데이터가 복구됩니다. |
| C_VerifyRecover | 해당사항 없음 | 해당사항 없음 | 단일 파트 데이터의 서명을 확인합니다. 여기서, 서명으로부터 데이터가 복구됩니다. |
| 해당사항 없음 | m_VerifySingle | VerifySingle | IBM 확장으로, 비표준 확장이며 VerifyInit 및 Verify의 조합으로 되어 있습니다. 한 번 호출하여 중간 요약 상태를 구성하지 않고 원패스(one pass)로 데이터를 서명하거나 MAC화합니다. 상태를 확인 결과가 아닌 호스트에 리턴하지 않습니다. |
| C_DigestEncryptUpdate | 해당사항 없음 | 해당사항 없음 | 동시에 다중 파트 요약 및 암호화 오퍼레이션을 계속합니다. |
| C_DecryptDigestUpdate | 해당사항 없음 | 해당사항 없음 | 동시에 다중 파트 복호화 및 요약 오퍼레이션을 계속합니다. |
| C_SignEncryptUpdate | 해당사항 없음 | 해당사항 없음 | 동시에 다중 파트 서명 및 암호화 오퍼레이션을 계속합니다. |
| C_DecryptVerifyUpdate | 해당사항 없음 | 해당사항 없음 | 동시에 다중 파트 복호화 및 확인 오퍼레이션을 계속합니다. |
| C_GenerateKey* | m_GenerateKey | GenerateKey | 비밀 키를 생성합니다. |
| C_GenerateKeyPair* | m_GenerateKeyPair | GenerateKeyPair | 공개 키 및 개인 키 쌍을 생성합니다. |
| C_WrapKey* | m_WrapKey | WrapKey | 키를 랩핑(암호화)합니다. |
| C_UnwrapKey* | m_UnwrapKey | UnwrapKey | 키를 랩핑 해제(복호화)합니다. |
| 해당사항 없음 | 해당사항 없음 | RewrapKeyBlob | 새 마스터 키가 커미트될 때 현재 마스터 키로 제어되는 BLOB의 소유권을 새 마스터 키로 전송합니다. 이 함수는 GREP11에서만 지원하는 특수 관리 명령입니다. |
| C_DeriveKey* | m_DeriveKey | DeriveKey | 기본 키에서 키를 파생시킵니다. |
| C_SeedRandom | 해당사항 없음 | 해당사항 없음 | 난수 생성기에 시드 자료를 추가합니다. |
| C_GenerateRandom* | m_GenerateRandom | GenerateRandom | 랜덤 데이터를 생성합니다. 랜덤 데이터의 길이가 0이 되어서는 안되며 랜덤 데이터 위치를 지시하는 포인터가 널이 되어서는 안됩니다. 요청할 수 있는 무작위 데이터의 최대 길이는 백만 바이트입니다. |
| C_GetFunctionStatus | 해당사항 없음 | 해당사항 없음 | 항상 CKR_FUNCTION_NOT_PARALLEL을 리턴하는 레거시 함수입니다. |
| C_CancelFunction | 해당사항 없음 | 해당사항 없음 | 항상 CKR_FUNCTION_NOT_PARALLEL을 리턴하는 레거시 함수입니다. |
지원되는 메커니즘
메커니즘은 암호화 오퍼레이션을 구현하는 프로세스라고도 합니다. 암호화 카드의 펌웨어 레벨에 따라 다를 수 있습니다. 다음 표는 현재 지원되는 메커니즘과 공통 GREP11 함수 카테고리와 연관되는 방식을 보여줍니다.
| 함수 그룹 | 지원되는 메커니즘 |
|---|---|
| 암호화 및 복호화 | CKM_RSA_PKCS1, CKM_RSA_PKCS_OAEP1, CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD, CKM_DES3_ECB, CKM_DES3_CBC, CKM_DES3_CBC_PAD |
| 서명 및 확인 | CKM_RSA_PKCS1, CKM_RSA_PKCS_PSS1, CKM_RSA_X9_311, CKM_SHA1_RSA_PKCS, CKM_SHA256_RSA_PKCS, CKM_SHA224_RSA_PKCS, CKM_SHA384_RSA_PKCS, CKM_SHA512_RSA_PKCS, CKM_SHA1_RSA_PKCS_PSS, CKM_SHA224_RSA_PKCS_PSS, CKM_SHA256_RSA_PKCS_PSS, CKM_SHA384_RSA_PKCS_PSS, CKM_SHA512_RSA_PKCS_PSS, CKM_SHA1_RSA_X9_31, CKM_DSA1, CKM_DSA_SHA1, CKM_ECDSA1, CKM_ECDSA_SHA1, CKM_ECDSA_SHA224, CKM_ECDSA_SHA256, CKM_ECDSA_SHA384, CKM_ECDSA_SHA512, CKM_SHA1_HMAC, CKM_SHA256_HMAC, CKM_SHA384_HMAC, CKM_SHA512_HMAC, CKM_SHA512_224_HMAC, CKM_SHA512_256_HMAC, CKM_IBM_ED25519_SHA5124, CKM_IBM_ECDSA_OTHER2, CKM_IBM_DI리튬3 |
| 요약 | CKM_SHA_1, CKM_SHA224, CKM_SHA256, CKM_SHA384, CKM_SHA512, CKM_SHA512_224, CKM_SHA512_256 |
| 키 생성 또는 키 쌍 생성 | CKM_RSA_PKCS_KEY_PAIR_GEN, CKM_RSA_X9_31_KEY_PAIR_GEN, CKM_DSA_KEY_PAIR_GEN, CKM_DSA_PARAMETER_GEN, CKM_EC_KEY_PAIR_GEN (CKM_ECDSA_KEY_PAIR_GEN), CKM_DH_PKCS_KEY_PAIR_GEN, CKM_DH_PKCS_PARAMETER_GEN, CKM_GENERIC_SECRET_KEY_GEN, CKM_AES_KEY_GEN, CKM_DES2_KEY_GEN, CKM_DES3_KEY_GEN, CKM_IBM_DILITHIUM |
| 랩핑 및 랩핑 해제 | CKM_RSA_PKCS, CKM_RSA_PKCS_OAEP, CKM_AES_ECB, CKM_AES_CBC, CKM_AES_CBC_PAD, CKM_DES3_ECB, CKM_DES3_CBC, CKM_DES3_CBC_PAD |
| 파생 | CKM_ECDH1_DERIVE, CKM_DH_PKCS_DERIVE, CKM_DES3_ECB_ENCRYPT_DATA, CKM_SHA1_KEY_DERIVATION, CKM_SHA224_KEY_DERIVATION, CKM_SHA256_KEY_DERIVATION, CKM_SHA384_KEY_DERIVATION, CKM_SHA512_KEY_DERIVATION, CKM_IBM_BTC_DERIVE |
1: 이 메커니즘에서는 EncryptUpdate, DecryptUpdate 및 DigestUpdate과(와) 같이 업데이트 GREP11 기능을 활용할 수 없는 단일 파트 조작만 지원됩니다.
2: 이 메커니즘은 GREP11 SignSingle 및 VerifySingle 조작에 대해서만 사용 가능합니다.
3: 이 메커니즘은 IBM 4768 암호화 카드에서 지원되지 않으며 SignUpdate 및 VerifyUpdate 조작에 사용할 수 없습니다.
4: 이 메커니즘은 단일 파트 (SignInit, Sign, VerifyInit, Verify), SignSingle 및 VerifySingle 조작을 지원합니다.
지원되는 속성 및 키 유형
GREP11 속성은 오브젝트가 사용되고 액세스될 수 있는 방법을 설정하는 오브젝트 특성을 정의합니다. 다음 표는 지원되는 속성 및 지원되는 여러 가지 키 유형과의 관계를 보여줍니다.
| 속성 | 설명 | 지원되는 키 유형 |
|---|---|---|
| CKA_CHECK_VALUE | 키의 체크섬 | AES 키, DES 키 |
| CKA_복사 가능 | CKA_TRUE로 설정된 경우 PKCS#11 C_CopyObject 함수를 사용하여 오브젝트를 복사할 수 있습니다. | EC 개인 키, EC 공개 키, RSA 개인 키, RSA 공개 키, DH 개인 키, DH 공개 키, DSA 개인 키, DSA 공개 키, AES 키, DES 키, 일반 키 |
| CKA_DECRYPT | 키가 복호화를 지원하는 경우에는 CK_TRUE입니다. | EC 개인 키, RSA 개인 키, DH 개인 키, DSA 개인 키, AES 키, DES 키, 일반 키 |
| CKA_DERIVE | 키가 키 파생을 지원하는 경우에는 CK_TRUE입니다(기타 키는 이 키에서 파생될 수 있음). 기본값은 CK_FALSE입니다. | EC 개인 키, EC 공개 키, RSA 개인 키, RSA 공개 키, DH 개인 키, DH 공개 키, DSA 개인 키, DSA 공개 키, AES 키, DES 키, 일반 키 |
| CKA_EC_PARAMS(CKA_ECDSA_PARAMS) | ANSI X9.62 매개변수 값의 DER 인코딩입니다. | EC 개인 키, EC 공개 키 |
| CKA_ENCRYPT | 키가 암호화를 지원하는 경우에는 CK_TRUE입니다. | EC 공개 키, RSA 공개 키, DH 공개 키, DSA 공개 키, AES 키, DES 키, 일반 키 |
| CKA_EXTRACTABLE | 키가 추출 가능하고 랩핑될 수 있는 경우에는 CK_TRUE입니다. | EC 개인 키, RSA 개인 키, DH 개인 키, DSA 개인 키, AES 키, DES 키, 일반 키 |
| CKA_IBM_PQC_PARAMS | 포스트 양자 암호화 메커니즘의 매개변수를 지원합니다. Dilithium 메커니즘 CKM_IBM_DILITHIUM의 경우 사용할 Dilithium 알고리즘의 강도를 나타내는 마샬링된 오브젝트 식별자(OID)를 제공합니다. 현재 Di리튬 4라운드 2 의 강도만 지원됩니다. |
Dilithium 키 |
| CKA_KEY_TYPE | 키 유형입니다. | EC 개인 키, EC 공개 키, RSA 개인 키, RSA 공개 키, DH 개인 키, DH 공개 키, DSA 개인 키, DSA 공개 키, AES 키, DES 키, 일반 키 |
| CKA_LOCAL | 키가 C_GenerateKey 또는 C_GenerateKeyPair 호출을 사용하여 로컬로(토큰에) 생성되었거나 C_CopyObject 호출을 사용하여 CKA_LOCAL 속성이 CK_TRUE로 설정된 키의 사본으로 작성된 경우에만 CK_TRUE입니다. |
EC 개인 키, EC 공개 키, RSA 개인 키, RSA 공개 키, DH 개인 키, DH 공개 키, DSA 개인 키, DSA 공개 키, AES 키, DES 키, 일반 키 |
| 수정 가능한 스택 | 오브젝트를 수정할 수 있는 경우 CK_TRUE로 설정하십시오. | EC 개인 키, EC 공개 키, RSA 개인 키, RSA 공개 키, DH 개인 키, DH 공개 키, DSA 개인 키, DSA 공개 키, AES 키, DES 키, 일반 키 |
| CKA_MODULUS_BITS | 모듈러스 n의 길이(비트)입니다. | RSA 공개 키 |
| CKA_PUBLIC_EXPONENT | 공개 지수 e입니다. | RSA 개인 키 |
| CKA_PUBLIC_KEY_INFO | 공개 키에 대한 SubjectPublicKeyInfo 의 DER 인코딩입니다. 값은 기본 공개 키 데이터에서 파생되며 기본적으로 비어 있습니다. | RSA 공개 키, EC 공개 키 |
| CKA_SIGN | 키가 서명을 지원하는 경우에는 CK_TRUE입니다. 여기서, 서명은 데이터에 대한 부록입니다. | EC 개인 키, RSA 개인 키, DH 개인 키, DSA 개인 키, AES 키, DES 키, 일반 키 |
| CKA_TRUSTED | 작성된 애플리케이션에 대해 인증서 또는 키를 신뢰할 수 있습니다. | EC 공개 키, RSA 공개 키, DH 공개 키, DSA 공개 키, AES 키, DES 키, 일반 키 |
| CKA_UNWRAP | 키가 랩핑 해제를 지원하는 경우에는 CK_TRUE입니다(다른 키를 랩핑 해제하는 데 사용될 수 있음). | EC 개인 키, RSA 개인 키, DH 개인 키, DSA 개인 키, AES 키, DES 키, 일반 키 |
| CKA_VALUE_LEN | 키 값의 길이(바이트)입니다. | AES 키 |
| CKA_VERIFY | 키가 확인을 지원하는 경우에는 CK_TRUE입니다. 여기서, 서명은 데이터에 대한 부록입니다. | EC 공개 키, RSA 공개 키, DH 공개 키, DSA 공개 키, AES 키, DES 키, 일반 키 |
| CKA_WRAP | 키가 랩핑을 지원하는 경우에는 CK_TRUE입니다(다른 키를 랩핑하는 데 사용될 수 있음). | EC 공개 키, RSA 공개 키, DH 공개 키, DSA 공개 키, AES 키, DES 키, 일반 키 |
| CKA_WRAP_WITH_TRUSTED | CKA_TRUSTED가 CK_TRUE로 설정된 랩핑 키로만 키를 랩핑할 수 있는 경우 CK_TRUE입니다. 기본값은 CK_FALSE입니다. | EC 개인 키, RSA 개인 키, DH 개인 키, DSA 개인 키, AES 키, DES 키, 일반 키 |
지원되는 곡선
EP11 라이브러리에서는 특정 메커니즘에 대해 제한된 유형의 곡선이 지원됩니다. 다음 표에는 다양한 메커니즘에 대해 지원되는 곡선 이름이 나열되어 있습니다. 곡선 이름의 숫자는 지원되는 기본 비트 수를 의미합니다.
타원 곡선(EC) 키를 생성하기 위해 지원되는 곡선
CKM_EC_KEY_PAIR_GEN 함수를 호출하여 타원 곡선(EC) 키를 생성하는 경우 GenerateKeyPair 매커니즘이 지원됩니다. CKA_EC_PARAMS를 사용하여 곡선 이름 매개변수를 오브젝트 ID(OID)로 지정해야 합니다. OID 저장소에서
곡선 이름을 검색하여 OID를 가져올 수 있습니다.
| GREP11 메커니즘 | 지원되는 곡선 유형 | 지원되는 곡선 이름 |
|---|---|---|
| CKM_EC_KEY_PAIR_GEN | NIST(National Institute of Standards and Technology)곡선 |
|
| CKM_EC_KEY_PAIR_GEN | 일반 브레인 풀(BP)곡선 |
|
| CKM_EC_KEY_PAIR_GEN | 트위스트 브레인 풀(BP)곡선 |
|
| CKM_EC_KEY_PAIR_GEN | 효율적인 암호화(SEC)곡선에 대한 표준 |
|
| CKM_EC_KEY_PAIR_GEN | Edwards 곡선 |
|
디지털 자산 암호화 및 서명 생성을 위해 지원되는 곡선
디지털 자산 및 디지털 서명과 관련된 메커니즘에 대해 다음 곡선이 지원됩니다.
| 표준 및 스킴 | GREP11 메커니즘 | 지원되는 곡선 유형 | 지원되는 곡선 이름 |
|---|---|---|---|
| BIP32/BIP44 | CKM_IBM_BTC_DERIVE | 효율적인 암호화(SEC)곡선에 대한 표준 |
|
| SLIP10 | CKM_IBM_BTC_DERIVE | NIST(National Institute of Standards and Technology)곡선 |
|
| SLIP10 | CKM_IBM_BTC_DERIVE | 효율적인 암호화(SEC)곡선에 대한 표준 |
|
| SLIP10 | CKM_IBM_BTC_DERIVE | Edwards 곡선 |
|
| EdDSA | CKM_IBM_ED25519_SHA512 | Edwards 곡선 |
|
| Schnorr | CKM_IBM_ECDSA_기타 | 효율적인 암호화(SEC)곡선에 대한 표준 |
|
| Schnorr | CKM_IBM_ECDSA_기타 | NIST(National Institute of Standards and Technology)곡선 |
|
| Schnorr | CKM_IBM_ECDSA_기타 | 일반 브레인 풀(BP)곡선 |
|
| Schnorr | CKM_IBM_ECDSA_기타 | 트위스트 브레인 풀(BP)곡선 |
|
| Schnorr | ECSG_IBM_ECSDSA_S256 |
|
|
| 슈노르-질리카 | Ecsg_ibm_ecsdsa_compr_multi |
|
GREP11 함수로 암호화 오퍼레이션 수행
PKCS #11 스펙의 EP11 구현을 기반으로 정의된 GREP11 함수를 호출하여 암호화 오퍼레이션을 수행할 수 있습니다. 다음 함수 설명은 EP11에 특정한 참고사항과 함께 PKCS #11 스펙을 기반으로 작성됩니다. 모든 매개변수 정의는 원래의 EP11 양식으로 되어 있습니다. EP11에 대한 자세한 정보는 Enterprise PKCS #11(EP11)라이브러리 구조를 참조하십시오.
EP11 함수 매개변수는 다음 함수에서 찾을 수 있는 프로토콜 버퍼 유형에 맵핑됩니다. Google Developers에서 프로토콜 버퍼 유형에 대해 자세히 학습할 수 있습니다.
EP11 라이브러리가 PKCS #11 API 라이브러리의 서브세트이고 GREP11 함수가 해당 EP11 함수의 변형이므로 해당 EP11 및 PKCS #11 함수는 참조용으로 GREP11 함수 테이블에도 나열됩니다.
GREP11에서는 gRPC 라이브러리가 포함된 프로그래밍 언어가 지원됩니다. 현재 단계에서 Golang 및 JavaScript의 코드 스니펫 또는 예제만 API 참조에 포함됩니다. 컨텐츠는 이후 단계에서 강화됩니다. 코드 스니펫은 다음과 같이 GREP11 API를 사용하는 방법에 대한 전체 예제를 제공하는 외부 GitHub 저장소를 기반으로 합니다. 일부 코드 스니펫의 경우 예제 저장소 내에 있는 헬퍼 함수를 참조합니다.
지원되는 암호화 알고리즘 검색
다음 함수를 사용하여 GREP11으로 지원되는 암호화 알고리즘 또는 메커니즘을 검색할 수 있습니다. 이 정보를 사용하면 함수를 호출할 때 설정될 수 있는 특정 메커니즘을 이해할 수 있습니다. 지원되는 메커니즘에 대한 전체 목록의 경우 함수 그룹별로 분류된 메커니즘을 참조할 수도 있습니다.
GetMechanismList
GetMechanismList 함수는 특정 토큰에서 지원되는 메커니즘 유형의 목록을 가져옵니다.
| 설명 | PKCS #11 C_GetMechanismList의 구현인 EP11 m_GetMechanismList에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message GetMechanismListRequest {
}
message GetMechanismListResponse {
repeated uint64 Mechs = 2;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 | PKCS #11 C_GetMechanismList의 구현입니다.
|
|---|---|
| 매개변수 |
CK_RV m_GetMechanismList (
CK_SLOT_ID slot,
CK_MECHANISM_TYPE_PTR mechs, CK_ULONG_PTR mechslen,
target_t 대상
);
|
| 리턴 값 | C_GetMechanismList 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
애플리케이션이
|
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_GetMechanismList)(
CK_SLOT_ID slotID,
CK_MECHANISM_TYPE_PTR pMechanismList,
CK_ULONG_PTR pulCount
);
|
| 리턴 값 | CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_SLOT_ID_INVALID, CKR_TOKEN_NOT_PRESENT, CKR_TOKEN_NOT_RECOGNIZED, CKR_ARGUMENTS_BAD. |
코드 스니펫
-
Golang 코드 스니펫
GetMechanismListRequest := &pb.GetMechanismListRequest { } GetMechanismListResponse, err := cryptoClient.GetMechanismList(context.Background(), GetMechanismListRequest) -
JavaScript 코드 스니펫
client.GetMechanismList({}, (err, data) => { if (err) throw err; console.log('MECHANISMS:', data.Mechs); });
GetMechanismInfo
GetMechanismInfo 함수는 특정 메커니즘에 대한 정보를 가져옵니다.
| 설명 | PKCS #11 C_GetMechanismInfo의 구현인 EP11 m_GetMechanismInfo에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message GetMechanismInfoRequest {
uint64 Mech = 2;
}
message GetMechanismInfoResponse {
MechanismInfo MechInfo = 3;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 | PKCS #11 C_GetMechanismInfo의 구현입니다.
|
|---|---|
| 매개변수 |
CK_RV m_GetMechanismInfo (
CK_SLOT_ID slot,
CK_MECHANISM_TYPE mech,
CK_MECHANISM_INFO_PTR mechInfo,
target_t 대상
);
|
| 리턴 값 | C_GetMechanismInfo 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
|
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_GetMechanismInfo)(
CK_SLOT_ID slotID,
CK_MECHANISM_TYPE type,
CK_MECHANISM_INFO_PTR pInfo
);
|
| 리턴 값 | CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_OK, CKR_SLOT_ID_INVALID, CKR_TOKEN_NOT_PRESENT, CKR_TOKEN_NOT_RECOGNIZED, CKR_ARGUMENTS_BAD. |
코드 스니펫
-
Golang 코드 스니펫
GetMechanismInfoRequest := &pb.GetMechanismInfoRequest { Mech: ep11.CKM_RSA_PKCS, } GetMechanismInfoResponse, err := cryptoClient.GetMechanismInfo(context.Background(), GetMechanismInfoRequest) -
JavaScript 코드 스니펫
client.GetMechanismInfo({ Mech: ep11.CKM_AES_KEY_GEN }, (err, data) => { if (err) throw err; console.log('MECHANISM INFO:', data.MechInfo); });
키 생성 및 파생
GREP11은 대칭 및 비대칭 암호화 키를 생성하기 위해 다음 함수를 제공합니다. 사용자가 지정하는 메커니즘 및 키 길이를 기준으로 다양한 사용법에 따라 다양한 유형의 키를 생성할 수 있습니다. 키를 좀 더 긴 키로 확장하거나 요청된 형식의 키를 가져오도록 기본 키에서 키를 파생할 수도 있습니다.
GenerateKey
GenerateKey 함수는 대칭 암호화를 위해 시크릿을 생성합니다.
| 설명 | PKCS #11 C_GenerateKey의 구현인 EP11 m_GenerateKey에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message GenerateKeyRequest {
Mechanism Mech = 1;
map<uint64,AttributeValue> Template = 6;
}
message GenerateKeyResponse {
bytes KeyBytes = 4;
bytes CheckSum = 5;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11 TDES 키는 호스트에서 관찰할 수 없는 적절한 패리티로 생성됩니다. 하지만 적절한 상호 운용성을 위해서는 다른 PKCS #11 구현에서 패리티 문제점이 존재하는 DES키를 거부해야 합니다. 오브젝트가 세션에 연결되어 있는 경우 해당 세션에 대한
DSA 및 DH 매개변수 생성은 DSA, DH 매개변수(
PKCS #11 |
|---|---|
| 매개변수 |
CK_RV m_GenerateKey (
CK_MECHANISM_PTR mech,
CK_ATTRIBUTE_PTR template, CK_ULONG templatelen,
const unsigned char *pin, size_t pinlen,
unsigned char * 키, size_t * keylen,
unsigned char *checkSum, size_t *checkSumlen,
target_t 대상
);
|
| 리턴 값 | C_GenerateKey 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
생성 메커니즘이 도메인 매개변수 생성을 위한 것인 경우 생성될 키 또는 도메인 매개변수 유형이 생성 메커니즘에 내제되어 있으므로 템플리트는 키 유형을 제공할 필요가 없습니다. 생성 메커니즘과 일치하지 않는 키 유형을 제공하는 경우
|
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_GenerateKey)(
CK_SESSION_HANDLE hSession
CK_MECHANISM_PTR pMechanism,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount,
CK_OBJECT_HANDLE_PTR phKey
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_CURVE_NOT_SUPPORTED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
// Setup the AES key's attributes keyTemplate := ep11.EP11Attributes{ ep11.CKA_VALUE_LEN: keyLen / 8, ep11.CKA_WRAP: false, ep11.CKA_UNWRAP: false, ep11.CKA_ENCRYPT: true, ep11.CKA_DECRYPT: true, ep11.CKA_EXTRACTABLE: false, } GenerateKeyRequest := &pb.GenerateKeyRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_KEY_GEN}, Template: util.AttributeMap(keyTemplate), } GenerateKeyResponse, err := cryptoClient.GenerateKey(context.Background(), GenerateKeyRequest) -
JavaScript 코드 스니펫
let keyLen = 128; let keyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_VALUE_LEN, keyLen / 8), new util.Attribute(ep11.CKA_WRAP, false), new util.Attribute(ep11.CKA_UNWRAP, false), new util.Attribute(ep11.CKA_ENCRYPT, true), new util.Attribute(ep11.CKA_DECRYPT, true), new util.Attribute(ep11.CKA_EXTRACTABLE, false), new util.Attribute(ep11.CKA_TOKEN, true) ); client.GenerateKey({ Mech: { Mechanism: ep11.CKM_AES_KEY_GEN }, Template: keyTemplate, KeyId: uuidv4() }, (err, data={}) => { cb(err, data.KeyBytes, data.CheckSum); });
GenerateKeyPair
GenerateKeyPair 함수는 공개 키 및 개인 키 쌍을 생성합니다.
| 설명 | PKCS #11 C_GenerateKeyPair의 구현인 EP11 m_GenerateKeyPair에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message GenerateKeyPairRequest {
Mechanism Mech = 1;
map<uint64,AttributeValue> PrivKeyTemplate = 7;
map<uint64,AttributeValue> PubKeyTemplate = 8;
}
message GenerateKeyPairResponse {
bytes PrivKeyBytes = 5;
bytes PubKeyBytes = 6;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11 키 쌍 매개변수는 FIPS 모드에서는 1024+256 공개 키는 대부분의 라이브러리가 읽어들일 수 있는 표준 SPKI(주제 공개 키 정보)로 형식화됩니다. 이는 SPKI 자체의 일부가 아닌 전송 키 특정 MAC으로 보호되는 무결성입니다. DSA 매개변수 생성은 공용 키 필드에서 비SPKI 구조를 리턴합니다. 오브젝트를 세션에 연결하는 경우 해당 세션에 대한 랩핑된 개인 키를 PKCS #11에서 설명한 것 이외에도 다음과 같이 특수 참고사항이 포함된 지원되는 매개변수 조합이 존재합니다. RSA 키는 17(0x11) 미만의 공개 지수를 거부합니다. 제어점은 허용된 최소값을 추가로 제한할 수 있습니다. Fermat4 지수인 0x10001은 FIPS 186-3의 공개 지수 제한사항(B.3.1 절)과 일치하는 특정 제어점으로 제어됩니다. EC 키( DSA 키( DH 키( 세션(로그인) 상태를 사용하는 경우 세션의 표준 사용이 대체됩니다. 맵핑이 라이브러리 범위를 벗어났습니다.
PKCS #11 PKCS #11 PKCS #11 |
|---|---|
| 매개변수 |
CK_RV m_GenerateKeyPair (
CK_MECHANISM_PTR mech,
CK_ATTRIBUTE_PTR pubKeyTemplate, CK_ULONG pubKeyTemplatelen,
CK_ATTRIBUTE_PTR privKeyTemplate, CK_ULONG privKeyTemplatelen,
const unsigned char *pin, size_t pinlen,
unsigned char *privKey, size_t *privKeylen,
unsigned char *pubKey, size_t *pubKeylen,
target_t 대상
);
|
| 리턴 값 | C_GenerateKeyPair 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
생성될 키 유형이 키 쌍 생성 메커니즘에 내제되어 있으므로 템플리트는 키 유형을 제공할 필요가 없습니다. 템플리트 중 하나에서 키 생성 메커니즘과 일치하지 않는 키 유형을 제공하는 경우
|
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_GenerateKeyPair)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_ATTRIBUTE_PTR pPublicKeyTemplate,
CK_ULONG ulPublicKeyAttributeCount,
CK_ATTRIBUTE_PTR pPrivateKeyTemplate,
CK_ULONG ulPrivateKeyAttributeCount,
CK_OBJECT_HANDLE_PTR phPublicKey,
CK_OBJECT_HANDLE_PTR phPrivateKey
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_CURVE_NOT_SUPPORTED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_DOMAIN_PARAMS_INVALID, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
// Generate RSA key pair publicExponent := []byte{0x11} publicKeyTemplate := ep11.EP11Attributes{ ep11.CKA_ENCRYPT: true, ep11.CKA_VERIFY: true, ep11.CKA_MODULUS_BITS: 2048, ep11.CKA_PUBLIC_EXPONENT: publicExponent, ep11.CKA_EXTRACTABLE: false, } privateKeyTemplate := ep11.EP11Attributes{ ep11.CKA_PRIVATE: true, ep11.CKA_SENSITIVE: true, ep11.CKA_DECRYPT: true, ep11.CKA_SIGN: true, ep11.CKA_EXTRACTABLE: false, } GenerateKeypairRequest := &pb.GenerateKeyPairRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_RSA_PKCS_KEY_PAIR_GEN}, PubKeyTemplate: util.AttributeMap(publicKeyTemplate), PrivKeyTemplate: util.AttributeMap(privateKeyTemplate), } GenerateKeyPairResponse, err := cryptoClient.GenerateKeyPair(context.Background(), GenerateKeypairRequest) -
JavaScript 코드 스니펫
const publicKeyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_ENCRYPT, true), new util.Attribute(ep11.CKA_VERIFY, true), new util.Attribute(ep11.CKA_MODULUS_BITS, 2048), new util.Attribute(ep11.CKA_PUBLIC_EXPONENT, publicExponent), new util.Attribute(ep11.CKA_EXTRACTABLE, false) ); const privateKeyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_PRIVATE, true), new util.Attribute(ep11.CKA_SENSITIVE, true), new util.Attribute(ep11.CKA_DECRYPT, true), new util.Attribute(ep11.CKA_SIGN, true), new util.Attribute(ep11.CKA_EXTRACTABLE, false), ); client.GenerateKeyPair({ Mech: { Mechanism: ep11.CKM_RSA_PKCS_KEY_PAIR_GEN }, PubKeyTemplate: publicKeyTemplate, PrivKeyTemplate: privateKeyTemplate, PubKeyId: uuidv4(), PrivKeyId: uuidv4() }, (err, response) => { callback(err, response); });
DeriveKey
DeriveKey 함수는 기본 키에서 키를 파생시킵니다.
| 설명 | PKCS #11 C_DeriveKey의 구현인 EP11 m_DeriveKey에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message DeriveKeyRequest {
Mechanism Mech = 1;
bytes BaseKey = 3;
bytes Data = 4;
map<uint64,AttributeValue> Template = 8;
}
message DeriveKeyResponse {
bytes NewKeyBytes = 6;
bytes CheckSum = 7;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
PKCS #11 PKCS #11 |
|---|---|
| 매개변수 |
CK_RV m_DeriveKey (
CK_MECHANISM_PTR mech,
CK_ATTRIBUTE_PTR template, CK_ULONG templatelen,
const unsigned char *baseKey, size_t baseKeylen,
const unsigned char *data, size_t datalen,
const unsigned char *pin, size_t pinlen,
unsigned char *newKey, size_t *newKeylen,
unsigned char *checkSum, size_t *checkSumlen,
target_t 대상
);
|
| 리턴 값 | C_DeriveKey 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
기본 키에 대한
|
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_DeriveKey)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hBaseKey,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulAttributeCount,
CK_OBJECT_HANDLE_PTR phKey
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_CURVE_NOT_SUPPORTED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_DOMAIN_PARAMS_INVALID, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
// Derive AES key for Alice deriveKeyTemplate := ep11.EP11Attributes{ ep11.CKA_CLASS: ep11.CKO_SECRET_KEY, ep11.CKA_KEY_TYPE: ep11.CKK_AES, ep11.CKA_VALUE_LEN: 128 / 8, ep11.CKA_ENCRYPT: true, ep11.CKA_DECRYPT: true, } // Extract Bob's EC coordinates combinedCoordinates, err := util.GetPubkeyBytesFromSPKI(bobECKeypairResponse.PubKeyBytes) if err != nil { return nil, fmt.Errorf("Bob's EC public key cannot obtain coordinates: %s", err) } aliceDeriveKeyRequest := &pb.DeriveKeyRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_ECDH1_DERIVE, Parameter: util.SetMechParm(combinedCoordinates)}, Template: util.AttributeMap(deriveKeyTemplate), BaseKey: aliceECKeypairResponse.PrivKeyBytes, } // Derive AES key for Alice aliceDeriveKeyResponse, err := cryptoClient.DeriveKey(context.Background(), aliceDeriveKeyRequest) -
JavaScript 코드 스니펫
//results are created through GenerateKeyPair const [alice, bob] = results; const deriveKeyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_CLASS, ep11.CKO_SECRET_KEY), new util.Attribute(ep11.CKA_KEY_TYPE, ep11.CKK_AES), new util.Attribute(ep11.CKA_VALUE_LEN, 128/8), new util.Attribute(ep11.CKA_ENCRYPT, true), new util.Attribute(ep11.CKA_DECRYPT, true), ); const derived = []; async.eachSeries([ { PubKey: bob.PubKeyBytes, PrivKey: alice.PrivKeyBytes }, { PubKey: alice.PubKeyBytes, PrivKey: bob.PrivKeyBytes } ], (data, cb) => { const combinedCoordinates = util.getPubKeyBytesFromSPKI(data.PubKey); client.DeriveKey({ Mech: { Mechanism: ep11.CKM_ECDH1_DERIVE, ParameterB: combinedCoordinates }, Template: deriveKeyTemplate, BaseKey: data.PrivKey }, (err, data={}) => { if (!err) { derived.push(data); } cb(err); }); }
키 보호
키를 랩핑하여 보호한 후 랩핑 해제 기능을 호출하여 키를 복호화할 수 있습니다.
WrapKey
WrapKey 함수는 키를 랩핑(암호화)합니다.
| 설명 | PKCS #11 C_WrapKey의 구현인 EP11 m_WrapKey에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message WrapKeyRequest {
bytes Key = 1;
bytes KeK = 2;
bytes MacKey = 3;
Mechanism Mech = 4;
}
message WrapKeyResponse {
bytes Wrapped = 5;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 | PKCS #11 C_WrapKey의 구현입니다.
|
|---|---|
| 매개변수 |
CK_RV m_WrapKey (
const unsigned char *key, size_t keylen,
const unsigned char *keK, size_t keKlen,
const unsigned char *macKey, size_t macKeylen,
const CK_MECHANISM_PTR mech,
CK_BYTE_PTR wrapped, CK_ULONG_PTR wrappedlen,
target_t 대상
);
|
| 리턴 값 | C_WrapKey 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
키가 랩핑을 지원하는지를 표시하는 랩핑 키의 랩핑될 키가 몇 가지 토큰의 특정한 이유로 인해 랩핑될 수 없으면
토큰은 키 유형이 어떠한 메커니즘으로 랩핑될 수 있는지에 따라 달라집니다. 추출 가능한 키의 서브세트만 랩핑할 수 있도록 랩핑 키를 파티션하기 위해 랩핑 키에 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_WrapKey)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hWrappingKey,
CK_OBJECT_HANDLE hKey,
CK_BYTE_PTR pWrappedKey,
CK_ULONG_PTR pulWrappedKeyLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_HANDLE_INVALID, CKR_KEY_NOT_WRAPPABLE, CKR_KEY_SIZE_RANGE, CKR_KEY_UNEXTRACTABLE, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN, CKR_WRAPPING_KEY_HANDLE_INVALID, CKR_WRAPPING_KEY_SIZE_RANGE, CKR_WRAPPING_KEY_TYPE_INCONSISTENT. |
코드 스니펫
-
Golang 코드 스니펫
WrapKeyRequest := &pb.WrapKeyRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_RSA_PKCS}, KeK: GenerateKeyPairResponse.PubKeyBytes, Key: GenerateKeyResponse.KeyBytes, } WrapKeyResponse, err := cryptoClient.WrapKey(context.Background(), WrapKeyRequest) -
JavaScript 코드 스니펫
client.WrapKey({ Mech: { Mechanism: ep11.CKM_RSA_PKCS }, KeK: rsa.PubKeyBytes, Key: aes.KeyBytes }, (err, data={}) => { cb(err, data.Wrapped); });
UnwrapKey
UnwrapKey 함수는 키를 랩핑 해제(복호화)합니다.
| 설명 | PKCS #11 C_UnwrapKey의 구현인 EP11 m_UnwrapKey에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message UnwrapKeyRequest {
bytes Wrapped = 1;
bytes KeK = 2;
bytes MacKey = 3;
Mechanism Mech = 5;
map<uint64,AttributeValue> Template = 9;
}
message UnwrapKeyResponse {
bytes UnwrappedBytes = 7;
bytes CheckSum = 8;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
생성된 오브젝트는 blob로서 SPKI가 MACed SPKI로 변형되는 경우 CKM_IBM_TRANSPORTKEY를 랩핑되지 않은 메커니즘으로 사용해야 합니다. 이 모드는 랩핑 해제된 데이터로서 원시 SPKI를 제공하며 KEK를 무시합니다.
|
|---|---|
| 매개변수 |
CK_RV m_UnwrapKey (
const CK_BYTE_PTR wrapped, CK_ULONG wrappedlen,
const unsigned char *keK, size_t keKlen,
const unsigned char *macKey, size_t macKeylen,
const unsigned char *pin, size_t pinlen,
const CK_MECHANISM_PTR mech,
const CK_ATTRIBUTE_PTR template, CK_ULONG templatelen,
unsigned char * unwrapped, size_t * unwrappedlen,
CK_BYTE_PTR checkSum, CK_ULONG *checkSumlen,
target_t 대상
);
|
| 리턴 값 | C_UnwrapKey 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
키가 랩핑 해제를 지원하는지를 표시하는 랩핑 해제 키의 새 키에서 일부 메커니즘은 수정되거나 수정을 시도할 수 있습니다. 키가 랩핑 해제된 동시에
키의 서브세트만 랩핑 해제할 수 있도록 랩핑 해제 키를 파티션하기 위해 랩핑 해제 키에 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_UnwrapKey)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hUnwrappingKey,
CK_BYTE_PTR pWrappedKey,
CK_ULONG ulWrappedKeyLen,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulAttributeCount,
CK_OBJECT_HANDLE_PTR phKey
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_CURVE_NOT_SUPPORTED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_DOMAIN_PARAMS_INVALID, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCOMPLETE, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_UNWRAPPING_KEY_HANDLE_INVALID, CKR_UNWRAPPING_KEY_SIZE_RANGE, CKR_UNWRAPPING_KEY_TYPE_INCONSISTENT, CKR_USER_NOT_LOGGED_IN, CKR_WRAPPED_KEY_INVALID, CKR_WRAPPED_KEY_LEN_RANGE. |
코드 스니펫
-
Golang 코드 스니펫
aesUnwrapKeyTemplate := ep11.EP11Attributes{ ep11.CKA_CLASS: ep11.CKO_SECRET_KEY, ep11.CKA_KEY_TYPE: ep11.CKK_AES, ep11.CKA_VALUE_LEN: 128 / 8, ep11.CKA_ENCRYPT: true, ep11.CKA_DECRYPT: true, ep11.CKA_EXTRACTABLE: true, // must be true to be wrapped } UnwrapKeyRequest := &pb.UnwrapKeyRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_RSA_PKCS}, KeK: GenerateKeyPairResponse.PrivKeyBytes, Wrapped: WrapKeyResponse.Wrapped, Template: util.AttributeMap(aesUnwrapKeyTemplate), } // Unwrap the AES key UnwrapKeyResponse, err := cryptoClient.UnwrapKey(context.Background(), UnwrapKeyRequest) -
JavaScript 코드 스니펫
const aesUnwrapKeyTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_CLASS, ep11.CKO_SECRET_KEY), new util.Attribute(ep11.CKA_KEY_TYPE, ep11.CKK_AES), new util.Attribute(ep11.CKA_VALUE_LEN, 128/8), new util.Attribute(ep11.CKA_ENCRYPT, true), new util.Attribute(ep11.CKA_DECRYPT, true), new util.Attribute(ep11.CKA_EXTRACTABLE, true) ); client.UnwrapKey({ Mech: { Mechanism: ep11.CKM_RSA_PKCS }, KeK: rsa.PrivKeyBytes, Wrapped: wrapped, Template: aesUnwrapKeyTemplate }, (err, data={}) => { cb(err, wrapped, data.UnwrappedBytes, data.CheckSum); });
RewrapKeyBlob
RewrapKeyBlob 함수는 HSM 내에 포함되어 있는 새 커미트된 마스터 키를 사용하여 생성된 키 2진 대형 오브젝트(BLOB)를 다시 암호화합니다. 다시 암호화된 키는 HSM이 새 커미트된 마스터 키로 완료된 후에만 사용될 수 있습니다.
이 함수는 GREP11에서만 지원하는 특수 관리 명령입니다. RewrapKeyBlob에 해당하는 EP11 함수 또는 PKCS #11 함수가 없습니다.
| 설명 | 새 마스터 키가 커미트될 때 현재 마스터 키로 제어되는 BLOB의 소유권을 새 마스터 키로 전송합니다. | |
|---|---|---|
| 매개변수 |
message RewrapKeyBlobRequest {
bytes WrappedKey = 1;
}
message RewrapKeyBlobResponse {
bytes RewrappedKey = 1;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
코드 스니펫
-
Golang 코드 스니펫
RewrapKeyBlobRequest := &pb.RewrapKeyBlobRequest { WrappedKey: GenerateKeyResponse.KeyBytes, } // Rewrap an existing key blob using the HSM's new wrapping key RewrapKeyBlobResponse, err := cryptoClient.RewrapKeyBlob(context.Background(), RewrapKeyBlobRequest) -
JavaScript 코드 스니펫
client.RewrapKeyBlob({ WrappedKey: wrappedKey }, (err, response) => { callback(err, response); });
키에 대한 속성 검색 및 수정
키를 생성하거나 키 오퍼레이션을 수행하는 경우 매개변수 중 하나로 속성 템플리트를 정의합니다. 키가 작성된 후 특정 키 오브젝트에 대한 속성을 검색하고 일부 속성을 수정할 수 있습니다.
GetAttributeValue
GetAttributeValue 함수는 오브젝트의 속성 값을 가져옵니다.
| 설명 | PKCS #11 C_GetAttributeValue의 구현인 EP11 m_GetAttributeValue에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message GetAttributeValueRequest {
bytes Object = 1;
map<uint64,AttributeValue> Attributes = 3;
}
message GetAttributeValueResponse {
map<uint64,AttributeValue> Attributes = 4;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11 세션(blob의 파트)를 표시하거나 필요로 하지 않습니다. 그러므로 EP11은 더 일반적인 방식 대신 실제 값을 열거하는 등 보다 직접적인 디코딩 방법을 사용합니다. |
|---|---|
| 매개변수 |
CK_RV m_GetAttributeValue (
const unsigned char *object, size_t objectlen,
CK_ATTRIBUTE_PTR attributes, CK_ULONG attributeslen,
target_t 대상
);
|
| 리턴 값 | C_GetAttributeValue 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
템플리트에 있는 각각의 세 항목 즉,
요청된 속성에 케이스 1이 적용되는 경우 해당 호출에서 해당 값이 속성의 배열인 특수한 속성에서는(예: 널이 아닌 오류 코드 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_GetAttributeValue)(
CK_SESSION_HANDLE hSession,
CK_OBJECT_HANDLE hObject,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_SENSITIVE, CKR_ATTRIBUTE_TYPE_INVALID, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OBJECT_HANDLE_INVALID, CKR_OK, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
코드 스니펫
-
Golang 코드 스니펫
// Only retrieve supported EP11 attributes attributeList := ep11.EP11Attributes{ ep11.CKA_DECRYPT: false, // attribute where you would like to retrieve its current value } GetAttributeValueRequest := &pb.GetAttributeValueRequest{ Object: GenerateKeyPairResponse.PrivKeyBytes, Attributes: util.AttributeMap(attributeList), } GetAttributeValueResponse, err := cryptoClient.GetAttributeValue(context.Background(), GetAttributeValueRequest) -
JavaScript 코드 스니펫
const attributeTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_SIGN, 0) ); client.GetAttributeValue({ Object: keys.PrivKey, Attributes: attributeTemplate }, (err, response) => { callback(err, response); console.log('ATTRIBUTE:', response.Attributes); });
SetAttributeValue
SetAttributeValue 함수는 오브젝트의 속성 값을 수정합니다.
| 설명 | PKCS #11 C_SetAttributeValue의 구현인 EP11 m_SetAttributeValue에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message SetAttributeValueRequest {
bytes Object = 1;
map<uint64,AttributeValue> Attributes = 3;
}
message SetAttributeValueResponse {
bytes Object = 1;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11 속성 팩킹은 _GetAttrValue를 참조하십시오. 헌재 Ep11은 부울 속성만 전송하며 기타 모든 속성은 호스트에서 처리합니다(또한 WRAP_TEMPLATE와 같은 배열 수정을 하지 않음). 세션(blob의 파트)를 표시하거나 필요로 하지 않습니다. 그러므로 PKCS #11 |
|---|---|
| 매개변수 |
CK_RV m_SetAttributeValue (
unsigned char *object, size_t objectlen,
CK_ATTRIBUTE_PTR attributes, CK_ULONG attributeslen,
target_t 대상
);
|
| 리턴 값 | C_SetAttributeValue 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
특정 오브젝트는 수정될 수 있습니다. 이러한 오브젝트에서 읽기 전용 세션 중에는 세션 오브젝트만 수정될 수 있습니다. 템플리트는 수정될 수 있는 오브젝트의 속성에 대한 새 값을 지정할 수 있습니다. 템플리트에서 기존의 다른 오브젝트 속성과 호환되지 않는 속성 값을 지정하는 경우 리턴 코드 일부 속성은 수정할 수 없습니다. 자세한 정보는 PKCS #11 API 스펙의 4.1.2절을 참조하십시오. |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_SetAttributeValue)(
CK_SESSION_HANDLE hSession,
CK_OBJECT_HANDLE hObject,
CK_ATTRIBUTE_PTR pTemplate,
CK_ULONG ulCount
);
|
| 리턴 값 | CKR_ACTION_PROHIBITED, CKR_ARGUMENTS_BAD, CKR_ATTRIBUTE_READ_ONLY, CKR_ATTRIBUTE_TYPE_INVALID, CKR_ATTRIBUTE_VALUE_INVALID, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OBJECT_HANDLE_INVALID, CKR_OK, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SESSION_READ_ONLY, CKR_TEMPLATE_INCONSISTENT, CKR_TOKEN_WRITE_PROTECTED, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
// Only set supported R/W EP11 attributes attributeList := ep11.EP11AttributeP{ CKA_DECRYPT: true, } SetAttributeValueRequest := &pb.SetAttributeValueRequest{ Object: GenerateKeyPair.PrivKeyBytes, Attributes: util.AttributeMap(attributeList), } SetAttributeValueResponse, err := cryptoClient.SetAttributeValue(context.Background(), SetAttributeValueRequest) -
JavaScript 코드 스니펫
const attributeTemplate = new util.AttributeMap( new util.Attribute(ep11.CKA_SIGN, true) ); client.SetAttributeValue({ Object: keys.PrivKey, Attributes: attributeTemplate }, (err, response) => { callback(err, response); });
랜덤 데이터 생성
암호화 오퍼레이션에 사용할 고품질의 랜덤 데이터(예: 초기화 값(IV), PIN 및 비밀번호)를 생성할 수 있습니다.
GenerateRandom
GenerateRandom 함수는 랜덤 데이터를 생성합니다. 이 함수를 사용하는 경우 랜덤 데이터의 길이는 0으로 설정되지 않아야 하며, 랜덤 데이터 위치를 가리키는 포인터는 NULL이 아니어야 합니다.
| 설명 | PKCS #11 C_GenerateRandom의 구현인 EP11 m_GenerateRandom에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message GenerateRandomRequest {
uint64 Len = 1;
}
message GenerateRandomResponse {
bytes Rnd = 1;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
호스트 라이브러리는 적합한 기능이 호스트에서 사용 가능한 경우 백엔드에 디스패치하지 않고 난수를 생성할 수 있습니다. 이는 현재 구현에서 수행되지 않습니다. 이 함수는 크기 조회를 지원하지 않습니다. |
|---|---|
| 매개변수 |
CK_RV m_GenerateRandom (
CK_BYTE_PTR rnd, CK_ULONG rndlen,
target_t 대상
);
|
| 리턴 값 | C_GenerateRandom 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 | C_GenerateRandom은 랜덤 또는 의사 랜덤 데이터를 생성합니다. hSession은 세션 핸들이고, pRandomData는 랜덤 데이터를 수신하는 위치를 지시하며, ulRandomLen은 생성할 랜덤 또는 의사 랜덤 데이터의 길이(바이트)입니다. |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_GenerateRandom)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pRandomData,
CK_ULONG ulRandomLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_ACTIVE, CKR_RANDOM_NO_RNG, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN입니다. |
코드 스니펫
-
Golang 코드 스니펫
GenerateRandomRequest := &pb.GenerateRandomRequest { Len: 1024, } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) -
JavaScript 코드 스니펫
client.GenerateRandom({ Len: ep11.AES_BLOCK_SIZE }, (err, response) => { callback(err, response); });
데이터 암호화 및 복호화
암호화 메커니즘을 지정하여 대칭 또는 비대칭 암호화 및 복호화 함수를 수행할 수 있습니다. 데이터를 암호화하거나 복호화하기 위해 일련의 하위 함수를 호출해야 할 수도 있습니다. 예를 들어 다중 파트 데이터 암호화 조작은 EncryptInit, EncryptUpdate 및 EncryptFinal 하위 조작으로 구성되어 있습니다.
EncryptInit
EncryptInit 함수는 암호화 오퍼레이션을 초기화합니다. 암호화를 수행하려면 먼저 이 함수를 호출해야 합니다.
| 설명 | PKCS #11 C_EncryptInit의 구현인 EP11 m_EncryptInit에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message EncryptInitRequest {
Mechanism Mech = 2;
bytes Key = 3;
}
message EncryptInitResponse {
bytes State = 1;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
공개 키 메커니즘의 경우 비밀 키 메커니즘의 경우 암호화 상태는
|
|---|---|
| 매개변수 |
CK_RV m_EncryptInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *key, size_t keylen,
target_t 대상
);
|
| 리턴 값 | C_EncryptInit 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
키가 암호화를 지원하는지를 표시하는 암호화 키의 애플리케이션이 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| 리턴 값 | CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
// Generate 16 bytes of random data for the initialization vector GenerateRandomRequest := &pb.GenerateRandomRequest{ Len: (uint64)(ep11.AES_BLOCK_SIZE), } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) if err != nil { return nil, fmt.Errorf("GenerateRandom error: %s", err) } iv := GenerateRandomResponse.Rnd[:ep11.AES_BLOCK_SIZE] fmt.Println("Generated IV") EncryptInitRequest := &pb.EncryptInitRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Key: GenerateKeyResponse.KeyBytes, } EncryptInitResponse, err := cryptoClient.EncryptInit(context.Background(), EncryptInitRequest) -
JavaScript 코드 스니펫
client.EncryptInit({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: key }, (err, data={}) => { cb(err, data.State); });
암호화
Encrypt 함수는 단일 파트 데이터를 암호화합니다. 단일 파트 암호화의 경우 EncryptUpdate 및 EncryptFinal 하위 조작을 수행할 필요가 없습니다. 이 함수를 호출하려면 먼저 EncryptInit를 실행해야 합니다.
| 설명 | PKCS #11 C_Encrypt의 구현인 EP11 m_Encrypt에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message EncryptRequest {
bytes State = 1;
bytes Plain = 2;
}
message EncryptResponse {
bytes Ciphered = 3;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
|
|---|---|
| 매개변수 |
CK_RV m_Encrypt (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR plain, CK_ULONG plainlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
target_t 대상
);
|
| 리턴 값 | C_Encrypt 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
암호화 조작은
일부 암호화 메커니즘의 경우 입력 일반 텍스트 데이터에는 특정 길이 제한조건이 있습니다 (메커니즘이 상대적으로 짧은 일반 텍스트 조각만 암호화할 수 있거나 메커니즘의 입력 데이터가 정수 블록 수로 구성되어야 하기 때문). 이러한 제한조건이 충족되지 않을 경우 리턴 코드 일반 텍스트 및 암호문은 동일한 위치에 있을 수 있습니다. 즉, 대부분의 메커니즘의 경우 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_Encrypt)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pEncryptedData,
CK_ULONG_PTR pulEncryptedDataLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_INVALID, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
코드 스니펫
-
Golang 코드 스니펫
plainText := "Encrypt this message" EncryptRequest := &pb.EncryptRequest { State: EncryptInitResponse.State, Plain: plainText, } EncryptResponse, err := cryptoClient.Encrypt(context.Background(), EncryptRequest) -
JavaScript 코드 스니펫
client.Encrypt({ State: state, Plain: Buffer.from(message) }, (err, response) => { callback(err, response); });
EncryptUpdate
EncryptUpdate 함수는 다중 파트 암호화 오퍼레이션을 계속합니다. 이 함수를 호출하려면 먼저 EncryptInit를 실행해야 합니다.
| 설명 | PKCS #11 C_EncryptUpdate의 구현인 EP11 m_EncryptUpdate에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message EncryptUpdateRequest {
bytes State = 1;
bytes Plain = 2;
}
message EncryptUpdateResponse {
bytes State = 1;
bytes Ciphered = 3;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
|
|---|---|
| 매개변수 |
CK_RV m_EncryptUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR plain, CK_ULONG plainlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
target_t 대상
);
|
| 리턴 값 | C_EncryptUpdate 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
암호화 조작은
|
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen,
CK_BYTE_PTR pEncryptedPart,
CK_ULONG_PTR pulEncryptedPartLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
코드 스니펫
-
Golang 코드 스니펫
plainText := ` This is a very long message that needs to be encrypted by performing multiple EncrypytUpdate functions` // Use EncryptUpdate if you would like to breakup // the encrypt operation into multiple suboperations EncryptUpdateRequest1 := &pb.EncryptUpdateRequest { State: EncryptInitResponse.State, Plain: plainText[:20], } EncryptUpdateResponse, err := cryptoClient.EncryptUpdate(context.Background(), EncryptUpdateRequest1) ciphertext := EncryptUpdateResponse.Ciphered[:] EncryptUpdateRequest2 := &pb.EncryptUpdateRequest { State: EncryptUpdateResponse.State, Plain: plainText[20:], } EncryptUpdateResponse, err := cryptoClient.EncryptUpdate(context.Background(), EncryptUpdateRequest2) ciphertext = append(ciphertext, EncryptUpdateResponse.Ciphered...) -
JavaScript 코드 스니펫
client.EncryptUpdate({ State: state, Plain: Buffer.from(message.substr(20)) }, (err, data={}) => { cb(err, data.State, Buffer.concat([ciphertext, data.Ciphered])); });
EncryptFinal
EncryptFinal 함수는 다중 파트 암호화 오퍼레이션을 완료합니다.
| 설명 | PKCS #11 C_EncryptFinal의 구현인 EP11 m_EncryptFinal에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message EncryptFinalRequest {
bytes State = 1;
}
message EncryptFinalResponse {
bytes Ciphered = 2;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
|
|---|---|
| 매개변수 |
CK_RV m_EncryptFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
target_t 대상
);
|
| 리턴 값 | C_EncryptFinal 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
암호화 조작은 일부 다중 파트 암호화 메커니즘의 경우 메커니즘의 입력 데이터가 정수 블록 수로 구성되어야 하므로 입력 일반 텍스트 데이터에는 특정 길이 제한조건이 있습니다. 이러한 제한조건이 충족되지 않을 경우 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_EncryptFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pLastEncryptedPart,
CK_ULONG_PTR pulLastEncryptedPartLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
코드 스니펫
-
Golang 코드 스니펫
EncryptFinalRequest := &pb.EncryptFinalRequest { State: EncryptUpdateResponse.State, } EncryptFinalResponse, err := cryptoClient.EncryptFinal(context.Background(), EncryptFinalRequest) -
JavaScript 코드 스니펫
client.EncryptFinal({ State: state }, (err, data={}) => { cb(err, Buffer.concat([ciphertext, data.Ciphered])); });
EncryptSingle
EncryptSingle 함수는 한 번 호출하여 원패스(one pass)로 데이터를 처리합니다. 상태는 호스트에 리턴하지 않고 암호화된 데이터만 리턴합니다. 이 함수는 표준 PKCS #11 스펙에 대한 IBM EP11 확장이며 EncryptInit와 Encrypt 함수를 조합한 것입니다. 이를 통해 일련의 호출 대신 단일 호출로 암호화 오퍼레이션을 완료할
수 있습니다.
| 설명 | EP11 m_EncryptSingle에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message EncryptSingleRequest {
bytes Key = 1;
Mechanism Mech = 2;
bytes Plain = 3;
}
message EncryptSingleResponse {
bytes Ciphered = 4;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
이는 XCP 인식 애플리케이션용 원패스(one pass)로 데이터를 암호화할 때 선호되는 방법입니다. 기능상 백엔드가 상주 키를 지원하는 경우 키는 상주 키 핸들일 수 있습니다.
|
|---|---|
| 매개변수 |
CK_RV m_EncryptSingle (
const unsigned char *key, size_t keylen,
CK_MECHANISM_PTR mech,
CK_BYTE_PTR plain, CK_ULONG plainlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
target_t 대상
);
|
| 리턴 값 | C_Encrypt 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
코드 스니펫
-
Golang 코드 스니펫
// Generate 16 bytes of random data for the initialization vector GenerateRandomRequest := &pb.GenerateRandomRequest{ Len: (uint64)(ep11.AES_BLOCK_SIZE), } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) if err != nil { return nil, fmt.Errorf("GenerateRandom error: %s", err) } iv := GenerateRandomResponse.Rnd[:ep11.AES_BLOCK_SIZE] fmt.Println("Generated IV") plainText := "Encrypt this message" EncryptSingleRequest := &pb.EncryptSingleRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Key: GenerateKeyResponse.KeyBytes, Plain: plainText, } EncryptSingleResponse, err := cryptoClient.EncryptSingle(context.Background(), EncryptSingleRequest) -
JavaScript 코드 스니펫
client.EncryptSingle({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: aliceDerived.NewKey, Plain: Buffer.from(message) }, (err, response) => { callback(err, response); });
ReencryptSingle
ReencryptSingle 함수를 사용하는 경우 원래 키로 데이터를 복호화한 후 클라우드 HSM 내의 단일 호출에서 다른 키로 원시 데이터를 암호화할 수 있습니다. 이 조작에 사용되는 키 유형은 동일하거나 서로 다를 수 있습니다. 이 함수는 표준 PKCS #11 스펙에 대한 IBM EP11 확장입니다. 이 단일 호출은 대용량의 데이터가 다른 키로 다시 암호화되어야 하고, 다시 암호화되어야 하는 데이터
항목마다 DecryptSingle과 EncryptSingle 함수의 조합을 수행하지 않아도 되는 실행 가능한 옵션입니다. 상태는 호스트에 리턴하지 않고 다시 암호화된 데이터만 리턴합니다.
| 설명 | EP11 m_ReencryptSingle에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message ReencryptSingleRequest {
bytes DecKey = 1;
bytes EncKey = 2;
Mechanism DecMech = 3;
Mechanism EncMech = 4;
bytes Ciphered = 5;
}
message ReencryptSingleResponse {
bytes Reciphered = 6;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
원래 키를 사용하여 데이터를 복호화한 후 클라우드 HSM 내에서 다른 키를 사용하여 원시 데이터를 암호화합니다. |
|---|---|
| 매개변수 |
CK_RV m_ReencryptSingle (
const unsigned char * dkey, size_t dkeylen,
const unsigned char * ekey, size_t ekeylen,
CK_MECHANISM_PTR decmech,
CK_MECHANISM_PTR encmech,
CK_BYTE_PTR in, CK_ULONG inlen,
CK_BYTE_PTR ciphered, CK_ULONG_PTR cipheredlen,
target_t 대상
);
|
| 리턴 값 | C_Encrypt 및 C_Decrypt 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
코드 스니펫
-
Golang 코드 스니펫
var msg = []byte("Data to encrypt") EncryptKey1Request := &pb.EncryptSingleRequest{ Key: GenerateKey1Response.KeyBytes, Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Plain: msg, } EncryptKey1Response, err := cryptoClient.EncryptSingle(context.Background(), EncryptKey1Request) if err != nil { return nil, fmt.Errorf("Encrypt error: %s", err) } ReencryptSingleRequest := &pb.ReencryptSingleRequest{ DecKey: GenerateKey1Response.KeyBytes, // original key EncKey: GenerateKey2Response.KeyBytes, // new key DecMech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, EncMech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Ciphered: RencryptKey1Response.Ciphered, } ReencryptSingleResponse, err := cryptoClient.ReencryptSingle(context.Background(), ReencryptSingleRequest) -
JavaScript 코드 스니펫
client.ReencryptSingle({ Decmech: { Mechanism: mech1, ParameterB: iv }, Encmech: { Mechanism: mech2, ParameterB: iv }, In: encipherState.Ciphered, DKey: keyBlob1, Ekey: keyBlob2, }, (err, response) => { callback(err, response); });
DecryptInit
DecryptInit 함수는 복호화 오퍼레이션을 초기화합니다. 복호화를 수행하려면 먼저 이 함수를 호출해야 합니다.
| 설명 | PKCS #11 C_DecryptInit의 구현인 EP11 m_DecryptInit에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message DecryptInitRequest {
Mechanism Mech = 2;
bytes Key = 3;
}
message DecryptInitResponse {
bytes State = 1;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 | PKCS #11 C_DecryptInit의 구현입니다.
|
|---|---|
| 매개변수 |
CK_RV m_DecryptInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *key, size_t keylen,
target_t 대상
);
|
| 리턴 값 | C_DecryptInit 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
키가 복호화를 지원하는지를 표시하는 복호화 키의 애플리케이션에서 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptInit)(
K_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
// Generate 16 bytes of random data for the initialization vector GenerateRandomRequest := &pb.GenerateRandomRequest{ Len: (uint64)(ep11.AES_BLOCK_SIZE), } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) if err != nil { return nil, fmt.Errorf("GenerateRandom error: %s", err) } iv := GenerateRandomResponse.Rnd[:ep11.AES_BLOCK_SIZE] fmt.Println("Generated IV") DecryptInitRequest := &pb.DecryptInitRequest{ Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Key: GenerateKeyResponse.KeyBytes, } DecryptInitResponse, err := cryptoClient.DecryptInit(context.Background(), DecryptInitRequest) -
JavaScript 코드 스니펫
client.DecryptInit({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: key }, (err, data={}) => { cb(err, data.State); });
복호화
Decrypt 함수는 단일 파트에서 데이터를 복호화합니다. 단일 파트 복호화의 경우 DecryptUpdate 및 DecryptFinal 하위 조작을 수행할 필요가 없습니다. 이 함수를 호출하려면 먼저 DecryptInit를 실행해야 합니다.
| 설명 | PKCS #11 C_Decrypt의 구현인 EP11 m_Decrypt에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message DecryptRequest {
bytes State = 1;
bytes Ciphered = 2;
}
message DecryptResponse {
bytes Plain = 3;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11 state, slen 2진 대형 오브젝트(BLOB)는 PKCS #11 |
|---|---|
| 매개변수 |
CK_RV m_Decrypt (const unsigned char *state, size_t slen,
CK_BYTE_PTR cipher, CK_ULONG clen,
CK_BYTE_PTR plain, CK_ULONG_PTR plen,
target_t 대상
);
|
| 리턴 값 | C_Decrypt 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
복호화 조작은
암호문 및 일반 텍스트는 동일한 위치에 있을 수 있습니다. 이는 pEncryptedData및 pData 가 동일한 위치를 가리키는 경우에 허용됨을 의미합니다. 입력 암호문 데이터가 올바르지 않은 길이로 인해 복호화될 수 없는 경우 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_Decrypt)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pEncryptedData,
CK_ULONG ulEncryptedDataLen,
CK_BYTE_PTR pData,
CK_ULONG_PTR pulDataLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_ENCRYPTED_DATA_INVALID, CKR_ENCRYPTED_DATA_LEN_RANGE, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
DecryptRequest := &pb.DecryptRequest{ State: DecryptInitResponse.State, Ciphered: ciphertext, // encrypted data from a previous encrypt operation } DecryptResponse, err := cryptoClient.Decrypt(context.Background(), DecryptRequest) -
JavaScript 코드 스니펫
client.Decrypt({ State: state, Ciphered: ciphertext }, (err, response) => { callback(err, response); });
DecryptUpdate
DecryptUpdate 함수는 다중 파트 복호화 오퍼레이션을 계속합니다. 이 함수를 호출하려면 먼저 DecryptInit를 실행해야 합니다.
| 설명 | PKCS #11 C_DecryptUpdate의 구현인 EP11 m_DecryptUpdate에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message DecryptUpdateRequest {
bytes State = 1;
bytes Ciphered = 2;
}
message DecryptUpdateResponse {
bytes State = 1;
bytes Plain = 3;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
|
|---|---|
| 매개변수 |
CK_RV m_DecryptUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR ciphered, CK_ULONG cipheredlen,
CK_BYTE_PTR plain, CK_ULONG_PTR plainlen,
target_t 대상
);
|
| 리턴 값 | C_DecryptUpdate 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
복호화 조작은 암호문 및 일반 텍스트는 동일한 위치에 있을 수 있습니다. 즉, |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pEncryptedPart,
CK_ULONG ulEncryptedPartLen,
CK_BYTE_PTR pPart,
CK_ULONG_PTR pulPartLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
// Use DecryptUpdate if you would like to breakup // the decrypt operation into multiple suboperations DecryptUpdateRequest1 := &pb.DecryptUpdateRequest{ State: DecryptInitResponse.State, Ciphered: ciphertext[:16], // encrypted data from a previous encrypt operation } DecryptUpdateResponse, err := cryptoClient.DecryptUpdate(context.Background(), DecryptUpdateRequest1) plaintext := DecryptUpdateResponse.Plain[:] DecryptUpdateRequest2 := &pb.DecryptUpdateRequest{ State: DecryptUpdateResponse.State, Ciphered: ciphertext[16:], // encrypted data from a previous encrypt operation } DecryptUpdateResponse, err := cryptoClient.DecryptUpdate(context.Background(), DecryptUpdateRequest2) plaintext = append(plaintext, DecryptUpdateResponse.Plain...) -
JavaScript 코드 스니펫
client.DecryptUpdate({ State: state, Ciphered: ciphertext.slice(0, 16) }, (err, data={}) => { cb(err, data.State, data.Plain); });
DecryptFinal
DecryptFinal 함수는 다중 파트 복호화 오퍼레이션을 완료합니다.
| 설명 | PKCS #11 C_DecryptFinal의 구현인 EP11 m_DecryptFinal에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message DecryptFinalRequest {
bytes State = 1;
}
message DecryptFinalResponse {
bytes Plain = 2;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
|
|---|---|
| 매개변수 |
CK_RV m_DecryptFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR plain, CK_ULONG_PTR plainlen,
target_t 대상
);
|
| 리턴 값 | C_DecryptFinal 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
복호화 조작은 입력 암호문 데이터가 올바르지 않은 길이로 인해 복호화될 수 없는 경우 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_DecryptFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pLastPart,
CK_ULONG_PTR pulLastPartLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_ENCRYPTED_DATA_INVALID, CKR_ENCRYPTED_DATA_LEN_RANGE, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
DecryptFinalRequest := &pb.DecryptFinalRequest { State: DecrypUpdateResponse.State, } DecryptFinalResponse, err := cryptoClient.DecryptFinal(context.Background(), DecryptFinalRequest) -
JavaScript 코드 스니펫
client.DecryptFinal({ State: state }, (err, data={}) => { cb(err, Buffer.concat([plaintext, data.Plain])); });
DecryptSingle
DecryptSingle 함수는 한 번 호출하여 원패스(one pass)로 데이터를 처리합니다. 상태는 호스트에 리턴하지 않고 복호화된 데이터만 리턴합니다. 이 함수는 표준 PKCS #11 스펙에 대한 IBM EP11 확장이며 DecryptInit와 Decrypt 함수를 조합한 것입니다. 이를 통해 일련의 호출 대신 단일 호출로 복호화 오퍼레이션을 완료할
수 있습니다.
| 설명 | EP11 m_DecryptSingle에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message DecryptSingleRequest {
bytes Key = 1;
Mechanism Mech = 2;
bytes Ciphered = 3;
}
message DecryptSingleResponse {
bytes Plain = 4;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
이는 XCP 인식 애플리케이션용 원패스(one pass)로 데이터를 암호화할 때 선호되는 방법입니다. 기능상 백엔드가 상주 키를 지원하는 경우 키는 상주 키 핸들일 수 있습니다.
|
|---|---|
| 매개변수 |
CK_RV m_DecryptSingle (
const unsigned char *key, size_t keylen,
CK_MECHANISM_PTR mech,
CK_BYTE_PTR ciphered, CK_ULONG cipheredlen,
CK_BYTE_PTR plain, CK_ULONG_PTR plainlen,
target_t 대상
);
|
| 리턴 값 | C_Decrypt 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
코드 스니펫
-
Golang 코드 스니펫
// Generate 16 bytes of random data for the initialization vector GenerateRandomRequest := &pb.GenerateRandomRequest{ Len: (uint64)(ep11.AES_BLOCK_SIZE), } GenerateRandomResponse, err := cryptoClient.GenerateRandom(context.Background(), GenerateRandomRequest) if err != nil { return nil, fmt.Errorf("GenerateRandom error: %s", err) } iv := GenerateRandomResponse.Rnd[:ep11.AES_BLOCK_SIZE] fmt.Println("Generated IV") DecryptSingleRequest := &pb.DecryptSingleRequest { Key: GenerateKeyResponse.KeyBytes, Mech: &pb.Mechanism{Mechanism: ep11.CKM_AES_CBC_PAD, Parameter: util.SetMechParm(iv)}, Ciphered: EncryptSingleResponse.Ciphered, // encrypted data from a previous encrypt operation } DecryptSingleResponse, err := cryptoClient.DecryptSingle(context.Background(), DecryptSingleRequest) -
JavaScript 코드 스니펫
client.DecryptSingle({ Mech: { Mechanism: ep11.CKM_AES_CBC_PAD, ParameterB: iv }, Key: bobDerived.NewKey, Ciphered: ciphertext }, (err, response) => { callback(err, response); });
데이터 서명 및 확인
GREP11은 데이터에 서명하고 서명 또는 메시지 인증 코드(MAC)를 확인하기 위한 함수 세트를 제공합니다. 서명 조작을 수행하기 위해 일련의 하위 함수를 호출해야 할 수도 있습니다. 예를 들어 다중 파트 데이터 서명 조작은 SignInit, SignUpdate 및 SignFinal 하위 조작으로 구성되어 있습니다.
SignInit
SignInit 함수는 서명 오퍼레이션을 초기화합니다. 서명 오퍼레이션을 수행하려면 먼저 이 함수를 호출해야 합니다.
| 설명 | PKCS #11 C_SignInit의 구현인 EP11 m_SignInit에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message SignInitRequest {
Mechanism Mech = 2;
bytes PrivKey = 3;
}
message SignInitResponse {
bytes State = 1;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 | PKCS #11 C_SignInit의 구현입니다.
|
|---|---|
| 매개변수 |
CK_RV m_SignInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *privKey, size_t privKeylen,
target_t 대상
);
|
| 리턴 값 | C_Decrypt 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
키가 서명(부록 포함)을 지원하는지를 표시하는 서명 키의 애플리케이션이 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_SignInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
SignInitRequest := &pb.SignInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA1_RSA_PKCS}, PrivKey: GenerateKeyPairResponse.PrivKeyBytes, } SignInitResponse, err := cryptoClient.SignInit(context.Background(), SignInitRequest) -
JavaScript 코드 스니펫
client.SignInit({ Mech: { Mechanism: ep11.CKM_SHA1_RSA_PKCS }, PrivKey: keys.PrivKeyBytes }, (err, data={}) => { cb(err, data.State); });
서명
Sign 함수는 단일 파트 데이터를 서명합니다. 단일 파트 서명의 경우 SignUpdate 및 SignFinal 하위 조작을 수행할 필요가 없습니다. 이 함수를 호출하려면 먼저 SignInit를 실행해야 합니다.
| 설명 | PKCS #11 C_Sign의 구현인 EP11 m_Sign에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message SignRequest {
bytes State = 1;
bytes Data = 2;
}
message SignResponse {
bytes Signature = 3;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
|
|---|---|
| 매개변수 |
CK_RV m_Sign (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR signature, CK_ULONG_PTR signaturelen,
target_t 대상
);
|
| 리턴 값 | C_Sign 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
서명 조작은
대부분의 메커니즘의 경우 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_Sign)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pSignature,
CK_ULONG_PTR pulSignatureLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_INVALID, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN, CKR_FUNCTION_REJECTED. |
코드 스니펫
-
Golang 코드 스니펫
msgHash := sha256.Sum256([]byte("This data needs to be signed")) SignRequest := &pb.SignRequest{ State: SignInitResponse.State, Data: msgHash[:], } // Sign the data SignResponse, err := cryptoClient.Sign(context.Background(), SignRequest) -
JavaScript 코드 스니펫
client.Sign({ State: state, Data: dataToSign }, (err, data={}) => { cb(err, data.Signature); });
SignUpdate
SignUpdate 함수는 다중 파트 서명 오퍼레이션을 계속합니다. 이 함수를 호출하려면 먼저 SignInit를 실행해야 합니다.
| 설명 | PKCS #11 C_SignUpdate의 구현인 EP11 m_SignUpdate에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message SignUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message SignUpdateResponse {
bytes State = 1;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
C_SignUpdate의 구현입니다.
|
|---|---|
| 매개변수 |
CK_RV m_SignUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
target_t 대상
);
|
| 리턴 값 | C_SignUpdate 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
서명 조작은 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_SignUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
// Use SignUpdate if you would like to breakup // the sign operation into multiple suboperations SignUpdateRequest1 := &pb.SignUpdateRequest { State: SignInitResponse.State, Data: msgHash[:16], } SignUpdateResponse, err := cryptoClient.SignUpdate(context.Background(), SignUpdateRequest1) SignUpdateRequest2 := &pb.SignUpdateRequest { State: SignUpdateResponse.State, Data: msgHash[16:], } SignUpdateResponse, err := cryptoClient.SignUpdate(context.Background(), SignUpdateRequest2) -
JavaScript 코드 스니펫
client.SignUpdate({ State: state, Data: digest }, (err, response) => { callback(err, response); });
SignFinal
SignFinal 함수는 다중 파트 서명 오퍼레이션을 완료합니다.
| 설명 | PKCS #11 C_SignFinal의 구현인 EP11 m_SignFinal에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message SignFinalRequest {
bytes State = 1;
}
message SignFinalResponse {
bytes Signature = 2;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
|
|---|---|
| 매개변수 |
CK_RV m_SignFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR signature, CK_ULONG_PTR signaturelen,
target_t 대상
);
|
| 리턴 값 | C_SignFinal 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
서명 조작은 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_SignFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pSignature,
CK_ULONG_PTR pulSignatureLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN, CKR_FUNCTION_REJECTED. |
코드 스니펫
-
Golang 코드 스니펫
SignFinalRequest := &pb.SignFinalRequest { State: SignUpdateResponse.State, } SignFinalResponse, err := cryptoClient.SignFinal(context.Background(), SignFinalRequest) -
JavaScript 코드 스니펫
client.SignFinal({ State: state }, (err, response) => { callback(err, response); });
SignSingle
SignSingle 함수는 한 번 호출하여 중간 요약 상태를 구성하지 않고 원패스(one pass)로 데이터를 서명하거나 MAC화합니다. 상태는 호스트에 리턴하지 않고 결과만 리턴합니다. 이 함수는 표준 PKCS #11 스펙에 대한 IBM EP11 확장이며 SignInit와 Sign 함수를 조합한 것입니다. 이를 통해 일련의 호출 대신 단일 호출로 서명 오퍼레이션을
완료할 수 있습니다.
| 설명 | EP11 m_SignSingle에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message SignSingleRequest {
bytes PrivKey = 1;
Mechanism Mech = 2;
bytes Data = 3;
}
message SignSingleResponse {
bytes Signature = 4;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
비표준 확장이며 이 방법은 추가 라운드트립, 암호화 및 복호화 없이 선호되는 서명 방법입니다. 기능상
HMAC 및 CMAC 서명에 대한 다중 데이터 요청이 지원됩니다(하위 변형 2 및 3).
|
|---|---|
| 매개변수 |
CK_RV m_SignSingle (
const unsigned char *privKey, size_t privKeylen,
CK_MECHANISM_PTR mech,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR signature, CK_ULONG_PTR signaturelen,
target_t 대상
);
|
| 리턴 값 | C_Decrypt 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
코드 스니펫
-
Golang 코드 스니펫
msgHash := sha256.Sum256([]byte("This data needs to be signed")) SignSingleRequest := &pb.SignSingleRequest { PrivKey: GenerateKeyPairResponse.PrivKeyBytes, Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256_RSA_PKCS}, Data: msgHash[:], } SignSingleResponse, err := cryptoClient.SignSingle(context.Background(), SignSingleRequest) -
JavaScript 코드 스니펫
client.SignSingle({ Mech: { Mechanism: ep11.CKM_ECDSA }, PrivKey: key, Data: digest }, (err, response) => { callback(err, response); });
VerifyInit
VerifyInit 함수는 확인 오퍼레이션을 초기화합니다. 서명을 확인하려면 먼저 이 함수를 호출해야 합니다.
| 설명 | PKCS #11 C_VerifyInit의 구현인 EP11 m_VerifyInit에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message VerifyInitRequest {
Mechanism Mech = 2;
bytes PubKey = 3;
}
message VerifyInitResponse {
bytes State = 1;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11 공개 키 메커니즘의 경우 HMAC 오퍼레이션이 초기화되는 경우
참고: |
|---|---|
| 매개변수 |
CK_RV m_VerifyInit (
unsigned char * state, size_t * statelen,
CK_MECHANISM_PTR mech,
const unsigned char *pubKey, size_t pubKeylen,
target_t 대상
);
|
| 리턴 값 | C_VerifyInit 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
키가 확인을 지원하는지를 표시하는(여기서, 서명은 데이터에 대한 부록임) 확인 키의 애플리케이션이 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism,
CK_OBJECT_HANDLE hKey
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_KEY_FUNCTION_NOT_PERMITTED, CKR_KEY_HANDLE_INVALID, CKR_KEY_SIZE_RANGE, CKR_KEY_TYPE_INCONSISTENT, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
VerifyInitRequest := &pb.VerifyInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA1_RSA_PKCS}, PubKey: GenerateKeyPairResponse.PubKeyBytes, } VerifyInitResponse, err := cryptoClient.VerifyInit(context.Background(), VerifyInitRequest) -
JavaScript 코드 스니펫
client.VerifyInit({ Mech: { Mechanism: ep11.CKM_SHA1_RSA_PKCS }, PubKey: keys.PubKeyBytes }, (err, data={}) => { cb(err, signature, data.State); });
확인
Verify 함수는 단일 파트 데이터의 서명을 확인합니다. 단일 파트 검증의 경우 VerifyUpdate 및 VerifyFinal 하위 조작을 수행할 필요가 없습니다. 이 함수를 호출하려면 먼저 VerifyInit를 실행해야 합니다.
| 설명 | PKCS #11 C_Verify의 구현인 EP11 m_Verify에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message VerifyRequest {
bytes State = 1;
bytes Data = 2;
bytes Signature = 3;
}
message VerifyResponse {
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
데이터 및 서명의 상대적 순서가 상대적으로 반대입니다.
|
|---|---|
| 매개변수 |
CK_RV m_Verify (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR signature, CK_ULONG signaturelen,
target_t 대상
);
|
| 리턴 값 | C_Verify 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
검증 조작은
대부분의 메커니즘의 경우 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_Verify)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pSignature,
CK_ULONG ulSignatureLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_INVALID, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SIGNATURE_INVALID, CKR_SIGNATURE_LEN_RANGE. |
코드 스니펫
-
Golang 코드 스니펫
VerifyRequest := &pb.VerifyRequest { State: VerifyInitResponse.State, Data: msgHash[:], Signature: SignResponse.Signature, } VerifyResponse, err := cryptoClient.Verify(context.Background(), VerifyRequest) -
JavaScript 코드 스니펫
client.Verify({ State: state, Data: dataToSign, Signature: signature }, (err, data={}) => { cb(err, signature); });
VerifyUpdate
VerifyUpdate 함수는 다중 파트 확인 오퍼레이션을 계속합니다. 이 함수를 호출하려면 먼저 VerifyInit를 실행해야 합니다.
| 설명 | PKCS #11 C_VerifyUpdate의 구현인 EP11 m_VerifyUpdate에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message VerifyUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message VerifyUpdateResponse {
bytes State = 1;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
|
|---|---|
| 매개변수 |
CK_RV m_VerifyUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
target_t 대상
);
|
| 리턴 값 | C_VerifyUpdate 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
검증 조작은 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
코드 스니펫
-
Golang 코드 스니펫
// Use VerifyUpdate if you would like to breakup // the verify operation into multiple suboperations VerifyUpdateRequest1 := &pb.VerifyUpdateRequest { State: VerifyInitResponse.State, Data: msgHash[:16], } VerifyUpdateResponse, err := cryptoClient.VerifyUpdate(context.Background(), VerifyUpdateRequest1) VerifyUpdateRequest2 := &pb.VerifyUpdateRequest { State: VerifyUpdateResponse.State, Data: msgHash[16:], } VerifyUpdateResponse, err := cryptoClient.VerifyUpdate(context.Background(), VerifyUpdateRequest2) -
JavaScript 코드 스니펫
client.VerifyUpdate({ State: state, Data: digest }, (err, response) => { callback(err, response); });
VerifyFinal
VerifyFinal 함수는 다중 파트 확인 오퍼레이션을 완료합니다.
| 설명 | PKCS #11 C_VerifyFinal의 구현인 EP11 m_VerifyFinal에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message VerifyFinalRequest {
bytes State = 1;
bytes Signature = 2;
}
message VerifyFinalResponse {
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
|
|---|---|
| 매개변수 |
CK_RV m_VerifyFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR signature, CK_ULONG signaturelen,
target_t 대상
);
|
| 리턴 값 | C_VerifyFinal 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
검증 조작은
|
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_VerifyFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pSignature,
CK_ULONG ulSignatureLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DATA_LEN_RANGE, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_SIGNATURE_INVALID, CKR_SIGNATURE_LEN_RANGE. |
코드 스니펫
-
Golang 코드 스니펫
VerifyFinalRequest := &pb.VerifyFinalRequest { State: VerifyUpdateResponse.State, Signature: SignResponse.Signature, } VerifyFinalResponse, err := cryptoClient.VerifyFinal(context.Background(), VerifyFinalRequest) -
JavaScript 코드 스니펫
client.VerifyFinal({ State: state, Signature: signature }, (err, response) => { callback(err, response); });
VerifySingle
VerifySingle 함수는 한 번 호출하여 중간 요약 상태를 구성하지 않고 원패스(one pass)로 데이터를 서명하거나 MAC화합니다. 상태는 호스트에 리턴하지 않고 검증 결과만 리턴합니다. 이 함수는 표준 PKCS #11 스펙에 대한 IBM EP11 확장이며 VerifyInit와 Verify 함수를 조합한 것입니다. 이를 통해 일련의 호출 대신 단일
호출로 확인 오퍼레이션을 완료할 수 있습니다.
| 설명 | EP11 m_VerifySingle에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message VerifySingleRequest {
bytes PubKey = 1;
Mechanism Mech = 2;
bytes Data = 3;
bytes Signature = 4;
}
message VerifySingleResponse {
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
비표준 확장이며 이 방법은 추가적인 라운드트립, 암호화, 복호화 없이 서명을 검증하는 선호 방식입니다. 기능상
공개 키 메커니즘의 경우
|
|---|---|
| 매개변수 |
CK_RV m_VerifySingle (
const unsigned char *pubKey, size_t pubKeylen,
CK_MECHANISM_PTR mech,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR signature, CK_ULONG signaturelen,
target_t 대상
);
|
| 리턴 값 | C_VerifySingle 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
코드 스니펫
-
Golang 코드 스니펫
VerifySingleRequest := &pb.VerifySingleRequest { PubKey: GenerateKeyPairResponse.PubKeyByytes, Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256_RSA_PKCS}, Data: msgHash[:], Signature: SignSingleResponse.Signature, } VerifySingleResponse, err := cryptoClient.VerifySingle(context.Background(), VerifySingleRequest) -
JavaScript 코드 스니펫
client.VerifySingle({ Mech: { Mechanism: ep11.CKM_SHA256_RSA_PKCS }, PubKey: keys.PubKey, Data: digest, Signature: signature }, (err, response) => { callback(err, response); });
메시지 요약을 통해 데이터 무결성 보호
GREP11은 데이터 조각의 무결성을 보호하도록 설계된 메시지 요약을 작성하기 위한 함수 세트를 제공합니다. 요약 조작을 수행하기 위해 일련의 하위 함수를 호출해야 할 수도 있습니다. 예를 들어 다중 파트 요약 조작은 DigestInit, DigestUpdate 및 DigestFinal 하위 조작으로 구성되어 있습니다.
DigestInit
DigestInit 함수는 메시지 요약 오퍼레이션을 초기화합니다. 요약 오퍼레이션을 수행하려면 먼저 이 함수를 실행해야 합니다.
| 설명 | PKCS #11 C_DigestInit의 구현인 EP11 m_DigestInit에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message DigestInitRequest {
Mechanism Mech = 2;
}
message DigestInitResponse {
bytes State = 1;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11 랩핑된 요약 상태를 작성합니다. 참고: 크기 조회가 지원되지만 랩핑된 상태는 대부분의 크기 조회와는 달리 항상 백엔드로 리턴됩니다(실제 출력 대신 출력 크기를 리턴함). 크기 조회 중에 호스트는 리턴된 상태만 삭제하고 blob 크기(
|
|---|---|
| 매개변수 |
CK_RV m_DigestInit (
unsigned char * state, size_t * len,
const CK_MECHANISM_PTR mech,
target_t 대상
);
|
| 리턴 값 | C_DigestInit 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
애플리케이션이 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_DigestInit)(
CK_SESSION_HANDLE hSession,
CK_MECHANISM_PTR pMechanism
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_MECHANISM_INVALID, CKR_MECHANISM_PARAM_INVALID, CKR_OK, CKR_OPERATION_ACTIVE, CKR_PIN_EXPIRED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID, CKR_USER_NOT_LOGGED_IN. |
코드 스니펫
-
Golang 코드 스니펫
DigestInitRequest := &pb.DigestInitRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256}, } DigestInitResponse, err := cryptoClient.DigestInit(context.Background(), DigestInitRequest) -
JavaScript 코드 스니펫
client.DigestInit({ Mech: { Mechanism: ep11.CKM_SHA256 } }, (err, response) => { callback(err, response); });
요약
Digest 함수는 단일 파트 데이터를 요약합니다. 요약 단일 파트 데이터에 대한 DigestUpdate 및 DigestFinal 함수를 호출해야 할 필요가 없습니다. 이 함수를 호출하려면 먼저 DigestInit를 실행해야 합니다. 매개변수를 설정하는 경우 입력 데이터의 길이는 0으로 설정되지 않아야 하며, 입력 데이터 위치를 가리키는
포인터는 NULL이 아니어야 합니다.
| 설명 | PKCS #11 C_Digest의 구현인 EP11 m_DigestInit에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message DigestRequest {
bytes State = 1;
bytes Data = 2;
}
message DigestResponse {
bytes Digest = 3;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11 요약 오브젝트에 0바이트 전송에 대한 임의의 조합으로 작성된 후에 추가된 정확히 0(영) 바이트가 존재하는 경우 엄격한 구현에서는 거부해야 하는 경우에도 여전히 원패스 요약을 수행할 수 있습니다.
구현이 수행할 수 있는
|
|---|---|
| 매개변수 |
CK_RV m_Digest (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR digest, CK_ULONG_PTR digestlen,
target_t 대상
);
|
| 리턴 값 | C_Digest 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
요약 조작은
입력 데이터 및 요약 출력은 동일한 위치에 있을 수 있습니다. 즉, pData 및 pDigest가 동일한 위치를 가리키는 경우에도 문제가 없습니다.
|
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_Digest)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pData,
CK_ULONG ulDataLen,
CK_BYTE_PTR pDigest,
CK_ULONG_PTR pulDigestLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
코드 스니펫
-
Golang 코드 스니펫
digestData := []byte("Create a digest for this string") DigestRequest := &pb.DigestRequest { State: DigestInitResponse.State, Data: digestData, } DigestResponse, err := cryptoClient.Digest(context.Background(), DigestRequest) -
JavaScript 코드 스니펫
client.Digest({ State: state, Data: Buffer.from(digestData) }, (err, data={}) => { cb(err, data.Digest); }); }
DigestUpdate
DigestUpdate 함수는 다중 파트 요약 오퍼레이션을 계속합니다. 이 함수를 호출하려면 먼저 DigestInit를 실행해야 합니다. 매개변수를 설정하는 경우 입력 데이터의 길이는 0으로 설정되지 않아야 하며, 입력 데이터 위치를 가리키는 포인터는 NULL이 아니어야 합니다.
| 설명 | PKCS #11 C_DigestUpdate의 구현인 EP11 m_DigestInit에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message DigestUpdateRequest {
bytes State = 1;
bytes Data = 2;
}
message DigestUpdateResponse {
bytes State = 1;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
|
|---|---|
| 매개변수 |
CK_RV m_DigestUpdate (
unsigned char *state, size_t statelen,
CK_BYTE_PTR data, CK_ULONG datalen,
target_t 대상
);
|
| 리턴 값 | C_DigestUpdate 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
메시지 요약 조작은 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_DigestUpdate)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pPart,
CK_ULONG ulPartLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
코드 스니펫
-
Golang 코드 스니펫
// Use DigestUpdate if you would like to breakup // the digest operation into multiple suboperations DigestUpdateRequest1 := &pb.DigestUpdateRequest { State: DigestInitResponse.State, Data: digestData[:16], } DigestUpdateResponse, err := cryptoClient.DigestUpdate(context.Background(), DigestUpdateRequest1) DigestUpdateRequest2 := &pb.DigestUpdateRequest { State: DigestUpdateResponse.State, Data: digestData[16:], } DigestUpdateResponse, err := cryptoClient.DigestUpdate(context.Background(), DigestUpdateRequest2) -
JavaScript 코드 스니펫
client.DigestUpdate({ State: state, Data: Buffer.from(digestData.substr(0, 64)) }, (err, data={}) => { cb(err, data.State); });
DigestFinal
DigestFinal 함수는 다중 파트 요약 오퍼레이션을 완료합니다.
| 설명 | PKCS #11 C_DigestFinal의 구현인 EP11 m_DigestFinal에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message DigestFinalRequest {
bytes State = 1;
}
message DigestFinalResponse {
bytes Digest = 2;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
PKCS #11
|
|---|---|
| 매개변수 |
CK_RV m_DigestFinal (
const unsigned char *state, size_t statelen,
CK_BYTE_PTR digest, CK_ULONG_PTR digestlen,
target_t 대상
);
|
| 리턴 값 | C_DigestFinal 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
| 설명 |
요약 조작은 |
|---|---|
| 매개변수 |
CK_DEFINE_FUNCTION(CK_RV, C_DigestFinal)(
CK_SESSION_HANDLE hSession,
CK_BYTE_PTR pDigest,
CK_ULONG_PTR pulDigestLen
);
|
| 리턴 값 | CKR_ARGUMENTS_BAD, CKR_BUFFER_TOO_SMALL, CKR_CRYPTOKI_NOT_INITIALIZED, CKR_DEVICE_ERROR, CKR_DEVICE_MEMORY, CKR_DEVICE_REMOVED, CKR_FUNCTION_CANCELED, CKR_FUNCTION_FAILED, CKR_GENERAL_ERROR, CKR_HOST_MEMORY, CKR_OK, CKR_OPERATION_NOT_INITIALIZED, CKR_SESSION_CLOSED, CKR_SESSION_HANDLE_INVALID. |
코드 스니펫
-
Golang 코드 스니펫
DigestFinalRequest := &pb.DigestFinalRequest { State: DigestUpdateResponse.State, } DigestFinalResponse, err := cryptoClient.DigestFinal(context.Background(), DigestFinalRequest) -
JavaScript 코드 스니펫
client.DigestFinal({ State: state }, (err, response) => { callback(err, response); });
DigestSingle
DigestSingle 함수는 한 번 호출하여 중간 요약 상태와 불필요한 라운드트립을 구성하지 않고 원패스(one pass)로 데이터를 요약합니다. 이 함수는 표준 PKCS #11 스펙에 대한 IBM EP11 확장이며 DigestInit와 Digest 함수를 조합한 것입니다. 이를 통해 일련의 호출 대신 단일 호출로 요약 오퍼레이션을 완료할 수 있습니다.
| 설명 | EP11 m_DigestSingle에 바인드합니다. |
|
|---|---|---|
| 매개변수 |
message DigestSingleRequest {
Mechanism Mech = 1;
bytes Data = 2;
}
message DigestSingleResponse {
bytes Digest = 3;
}
|
|
| 리턴 값 | EP11 오류를 Grep11Error 메시지에 랩핑합니다. |
| 설명 |
비표준 확장이며 이는 XCP 인식 애플리케이션용 일반 텍스트를 요약할 때 선호되는 방법입니다. 기능상 키가 요약되어야 하는 경우 상태를 호스트에 리턴하지 않고 요약 결과만 리턴합니다. 모든 것이 PKCS #11 호출에서 직접 사용되지 않으므로 PKCS #11 이외의 매개변수는 없습니다. |
|---|---|
| 매개변수 |
CK_RV m_DigestSingle (
CK_MECHANISM_PTR mech,
CK_BYTE_PTR data, CK_ULONG datalen,
CK_BYTE_PTR digest, CK_ULONG_PTR digestlen,
target_t 대상
);
|
| 리턴 값 | C_DigestSingle 리턴값의 서브세트입니다. 자세한 정보는 엔터프라이즈 PKCS #11(EP11) 라이브러리 구조 문서의 리턴 값 장을 참조하십시오. |
코드 스니펫
-
Golang 코드 스니펫
digestData := []byte("Create a digest for this string") DigestSingleRequest := &pb.DigestSingleRequest { Mech: &pb.Mechanism{Mechanism: ep11.CKM_SHA256}, Data: digestData, } DigestSingleResponse, err := cryptoClient.DigestSingle(context.Background(), DigestSingleRequest) -
JavaScript 코드 스니펫
client.DigestSingle({ Mech: { Mechanism: ep11.CKM_SHA256 }, Data: Buffer.from(digestData) }, (err, response) => { callback(err, response); });
코드 예제
GREP11 API는 gRPC 라이브러리로 프로그래밍 언어를 지원합니다. GREP11 API를 테스트하기 위해 두 개의 샘플 GitHub 저장소가 제공됩니다.