

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

# AWS CloudHSM KMU를 사용하여 일반 텍스트 대칭 키 가져오기
<a name="key_mgmt_util-imSymKey"></a>

 AWS CloudHSM key\_mgmt\_util 도구의 **imSymKey** 명령을 사용하여 파일에서 하드웨어 보안 모듈(HSM)로 대칭 키의 일반 텍스트 복사본을 가져옵니다. 이 명령을 사용하여 HSM 외부의 메서드를 사용하여 생성하는 키, 그리고 HSM에서 내보낸 키(예: [exSymKey](key_mgmt_util-exSymKey.md) 명령이 파일에 기록하는 키)를 가져올 수 있습니다.

가져오기 프로세스 중에 **imSymKey**는 사용자가 선택한 AES 키(*래핑 키*)를 사용하여 가져올 키를 *래핑*(암호화)한 후 *래핑 해제*(암호 해독)합니다. 하지만 **imSymKey**는 일반 텍스트 키를 포함하는 파일에서만 유효합니다. 암호화된 키를 내보내고 가져오려면 [wrapKey](key_mgmt_util-wrapKey.md) 및 [unWrapKey](key_mgmt_util-unwrapKey.md) 명령을 사용합니다.

또한 **imSymKey** 명령은 대칭 키만 가져옵니다. 퍼블릭 키를 가져오려면 [importPubKey](key_mgmt_util-importPubKey.md)를 사용합니다. 프라이빗 키를 가져오려면 [importPrivateKey](key_mgmt_util-importPrivateKey.md) 또는 [wrapKey](key_mgmt_util-wrapKey.md)를 사용합니다.

**참고**  
대칭 키나 프라이빗 키를 사용하여 암호로 보호된 PEM 키를 가져올 수 없습니다.

가져온 키는 HSM에서 생성된 키와 거의 비슷하게 동작합니다. 하지만 [OBJ\_ATTR\_LOCAL 속성](key-attribute-table.md) 값은 0입니다. 이는 객체가 로컬에서 생성되지 않았음을 의미합니다. 대칭 키를 가져올 때 다음 명령을 사용하여 공유할 수 있습니다. 키를 가져온 후 [cloudhsm\_mgmt\_util](cloudhsm_mgmt_util.md)의 `shareKey` 명령을 사용하여 키를 공유할 수 있습니다.

```
imSymKey -l aesShared -t 31 -f kms.key -w 3296 -u 5
```

키를 가져온 후, 키 파일을 마킹 또는 삭제해야 합니다. 이 명령은 동일한 키 자료를 여러 번 가져오도록 허용합니다. 키 핸들은 고유하지만 키 자료는 동일한 키가 여러 개 있을 경우 키 자료의 사용을 추적하기 어렵고 암호화 한도를 초과하는 것을 방지할 수 없습니다.

key\_mgmt\_util 명령을 실행하려면 먼저 [key\_mgmt\_util을 시작하고](key_mgmt_util-setup.md#key_mgmt_util-start) HSM에 암호화 사용자(crypto user)로 [로그인](key_mgmt_util-log-in.md)해야 합니다.

## 구문
<a name="imSymKey-syntax"></a>

```
imSymKey -h

imSymKey -f <key-file>
         -w <wrapping-key-handle>  
         -t <key-type>
         -l <label>
         [-id <key-ID>]
         [-sess]
         [-wk <wrapping-key-file> ]
         [-attest]
         [-min_srv <minimum-number-of-servers>]
         [-timeout <number-of-seconds> ]
         [-u <user-ids>]
```

## 예제
<a name="imSymKey-examples"></a>

다음 예제에서는 **imSymKey**를 사용하여 대칭 키를 HSM으로 가져오는 방법을 보여줍니다.

**Example : AES 대칭 키 가져오기**  
이 예제에서는 **imSymKey**를 사용하여 AES 대칭 키를 HSM으로 가져옵니다.  
첫 번째 명령은 OpenSSL을 사용하여 무작위 256비트 AES 대칭 키를 생성합니다. 이 명령은 `aes256.key` 파일에 키를 저장합니다.  

```
$  openssl rand -out aes256.key 32
```
두 번째 명령은 **imSymKey**를 사용하여 AES 키를 `aes256.key` 파일에서 HSM으로 가져옵니다. 이 명령은 키 20(HSM의 AES 키)을 래핑 키로 사용하며 `imported` 레이블을 지정합니다. ID와 달리, 레이블은 클러스터에서 고유할 필요는 없습니다. `-t`(유형) 파라미터 값은 AES를 나타내는 `31`입니다.  
출력은 파일의 키를 래핑 및 언래핑하고 HSM으로 가져와 키 핸들 262180을 할당한 것을 보여 줍니다.  

```
Command:  imSymKey -f aes256.key -w 20 -t 31 -l imported

        Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS

        Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS

        Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS

        Symmetric Key Unwrapped.  Key Handle: 262180

        Cluster Error Status
        Node id 1 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 2 and err state 0x00000000 : HSM Return: SUCCESS
```
다음 명령은 [getAttribute](key_mgmt_util-getAttribute.md)를 사용하여 새로 가져온 키의 OBJ\_ATTR\_LOCAL 속성([attribute 355](key-attribute-table.md))을 가져와 `attr_262180` 파일에 기록합니다.  

```
Command:  getAttribute -o 262180 -a 355 -out attributes/attr_262180
Attributes dumped into attributes/attr_262180_imported file

        Cfm3GetAttribute returned: 0x00 : HSM Return: SUCCESS
```
속성 파일을 검사할 때 `OBJ_ATTR_LOCAL` 속성 값이 0인 것을 알 수 있습니다. 이는 키 자료가 HSM에서 생성되지 않았음을 나타냅니다.  

```
$  cat attributes/attr_262180_local
OBJ_ATTR_LOCAL
0x00000000
```

**Example : 클러스터 간 대칭 키 이동하기**  
이 예제는 [exSymKey](key_mgmt_util-exSymKey.md) 및 **imSymKey**를 사용하여 클러스터 간에 일반 텍스트 AES 키를 이동하는 방법을 보여줍니다. 이러한 프로세스를 사용하여 양쪽 클러스터의 HSM에 존재하는 AES 래핑을 생성할 수 있습니다. 공유되는 래핑 키가 생성되면 [wrapKey](key_mgmt_util-wrapKey.md) 및 [unWrapKey](key_mgmt_util-unwrapKey.md)를 사용하여 암호화된 키를 클러스터 사이에서 이동할 수 있습니다.  
이 작업을 수행하는 CU 사용자는 양쪽 클러스터의 HSM에 로그인할 수 있는 권한이 있어야 합니다.  
첫 번째 명령은 [exSymKey](key_mgmt_util-exSymKey.md)를 사용하여 키 14(32비트 AES 키)를 클러스터 1에서 `aes.key` 파일로 내보냅니다. 이 명령은 키 6, 즉 클러스터 1의 HSM에 대한 AES 키를 래핑 키로 사용합니다.  

```
Command: exSymKey -k 14 -w 6 -out aes.key

        Cfm3WrapKey returned: 0x00 : HSM Return: SUCCESS

        Cfm3UnWrapHostKey returned: 0x00 : HSM Return: SUCCESS


Wrapped Symmetric Key written to file "aes.key"
```
그런 다음 사용자가 클러스터 2의 key\_mgmt\_util에 로그인하고 **imSymKey** 명령을 실행하여 `aes.key` 파일의 키를 클러스터 2의 HSM으로 가져옵니다. 이 명령은 키 252152, 즉 클러스터 2의 HSM에 대한 AES 키를 래핑 키로 사용합니다.  
[exSymKey](key_mgmt_util-exSymKey.md) 및 **imSymKey**가 사용하는 래핑 키는 대상 키를 래핑했다가 즉시 언래핑하므로 서로 다른 클러스터의 래핑 키가 같을 필요는 없습니다.  
출력은 성공적으로 키를 클러스터 2로 가져와 키 핸들 21을 할당한 것을 보여줍니다.  

```
Command:  imSymKey -f aes.key -w 262152 -t 31 -l xcluster

        Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS

        Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS

        Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS

        Symmetric Key Unwrapped.  Key Handle: 21

        Cluster Error Status
        Node id 1 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 2 and err state 0x00000000 : HSM Return: SUCCESS
```
클러스터 1의 키 14와 클러스터 2의 키 21이 동일한 키 자료를 가지는 것을 증명하려면 각 키의 키 확인 값(KCV)을 가져옵니다. KCV 값이 동일한 경우 키 자료가 동일한 것입니다.  
다음 명령은 클러스터 1에서 [getAttribute](key_mgmt_util-getAttribute.md)를 사용하여 키 14의 KCV 속성(속성 371) 값을 `attr_14_kcv` 파일에 기록합니다. 그런 다음 **cat** 명령을 사용하여 `attr_14_kcv` 파일의 내용을 가져옵니다.  

```
Command:  getAttribute -o 14 -a 371 -out attr_14_kcv
Attributes dumped into attr_14_kcv file

$  cat attr_14_kcv
OBJ_ATTR_KCV
0xc33cbd
```
이 비슷한 명령은 클러스터 2에서 [setAttribute](key_mgmt_util-getAttribute.md)를 사용하여 키 21의 KCV 속성(속성 371) 값을 `attr_21_kcv` 파일에 기록합니다. 그런 다음 **cat** 명령을 사용하여 `attr_21_kcv` 파일의 내용을 가져옵니다.  

```
Command:  getAttribute -o 21 -a 371 -out attr_21_kcv
Attributes dumped into attr_21_kcv file

$  cat attr_21_kcv
OBJ_ATTR_KCV
0xc33cbd
```
출력은 두 키의 KCV 값이 같다는 것을 보여 줍니다. 즉, 키 자료가 동일함을 증명합니다.  
같은 키 자료가 양쪽 클러스터의 HSM에 존재하므로 이제 평문 키를 노출시키지 않고 클러스터 사이에서 암호화된 키를 공유할 수 있습니다. 예를 들어 `wrapKey` 명령을 래핑 키 14와 함께 사용하여 암호화된 키를 클러스터 1에서 내보낸 후, `unWrapKey`를 래핑 키 21과 함께 암호화된 키를 클러스터 2로 가져올 수 있습니다.

**Example : 세션 키 가져오기**  
이 명령은 **imSymKey**의 `-sess` 파라미터를 사용하여 현재 세션에서만 유효한 192비트 Triple DES 키를 가져옵니다.  
이 명령은 `-f` 파라미터를 사용하여 가져올 키를 포함하는 파일을 지정하고, `-t` 파라미터를 사용하여 키 유형을 지정하고, `-w` 파라미터를 사용하여 래핑 키를 지정합니다. 이 명령은 `-l` 파라미터를 사용하여 키를 범주화하는 레이블을 지정하고 `-id` 파라미터를 사용하여 키의 고유한 표시 ID를 생성합니다. 또한 `-attest` 파라미터를 사용하여 키를 가져오는 펌웨어를 확인합니다.  
출력은 성공적으로 키를 래핑 및 언래핑하고 HSM으로 가져와 키 핸들 37을 할당한 것을 보여 줍니다. 또한 증명 점검을 통과했습니다. 이는 펌웨어가 변조되지 않았음을 나타냅니다.  

```
Command:  imSymKey -f 3des192.key -w 6 -t 21 -l temp -id test01 -sess -attest

        Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS

        Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS

        Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS

        Symmetric Key Unwrapped.  Key Handle: 37

        Attestation Check : [PASS]

        Cluster Error Status
        Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
```
다음에는 [getAttribute](key_mgmt_util-getAttribute.md) 또는 [findKey](key_mgmt_util-findKey.md) 명령을 사용하여 새로 가져온 키의 속성을 확인할 수 있습니다. 다음 명령은 **findKey**를 사용하여 키 37에 명령에서 지정한 유형, 레이블 및 ID가 있으며 이 키가 세션 키임을 확인합니다. 출력의 5행에 표시된 대로, **findKey**는 모든 속성과 일치하는 유일한 키가 키 37임을 보고합니다.  

```
Command:  findKey -t 21 -l temp -id test01 -sess 1
Total number of keys present 1

 number of keys matched from start index 0::0
37

        Cluster Error Status
        Node id 1 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 2 and err state 0x00000000 : HSM Return: SUCCESS

        Cfm3FindKey returned: 0x00 : HSM Return: SUCCESS
```

## 파라미터
<a name="imSymKey-params"></a>

**-attest**  
클러스터가 실행되는 펌웨어가 변조되지 않았는지 확인하는 무결성 점검을 실행합니다.  
기본값: 증명 점검은 없음.  
필수 여부: 아니요

**-f**  
가져올 키를 포함하는 파일을 지정합니다.  
파일은 지정된 길이의 AES 또는 Triple DES 키의 평문 사본을 포함해야 합니다. RC4 및 DES 키는 FIPS 모드 HSM에서 유효하지 않습니다.  
+ **AES**: 16, 24 또는 32바이트
+ **Triple DES(3DES)**: 24바이트
필수 항목 여부: 예

**-h**  
명령에 대한 도움말을 표시합니다.  
필수 항목 여부: 예

**-id**  
키에 대해 사용자 정의 식별자를 지정합니다. 클러스터에 고유한 문자열을 입력합니다. 기본값은 빈 문자열입니다.  
기본값: ID 값이 없음.  
필수 여부: 아니요

**-l**  
키에 대해 사용자 정의 레이블을 지정합니다. 문자열을 입력합니다.  
키 식별을 지원하는 임의의 문구를 사용할 수 있습니다. 레이블이 고유할 필요는 없으므로 이를 그룹에 사용하여 키를 분류할 수 있습니다.  
필수 항목 여부: 예

**-min\_srv**  
`-timeout` 파라미터의 값이 만료되기 전에 키가 동기화되는 HSM의 최소 개수를 지정합니다. 할당된 시간에 지정된 서버 개수에 키가 동기화되지 않으면 키가 생성되지 않습니다.  
AWS CloudHSM 는 클러스터의 모든 HSM에 모든 키를 자동으로 동기화합니다. 이 과정을 더 빠르게 진행하려면 `min_srv`의 값을 클러스터의 HSM 개수보다 적게 설정하고 낮은 제한 시간 값을 설정합니다. 그러나 일부 요청은 키를 생성하지 않을 수 있음을 주의하십시오.  
기본값: 1  
필수 여부: 아니요

**-sess**  
현재 세션에만 존재하는 키를 생성합니다. 세션이 종료된 후에는 키를 복구할 수 없습니다.  
다른 키를 암호화한 후 다시 재빨리 암호를 해독하는 래핑 키와 같이 키가 일시적으로 필요한 경우 이 파라미터를 사용합니다. 세션 종료 후에 암호를 해독해야 할 수 있는 데이터를 암호화하는 데 세션 키를 사용해서는 안 됩니다.  
세션 키를 영구적인 (토큰) 키로 변경하려면 [setAttribute](key_mgmt_util-setAttribute.md)를 사용합니다.  
기본값: 키는 영구적입니다.  
필수 여부: 아니요

**-timeout**  
명령이 `min_srv` 파라미터에서 지정한 HSM의 수에 키가 동기화하기를 기다리는 시간(단위: 초)을 지정합니다.  
이 파라미터는 명령에서 `min_srv` 파라미터도 사용되는 경우에만 유효합니다.  
기본값: 제한 시간 없음. 명령은 무기한 기다리다가 최소 서버 개수에 키가 동기화될 때만 복귀합니다.  
필수 여부: 아니요

**-t**  
대칭 키의 유형을 지정합니다. 키 유형을 나타내는 상수를 입력합니다. 예를 들어 AES 키를 생성하려면 `-t 31`을 입력합니다.  
유효한 값:   
+ 21: [Triple DES(3DES)](https://en.wikipedia.org/wiki/Triple_DES).
+ 31: [AES](https://en.wikipedia.org/wiki/Advanced_Encryption_Standard)
필수 항목 여부: 예

**-u**  
가져오는 키를 지정된 사용자와 공유합니다. 이 파라미터는 다른 HSM CU(Crypto User)에게 암호화 작업에 이 키를 사용할 수 있는 권한을 부여합니다.  
ID 한 개를 입력하거나, -u `5,6`과 같이 쉼표로 구분된 HSM 사용자 ID 목록을 입력합니다. 현재 사용자의 HSM 사용자 ID는 포함하지 마십시오. ID를 찾으려면 cloudhsm\_mgmt\_util 명령줄 도구에서 [listUsers](https://docs.aws.amazon.com/cloudhsm/latest/userguide/cloudhsm_mgmt_util-listUsers.html) 명령을 사용하거나, key\_mgmt\_util 명령줄 도구에서 [listUsers](https://docs.aws.amazon.com/cloudhsm/latest/userguide/key_mgmt_util-listUsers.html) 명령을 사용합니다.  
필수 여부: 아니요

**-w**  
래핑 키의 키 핸들을 지정합니다. 이 파라미터는 필수 사항입니다. 키 핸들을 찾으려면 [findKey](key_mgmt_util-findKey.md) 명령을 사용하십시오.  
*래핑 키*는 가져오기 절차 도중 키를 암호화("래핑")한 후 암호 해독("언래핑")하는 데 사용되는 HSM의 키입니다. AES 키만 래핑 키로 사용할 수 있습니다.  
임의의 AES 키(모든 크기)를 래핑 키로 사용할 수 있습니다. 래핑 키는 대상 키를 래핑했다 즉시 언래핑하므로 세션 전용 AES 키를 래핑 키로 사용할 수 있습니다. 키를 래핑 키로 사용할 수 있는지 여부를 확인하려면 [getAttribute](key_mgmt_util-getAttribute.md)를 사용하여 `OBJ_ATTR_WRAP` 속성(262)의 값을 가져옵니다. 래핑 키를 생성하려면 [genSymKey](key_mgmt_util-genSymKey.md)를 사용하여 AES 키(유형 31)를 생성합니다.  
`-wk` 파라미터를 사용하여 외부 래핑 키를 지정할 경우, `-w` 래핑 키가 가져오는 키를 언래핑하는 데 사용되고 래핑에는 사용되지 않습니다.  
키 4는 지원되지 않는 내부 키입니다. 래핑 키로 생성하고 관리하는 AES 키를 사용하는 것이 좋습니다.
필수 항목 여부: 예

**-wk**  
지정된 파일의 AES 키를 사용하여 가져오는 키를 래핑합니다. 평문 AES 키를 포함하는 파일의 경로 및 이름을 입력합니다.  
이 파라미터를 포함할 경우, **imSymKey**는 `-wk` 파일의 키를 사용하여 가져올 키를 래핑하고, `-w` 파라미터로 지정된 HSM의 키를 사용하여 언래핑합니다. `-w` 및 `-wk` 파라미터 값은 동일한 평문 키로 확인되어야 합니다.  
기본값: 래핑 키 또는 HSM을 사용하여 언래핑  
필수 여부: 아니요

## 관련 주제
<a name="imSymKey-seealso"></a>
+ [genSymKey](key_mgmt_util-genSymKey.md)
+ [exSymKey](key_mgmt_util-exSymKey.md)
+ [wrapKey](key_mgmt_util-wrapKey.md)
+ [unWrapKey](key_mgmt_util-unwrapKey.md)
+ [exportPrivateKey](key_mgmt_util-exportPrivateKey.md)
+ [exportPubKey](key_mgmt_util-exportPubKey.md)