

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

# AWS CloudHSM 클라이언트 SDK 3용 PKCS \$111 라이브러리
<a name="pkcs11-v3-library"></a>

PKCS \$111은 AWS CloudHSM의 하드웨어 보안 모듈(HSM)에서 암호화 작업을 수행하기 위한 표준입니다.

부트스트래핑에 대한 자세한 내용은 [클러스터에 연결](cluster-connect.md) 단원을 참조하십시오. 

**Topics**
+ [PKCS \$111 라이브러리 설치](install-pkcs11-v3.md)
+ [PKCS \$111 라이브러리에 인증](pkcs11-v3-pin.md)
+ [키 유형](pkcs11-v3-key-types.md)
+ [메커니즘](pkcs11-v3-mechanisms.md)
+ [API 작업](pkcs11-v3-apis.md)
+ [키 속성](pkcs11-v3-attributes.md)
+ [코드 샘플](pkcs11-v3-samples.md)

# AWS CloudHSM 클라이언트 SDK 3용 PKCS \$111 라이브러리 설치
<a name="install-pkcs11-v3"></a>

이 주제에서는 AWS CloudHSM 클라이언트 SDK 3 버전 시리즈용 PKCS \$111 라이브러리 설치 지침을 제공합니다. 클라이언트 SDK 또는 PKCS \$111 라이브러리에 대한 자세한 내용은 [클라이언트 SDK](use-hsm.md) 및 [PKCS \$111 라이브러리 사용](pkcs11-library.md)을 참조하십시오.

## Client SDK 3의 필요 조건
<a name="pkcs11-library-prerequisites"></a>

PKCS \$111 라이브러리에는 AWS CloudHSM 클라이언트가 필요합니다.

 AWS CloudHSM 클라이언트를 설치하고 구성하지 않은 경우의 단계에 따라 지금 구성합니다[클라이언트 설치(Linux)](cmu-install-and-configure-client-linux.md). 클라이언트를 설치 및 구성한 후 다음 명령을 사용하여 시작합니다.

------
#### [ Amazon Linux ]

```
$ sudo start cloudhsm-client
```

------
#### [ Amazon Linux 2 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ CentOS 8 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 7 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ RHEL 8 ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 16.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------
#### [ Ubuntu 20.04 LTS ]

```
$ sudo systemctl start cloudhsm-client
```

------

## Client SDK 3용 PKCS \$111 라이브러리 설치
<a name="install-pkcs11-library"></a>

다음 명령은 PKCS \$111 라이브러리를 다운로드하고 설치합니다.

------
#### [ Amazon Linux ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL6/cloudhsm-client-pkcs11-latest.el6.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-pkcs11-latest.el6.x86_64.rpm
```

------
#### [ Amazon Linux 2 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-client-pkcs11-latest.el7.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-pkcs11-latest.el7.x86_64.rpm
```

------
#### [ CentOS 7 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-client-pkcs11-latest.el7.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-pkcs11-latest.el7.x86_64.rpm
```

------
#### [ CentOS 8 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-client-pkcs11-latest.el8.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-pkcs11-latest.el8.x86_64.rpm
```

------
#### [ RHEL 7 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL7/cloudhsm-client-pkcs11-latest.el7.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-pkcs11-latest.el7.x86_64.rpm
```

------
#### [ RHEL 8 ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/EL8/cloudhsm-client-pkcs11-latest.el8.x86_64.rpm
```

```
$ sudo yum install ./cloudhsm-client-pkcs11-latest.el8.x86_64.rpm
```

------
#### [ Ubuntu 16.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Xenial/cloudhsm-client-pkcs11_latest_amd64.deb
```

```
$ sudo apt install ./cloudhsm-client-pkcs11_latest_amd64.deb
```

------
#### [ Ubuntu 18.04 LTS ]

```
$ wget https://s3.amazonaws.com/cloudhsmv2-software/CloudHsmClient/Bionic/cloudhsm-client-pkcs11_latest_u18.04_amd64.deb
```

```
$ sudo apt install ./cloudhsm-client-pkcs11_latest_u18.04_amd64.deb
```

------
+ PKCS \$111 라이브러리를 설치한 EC2 인스턴스에 Client SDK 3의 다른 구성 요소가 설치되어 있지 않은 경우 Client SDK 3를 부트스트랩해야 합니다. Client SDK 3의 구성 요소를 포함하는 각 인스턴스에서 이 작업을 한 번만 수행하면 됩니다.
+ 다음 위치에서 PKCS \$111 라이브러리 파일을 찾을 수 있습니다.

  Linux 바이너리, 구성 스크립트, 인증서 및 로그 파일:

  ```
  /opt/cloudhsm/lib
  ```

# AWS CloudHSM 클라이언트 SDK 3용 PKCS \$111 라이브러리에 인증
<a name="pkcs11-v3-pin"></a>

PKCS \$111 라이브러리를 사용하면 애플리케이션이 AWS CloudHSM의 HSM에서 특정 [Crypto User(CU)](manage-hsm-users.md)로 실행됩니다. 애플리케이션은 CU가 소유하고 공유하는 키만 보고 관리할 수 있습니다. HSM에서 기존 CU를 사용하거나, CU를 새로 만들 수 있습니다. CU 관리에 대한 자세한 내용은 [CloudHSM CLI를 사용하여 HSM 사용자 관리](manage-hsm-users-chsm-cli.md) 및 [CloudHSM 관리 유틸리티(CMU)를 사용하여 HSM 사용자 관리](manage-hsm-users-cmu.md)를 참조하십시오.

CU를 PKCS \$111 라이브러리에 지정하려면 PKCS \$111 [C\$1Login 함수](http://docs.oasis-open.org/pkcs11/pkcs11-base/v2.40/os/pkcs11-base-v2.40-os.html#_Toc385057915)의 핀 파라미터를 사용하십시오. AWS CloudHSM의 경우 핀 파라미터의 형식은 다음과 같습니다.

```
<CU_user_name>:<password>
```

예를 들어, 다음 명령은 PKCS \$111 라이브러리 핀을 사용자 이름 `CryptoUser` 및 `CUPassword123!` 암호를 사용하여 CU에 설정합니다.

```
CryptoUser:CUPassword123!
```

# AWS CloudHSM 클라이언트 SDK 3용 PKCS \$111 라이브러리에 지원되는 키 유형
<a name="pkcs11-v3-key-types"></a>

PKCS \$111 라이브러리는 AWS CloudHSM 클라이언트 SDK 3에서 다음 키 유형을 지원합니다.


****  

| 키 유형 | 설명 | 
| --- | --- | 
| RSA | 2048비트\$14096비트의 RSA 키를 생성합니다(256비트 증가). | 
| EC | secp224r1(P-224), secp256r1(P-256), secp256k1(Blockchain), secp384r1(P-384) 및 secp521r1(P-521) 곡선을 사용하여 키를 생성합니다. | 
| AES | 128, 192 및 256비트 AES 키를 생성합니다. | 
| DES3(트리플 DES) | 192비트 DES3 키를 생성합니다. 예정된 변경 사항은 [1](#pkcs11-v3-key-note) 아래 참고를 참조하세요. | 
| GENERIC\$1SECRET | 1바이트\$164바이트의 일반 암호를 생성합니다. | 
+ [1] NIST 지침에 따라 2023년 이후 FIPS 모드의 클러스터에는 허용되지 않습니다. 비FIPS 모드의 클러스터의 경우 2023년 이후에도 허용됩니다. 세부 정보는 [FIPS 140 규정 준수: 2024 메커니즘 지원 중단](compliance-dep-notif.md#compliance-dep-notif-1) 섹션을 참조하세요.

# AWS CloudHSM 클라이언트 SDK 3에 지원되는 메커니즘
<a name="pkcs11-v3-mechanisms"></a>

PKCS \$111 라이브러리는 AWS CloudHSM 클라이언트 SDK 3에 대해 다음 알고리즘을 지원합니다.
+ **암호화 및 복호화** - AES-CBC, AES-CTR, AES-ECB, AES-GCM, DES3-CBC, DES3-ECB, RSA-OAEP 및 RSA-PKCS
+ **서명 및 확인** – RSA, HMAC 및 ECDSA(해싱 사용 및 사용 안 함)
+ **해시/다이제스트** – SHA1, SHA224, SHA256, SHA384 및 SHA512
+ **키 랩** – AES 키 랩,[4](#pkcs11-v3-mech4) AES-GCM, RSA-AES 및 RSA-OAEP
+ **주요 파생** – ECDH,[5](#pkcs11-v3-mech5) SP800-108 CTR KDF

## PKCS \$111 라이브러리 메커니즘-함수 표
<a name="pkcs11-v3-mech-function"></a>

PKCS \$111 라이브러리는 PKCS \$111 사양 버전 2.40을 준수합니다. PKCS\$111을 사용하여 암호화 기능을 호출하려면 주어진 메커니즘을 가진 함수를 호출하십시오. 다음 표에는 AWS CloudHSM에서 지원하는 기능과 메커니즘의 조합이 요약되어 있습니다.

**지원되는 PKCS \$111 메커니즘-함수 표 해석**  
""" 표시는가 함수에 대한 메커니즘을 AWS CloudHSM 지원함을 나타냅니다. PKCS \$111 사양에 나열된 가능한 함수를 모두 지원하지는 않습니다. "" 표시는 PKCS \$111 표준에서 허용하더라도 AWS CloudHSM 가 지정된 함수에 대한 메커니즘을 아직 지원하지 않음을 나타냅니다. 빈 셀은 PKCS \$111 표준이 주어진 함수에 대해 메커니즘을 지원하지 않는다는 의미입니다.


**지원되는 PKCS \$111 라이브러리 메커니즘 및 함수**  
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)

**메커니즘 주석**
+ [1] 단일 부분 작업만.
+ [2] 메커니즘은 기능상 `CKM_RSA_PKCS_KEY_PAIR_GEN` 메커니즘과 동일하지만, `p` 및 `q` 생성을 보다 확실히 보장합니다.
+ [3.1]클라이언트 SDK에 따라 해싱에 다르게 AWS CloudHSM 접근합니다. 클라이언트 SDK 3의 경우 해싱을 수행하는 위치는 데이터 크기와 단일 부분 또는 다중 부분 작업을 사용하는지 여부에 따라 달라집니다.

  **클라이언트 SDK 3의 단일 부분 작업**

  표 3.1에는 클라이언트 SDK 3의 각 메커니즘에 대한 최대 데이터 세트 크기가 나열되어 있습니다. 전체 해시는 HSM 내에서 계산됩니다. 16KB를 초과하는 데이터 크기는 지원되지 않습니다.  
**표 3.1, 단일 부분 작업의 최대 데이터 세트 크기**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)

  **멀티파트 작업 클라이언트 SDK 3**

  16KB보다 큰 데이터 크기를 지원하지만 데이터 크기에 따라 해싱이 발생하는 위치가 결정됩니다. 16KB 미만의 데이터 버퍼는 HSM 내에서 해시됩니다. 16KB와 시스템의 최대 데이터 크기 사이의 버퍼는 소프트웨어에서 로컬로 해시됩니다. *기억하십시오*: 해시 함수에는 암호화 비밀이 필요하지 않으므로 HSM 외부에서 안전하게 계산할 수 있습니다.
+ [3.2]클라이언트 SDK에 따라 해싱에 다르게 AWS CloudHSM 접근합니다. 클라이언트 SDK 3의 경우 해싱을 수행하는 위치는 데이터 크기와 단일 부분 또는 다중 부분 작업을 사용하는지 여부에 따라 달라집니다.

  **단일 부분 작업 클라이언트 SDK 3**

  표 3.2에는 클라이언트 SDK 3의 각 메커니즘에 대한 최대 데이터 세트 크기가 나열되어 있습니다. 16KB를 초과하는 데이터 크기는 지원되지 않습니다.  
**표 3.2, 단일 부분 작업의 최대 데이터 세트 크기**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)

  **멀티파트 작업 클라이언트 SDK 3**

  16KB보다 큰 데이터 크기를 지원하지만 데이터 크기에 따라 해싱이 발생하는 위치가 결정됩니다. 16KB 미만의 데이터 버퍼는 HSM 내에서 해시됩니다. 16KB와 시스템의 최대 데이터 크기 사이의 버퍼는 소프트웨어에서 로컬로 해시됩니다. *기억하십시오*: 해시 함수에는 암호화 비밀이 필요하지 않으므로 HSM 외부에서 안전하게 계산할 수 있습니다.
+ [3.3] 다음 메커니즘 중 하나를 사용하여 데이터로 작업할 때 데이터 버퍼가 최대 데이터 크기를 초과하면 작업 결과에 오류가 생깁니다. 이러한 메커니즘의 경우 모든 데이터 처리는 HSM 내에서 이루어져야 합니다. 다음 표에는 각 메커니즘에 설정된 최대 데이터 크기가 나와 있습니다.  
**표 3.3, 최대 데이터 세트 크기**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/pkcs11-v3-mechanisms.html)
+ [4] AES-GCM 암호화를 수행할 때 HSM은 애플리케이션에서 IV(초기화 벡터) 데이터를 수락하지 않습니다. 생성되는 IV를 사용해야 합니다. HSM이 제공하는 12바이트 IV는 사용자가 제공하는 `CK_GCM_PARAMS` 파라미터 구조의 pIV 요소가 가리키는 메모리 참조에 기록됩니다. 사용자의 혼동을 피하기 위해 버전 1.1.1 이상인 PKCS\$111 SDK는 AES-GCM 암호화가 초기화될 때 pIV가 초기화된 버퍼를 가리키는지 확인합니다.
+ [5] **클라이언트 SDK 3만 해당됩니다**. 메커니즘은 SSL/TLS 오프로드 사례를 지원하기 위해 구현됐으며 HSM 내에서만 부분적으로 실행됩니다. 이 메커니즘을 사용하기 전에 [용 PKCS \$111 라이브러리에 대해 알려진 문제 AWS CloudHSMPKCS\$111 SDK의 알려진 문제](ki-pkcs11-sdk.md)의 “문제: ECDH 키 파생은 부분적으로 HSM 내에서만 실행됩니다”를 참조하십시오. `CKM_ECDH1_DERIVE`는 secp521r1(P-521) 곡선을 지원하지 않습니다.
+ [6] 다음 `CK_MECHANISM_TYPE` 및 `CK_RSA_PKCS_MGF_TYPE`은 `CKM_RSA_PKCS_OAEP`의 경우 `CK_RSA_PKCS_OAEP_PARAMS`로 지원됩니다.
  + `CKM_SHA_1``CKG_MGF1_SHA1`을 사용하는
  + `CKG_MGF1_SHA224`를 사용하는 `CKM_SHA224`
  + `CKG_MGF1_SHA256`를 사용하는 `CKM_SHA256`
  + `CKM_MGF1_SHA384`를 사용하는 `CKM_SHA384`
  + `CKM_MGF1_SHA512`를 사용하는 `CKM_SHA512`
+ [7.1] 공급자 정의 메커니즘. CloudHSM 공급자 정의 메커니즘을 사용하려면 컴파일하는 동안 PKCS \$111 애플리케이션에 `/opt/cloudhsm/include/pkcs11/cloudhsm_pkcs11_vendor_defs.h`가 포함되어 있어야 합니다.

  `CKM_CLOUDHSM_AES_GCM`: 이 독점 메커니즘은 `CKM_AES_GCM` 표준에 대한 프로그래밍 방식으로 안전한 대안입니다. 이 메커니즘은 암호 초기화 중에 제공되는 `CK_GCM_PARAMS` 구조로 다시 암호 텍스트를 쓰는 대신 암호 텍스트 앞에 HSM에 의해 생성된 IV를 추가합니다. 이 메커니즘은 `C_Encrypt`, `C_WrapKey`, `C_Decrypt` 및 `C_UnwrapKey` 함수와 함께 사용할 수 있습니다. 이 메커니즘을 사용할 때는 `CK_GCM_PARAMS` 구문의 piV 변수를 `NULL`로 설정해야 합니다. `C_Decrypt` 및 `C_UnwrapKey`와 함께 이 메커니즘을 사용할 경우, IV는 언래핑되는 암호화 텍스트 앞에 추가될 것으로 예상됩니다.

  `CKM_CLOUDHSM_AES_KEY_WRAP_PKCS5_PAD`: PKCS \$15 패딩을 사용하는 AES 키 래핑

  `CKM_CLOUDHSM_AES_KEY_WRAP_ZERO_PAD`: 제로 패딩을 사용하는 AES 키 래핑

  AES 키 래핑에 대한 추가 정보는 [AES 키 래핑](manage-aes-key-wrapping.md)을 참조하십시오.
+ [8] NIST 지침에 따라 2023년 이후 FIPS 모드의 클러스터에는 허용되지 않습니다. 비FIPS 모드의 클러스터의 경우 2023년 이후에도 허용됩니다. 세부 정보는 [FIPS 140 규정 준수: 2024 메커니즘 지원 중단](compliance-dep-notif.md#compliance-dep-notif-1) 섹션을 참조하세요.

# AWS CloudHSM 클라이언트 SDK 3에 지원되는 API 작업
<a name="pkcs11-v3-apis"></a>

PKCS \$111 라이브러리는 AWS CloudHSM 클라이언트 SDK 3에 대해 다음과 같은 PKCS \$111 API 작업을 지원합니다.
+ `C_CloseAllSessions`
+ `C_CloseSession`
+ `C_CreateObject`
+ `C_Decrypt`
+ `C_DecryptFinal`
+ `C_DecryptInit`
+ `C_DecryptUpdate`
+ `C_DeriveKey`
+ `C_DestroyObject`
+ `C_Digest`
+ `C_DigestFinal`
+ `C_DigestInit`
+ `C_DigestUpdate`
+ `C_Encrypt`
+ `C_EncryptFinal`
+ `C_EncryptInit`
+ `C_EncryptUpdate`
+ `C_Finalize`
+ `C_FindObjects`
+ `C_FindObjectsFinal`
+ `C_FindObjectsInit`
+ `C_GenerateKey`
+ `C_GenerateKeyPair`
+ `C_GenerateRandom`
+ `C_GetAttributeValue`
+ `C_GetFunctionList`
+ `C_GetInfo`
+ `C_GetMechanismInfo`
+ `C_GetMechanismList`
+ `C_GetSessionInfo`
+ `C_GetSlotInfo`
+ `C_GetSlotList`
+ `C_GetTokenInfo`
+ `C_Initialize`
+ `C_Login`
+ `C_Logout`
+ `C_OpenSession`
+ `C_Sign`
+ `C_SignFinal`
+ `C_SignInit`
+ `C_SignRecover` (클라이언트 SDK 3만 지원)
+ `C_SignRecoverInit` (클라이언트 SDK 3만 지원)
+ `C_SignUpdate`
+ `C_UnWrapKey`
+ `C_Verify`
+ `C_VerifyFinal`
+ `C_VerifyInit`
+ `C_VerifyRecover` (클라이언트 SDK 3만 지원)
+ `C_VerifyRecoverInit` (클라이언트 SDK 3만 지원)
+ `C_VerifyUpdate`
+ `C_WrapKey`

# AWS CloudHSM 클라이언트 SDK 3용 PKCS \$111 라이브러리의 키 속성
<a name="pkcs11-v3-attributes"></a>

키 객체는 퍼블릭 키, 프라이빗 키 또는 비밀 키일 수 있습니다. 키 객체에 대해 허용되는 작업은 속성을 통해 지정됩니다. 속성은 키 객체가 생성될 때 정의됩니다. 에 PKCS \$111 라이브러리를 사용하는 경우 PKCS \$111 표준에 지정된 대로 기본값을 AWS CloudHSM할당합니다.

AWS CloudHSM 는 PKCS \$111 사양에 나열된 모든 속성을 지원하지 않습니다. 우리는 우리가 지원하는 모든 속성에 대한 사양을 준수합니다. 이러한 속성은 각 표에 나열되어 있습니다.

객체를 생성, 수정 또는 복사하는 `C_CreateObject`, `C_GenerateKey`, `C_GenerateKeyPair`, `C_UnwrapKey`, `C_DeriveKey` 등의 암호화 함수는 속성 템플릿을 파라미터 중 하나로 사용합니다. 객체 생성 중 속성 템플릿 전달에 대한 자세한 내용은 [Generate keys through PKCS \$111 library](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate) 샘플을 참조하십시오.

다음 주제에서는 클라이언트 SDK 3의 AWS CloudHSM 키 속성에 대한 자세한 정보를 제공합니다.

**Topics**
+ [속성 테이블](pkcs11-v3-attributes-interpreting.md)
+ [속성 수정](pkcs11-v3-modify-attr.md)
+ [AWS CloudHSM 클라이언트 SDK 3에 대한 PKCS \$111 라이브러리 오류 코드 해석](pkcs11-v3-attr-errors.md)

# AWS CloudHSM 클라이언트 SDK 3용 PKCS \$111 라이브러리 속성 테이블
<a name="pkcs11-v3-attributes-interpreting"></a>

 AWS CloudHSM 클라이언트 SDK 3용 PKCS \$111 라이브러리 테이블에는 키 유형에 따라 다른 속성 목록이 포함되어 있습니다. 특정 암호화 함수를와 함께 사용할 때 특정 키 유형에 대해 지정된 속성이 지원되는지 여부를 나타냅니다 AWS CloudHSM.

**범례:**
+ ✔는 CloudHSM이 특정 키 유형에 대해 해당 속성을 지원함을 나타냅니다.
+ ✖는 CloudHSM이 특정 키 유형에 대해 해당 속성을 지원하지 않음을 나타냅니다.
+ R은 속성 값이 특정 키 유형에 대해 읽기 전용으로 설정됨을 나타냅니다.
+ S는 중요하므로 `GetAttributeValue`로 속성을 읽을 수 없음을 나타냅니다.
+ 기본값 열의 빈 셀은 속성에 할당된 특정 기본값이 없음을 나타냅니다.

## GenerateKeyPair
<a name="pkcs11-v3-generatekeypair"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/pkcs11-v3-attributes-interpreting.html)

## GenerateKey
<a name="pkcs11-v3-generatekey"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/pkcs11-v3-attributes-interpreting.html)

## CreateObject
<a name="pkcs11-v3-createobject"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/pkcs11-v3-attributes-interpreting.html)

## UnwrapKey
<a name="pkcs11-v3-unwrapkey"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/pkcs11-v3-attributes-interpreting.html)

## DeriveKey
<a name="pkcs11-v3-derivekey"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/pkcs11-v3-attributes-interpreting.html)

## GetAttributeValue
<a name="pkcs11-v3-getattributevalue"></a>

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/pkcs11-v3-attributes-interpreting.html)

**속성 주석**
+ [1] 이 속성은 펌웨어에서 부분적으로 지원되며 명시적으로 기본값으로만 설정되어야 합니다.
+ [2] 필수 속성.
+ [3] **클라이언트 SDK 3만 해당됩니다**. `CKA_SIGN_RECOVER` 속성은 `CKA_SIGN` 속성에서 파생되었습니다. 설정된 경우 `CKA_SIGN`에 대해 설정된 것과 동일한 값으로만 설정할 수 있습니다. 설정되지 않은 경우 기본값 `CKA_SIGN`을 파생합니다. CloudHSM은 RSA 기반의 복구 가능한 서명 메커니즘만 지원하므로, 이 속성은 현재 RSA 퍼블릭 키에만 적용됩니다.
+ [4] **클라이언트 SDK 3만 해당됩니다**. `CKA_VERIFY_RECOVER` 속성은 `CKA_VERIFY` 속성에서 파생되었습니다. 설정된 경우 `CKA_VERIFY`에 대해 설정된 것과 동일한 값으로만 설정할 수 있습니다. 설정되지 않은 경우 기본값 `CKA_VERIFY`을 파생합니다. CloudHSM은 RSA 기반의 복구 가능한 서명 메커니즘만 지원하므로, 이 속성은 현재 RSA 퍼블릭 키에만 적용됩니다.

# AWS CloudHSM 클라이언트 SDK 3에 대한 PKCS \$111 라이브러리 속성 수정
<a name="pkcs11-v3-modify-attr"></a>

객체의 일부 속성은 객체가 생성된 후 수정할 수 있지만, 일부 속성은 수정할 수 없습니다. 속성을 수정하려면 cloudhsm\$1mgmt\$1util에서 [setAttribute](cloudhsm_mgmt_util-setAttribute.md) 명령을 사용하십시오. cloudhsm\$1mgmt\$1util에서 [listAttribute](cloudhsm_mgmt_util-listAttributes.md) 명령을 사용하여 속성 및 이를 나타내는 상수 목록을 파생시킬 수도 있습니다.

다음 목록은 객체 생성 후 수정할 수 있는 속성을 보여 줍니다.
+ `CKA_LABEL`
+ `CKA_TOKEN`
**참고**  
세션 키를 토큰 키로 변경하는 경우에만 수정이 허용됩니다. 속성 값을 변경하려면 key\$1mgmt\$1util에서 [setAttribute](key_mgmt_util-setAttribute.md) 명령을 사용하십시오.
+ `CKA_ENCRYPT`
+ `CKA_DECRYPT`
+ `CKA_SIGN`
+ `CKA_VERIFY`
+ `CKA_WRAP`
+ `CKA_UNWRAP`
+ `CKA_LABEL`
+ `CKA_SENSITIVE`
+ `CKA_DERIVE`
**참고**  
이 속성은 키 파생을 지원합니다. 모든 퍼블릭 키에 대해 `False`여야 하고 `True`로 설정할 수 없습니다. 보안 및 EC 프라이빗 키의 경우 `True` 또는 `False`로 설정할 수 있습니다.
+ `CKA_TRUSTED`
**참고**  
CO(Crypto Officer)만 이 속성을 `True` 또는 `False`로 설정할 수 있습니다.
+ `CKA_WRAP_WITH_TRUSTED`
**참고**  
이 속성을 내보낼 수 있는 데이터 키에 적용하여 이 키를 `CKA_TRUSTED`로 표시된 키로만 래핑할 수 있도록 지정합니다. `CKA_WRAP_WITH_TRUSTED`는 true로 설정하면 속성이 읽기 전용이 되며 속성을 변경하거나 제거할 수 없습니다.

# AWS CloudHSM 클라이언트 SDK 3에 대한 PKCS \$111 라이브러리 오류 코드 해석
<a name="pkcs11-v3-attr-errors"></a>

템플릿에서 특정 키로 지원되지 않는 PKCS \$111 라이브러리 속성을 지정하면 오류가 발생합니다. 다음 표에 사양을 위반하면 발생되는 오류 코드가 나와 있습니다.

[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/cloudhsm/latest/userguide/pkcs11-v3-attr-errors.html)

# AWS CloudHSM 클라이언트 SDK 3용 PKCS \$111 라이브러리의 코드 샘플
<a name="pkcs11-v3-samples"></a>

GitHub의 코드 샘플은 AWS CloudHSM용 PKCS \$111 라이브러리를 사용하여 기본 작업을 수행하는 방법을 보여줍니다.

## 샘플 코드 사전 조건
<a name="pkcs11-v3-samples-prereqs"></a>

샘플을 실행하기 전에 다음 단계를 수행하여 환경을 설정합니다.
+ 클라이언트 SDK 3용 [PKCS \$111 라이브러리](install-pkcs11-v3.md)를 설치하고 구성합니다.
+ [CU(Cryptographic User)](manage-hsm-users.md) 설정 애플리케이션은 이 HSM 계정을 사용하여 HSM에서 코드 샘플을 실행합니다.

## 코드 샘플
<a name="pkcs11-v3-samples-code"></a>

PKCS\$111용 AWS CloudHSM 소프트웨어 라이브러리의 코드 샘플은 [GitHub](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples)에서 사용할 수 있습니다. 이 리포지토리에는 암호화, 암호 해독, 서명 및 확인 등 PKCS \$111을 사용하여 일반적인 작업을 수행하는 방법에 대한 예제가 포함되어 있습니다.
+ [키 생성(AES, RSA, EC)](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/generate)
+ [키 속성 나열](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/attributes/)
+ [AES GCM을 사용하여 데이터 암호화 및 암호화 해제](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/encrypt/aes_gcm.c)
+ [AES\$1CTR을 사용하여 데이터 암호화 및 복호화](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/encrypt/aes_ctr.c) 
+ [3DES를 사용하여 데이터 암호화 및 복호화](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/encrypt/des_ecb.c) 
+ [RSA를 사용하여 데이터 서명 및 확인](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/sign/rsa_sign.c)
+ [HMAC KDF를 사용하여 키 추출](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/derivation/hmac_kdf.c)
+ [PKCS \$15 패딩을 사용하는 AES로 키 래핑 및 언래핑](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_wrapping.c)
+ [패딩을 사용하지 않는 AES로 키 래핑 및 언래핑](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_no_padding_wrapping.c)
+ [제로 패딩을 사용하는 AES로 키 래핑 및 언래핑](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/aes_zero_padding_wrapping.c)
+ [AES-GCM을 사용하여 키 래핑 및 언래핑](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/tree/master/src/wrapping/aes_gcm_wrapping.c)
+ [RSA를 사용하여 키 래핑 및 언래핑](https://github.com/aws-samples/aws-cloudhsm-pkcs11-examples/blob/master/src/wrapping/rsa_wrapping.c)