

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

# KMU를 사용하여 AWS CloudHSM 키의 일반 텍스트 복사본 내보내기
<a name="key_mgmt_util-exSymKey"></a>

 AWS CloudHSM key\_mgmt\_util 도구의 **exSymKey** 명령을 사용하여 하드웨어 보안 모듈(HSM)에서 대칭 키의 일반 텍스트 사본을 내보내고 디스크의 파일에 저장합니다. 키의 암호화(래핑)된 사본을 내보내려면 [wrapKey](key_mgmt_util-wrapKey.md) 명령을 사용합니다. `exSymKey`가 내보내는 키와 같이 평문 키를 가져오려면 [imSymKey](key_mgmt_util-imSymKey.md)를 사용합니다.

내보내기 프로세스 중에 **exSymKey**는 사용자가 지정한 AES 키(*래핑 키*)를 사용하여 내보낼 키를 *래핑*(암호화)한 후 *래핑 해제*(암호 해제)합니다. 하지만 내보내기 작업의 결과는 디스크에 저장된 평문(*언래핑된*) 키입니다.

키 소유자, 즉 키를 생성한 CU 사용자만 키를 내보낼 수 있습니다. 키를 공유하는 사용자는 해당 키를 암호화 작업에 사용할 수 있지만 내보낼 수는 없습니다.

**exSymKey** 작업은 키 구성 요소를 지정한 파일에 복사하지만, HSM에서 키를 제거하지 않고 [키 속성](key-attribute-table.md)을 변경하거나 암호화 작업에서 키를 사용할 수 없게 만듭니다. 동일한 키를 여러 번 내보낼 수 있습니다.

**exSymKey**는 대칭 키만 내보냅니다. 퍼블릭 키를 내보내려면 [exportPubKey](key_mgmt_util-exportPubKey.md)를 사용합니다. 프라이빗 키를 내보내려면 [exportPrivateKey](key_mgmt_util-exportPrivateKey.md)를 사용합니다.

key\_mgmt\_util 명령을 실행하기 전에 [key\_mgmt\_util을 시작](key_mgmt_util-setup.md#key_mgmt_util-start)하고 CU(Crypto User)로 HSM에 [로그인](key_mgmt_util-log-in.md)해야 합니다.

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

```
exSymKey -h

exSymKey -k {{<key-to-export>}}
         -w {{<wrapping-key>}}
         -out {{<key-file>}}
         [-m 4] 
         [-wk {{<unwrapping-key-file>}} ]
```

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

다음 예제는 **exSymKey**를 사용하여 HSM에서 소유하는 대칭 키를 내보내는 방법을 보여 줍니다.

**Example : 3DES 대칭 키 내보내기**  
이 명령은 Triple DES(3DES) 대칭 키(키 핸들 `7`)를 내보냅니다. 이 명령은 HSM의 기존 AES 키(키 핸들 `6`)를 래핑 키로 사용합니다. 그런 다음 3DES 키의 평문을 `3DES.key` 파일에 기록합니다.  
출력은 키 `7`(3DES 키)가 성공적으로 래핑되고 `3DES.key` 파일에 기록된 것을 보여 줍니다.  
출력이 "래핑된 대칭 키"가 출력 파일에 기록되었음을 보여 주지만, 출력 파일에는 평문(언래핑된) 키가 포함되어 있습니다.

```
        Command: exSymKey -k 7 -w 6 -out 3DES.key

       Cfm3WrapKey returned: 0x00 : HSM Return: SUCCESS

        Cfm3UnWrapHostKey returned: 0x00 : HSM Return: SUCCESS


Wrapped Symmetric Key written to file "3DES.key"
```

**Example : 세션 전용 래핑 키를 사용하여 내보내기**  
이 예제는 해당 세션에서만 존재하는 키를 래핑 키로 사용하는 방법을 보여 줍니다. 내보낼 키가 래핑되었다가 즉시 언래핑되고 평문으로 전달되므로 래핑 키를 유지할 필요가 없습니다.  
이 일련의 명령은 HSM에서 키 핸들이 `8`인 AES 키를 내보냅니다. 이 명령은 전용으로 생성된 AES 세션 키를 사용합니다.  
첫 번째 명령은 [genSymKey](key_mgmt_util-genSymKey.md)를 사용하여 256비트 AES 키를 생성합니다. 이 명령은 `-sess` 파라미터를 사용하여 현재 세션에만 존재하는 키를 생성합니다.  
출력은 HSM이 키 `262168`을 생성했음을 보여 줍니다.  

```
        Command:  genSymKey -t 31 -s 32 -l AES-wrapping-key -sess

        Cfm3GenerateSymmetricKey returned: 0x00 : HSM Return: SUCCESS

        Symmetric Key Created.  Key Handle: 262168

        Cluster Error Status
        Node id 1 and err state 0x00000000 : HSM Return: SUCCESS
```
다음으로, 예제는 내보낼 키인 키 `8`이 추출 가능한 대칭 키인지 확인합니다. 또한 래핑 키(키 `262168`)가 해당 세션에서만 존재하는 AES 키인지 확인합니다. [findKey](key_mgmt_util-findKey.md) 명령을 사용할 수 있지만, 이 예제는 두 키의 속성을 모두 내보낸 다음 `grep`을 사용하여 파일에서 관련 속성 값을 찾습니다.  
이러한 명령은 `getAttribute`에서 `512`의 `-a`(모두) 값을 사용하여 키 `8` 및 `262168`의 모든 속성을 가져옵니다. 키 속성에 대한 자세한 내용은 [AWS CloudHSM KMU에 대한 키 속성 참조](key-attribute-table.md) 섹션을 참조하십시오.  

```
getAttribute -o 8 -a 512 -out attributes/attr_8
getAttribute -o 262168 -a 512 -out attributes/attr_262168
```
다음 명령은 `grep`을 사용하여 내보낼 키(키 `8`)의 속성과 세션 전용 래핑 키(키 `262168`)를 확인합니다.  

```
    // Verify that the key to be exported is a symmetric key.
    $  grep -A 1 "OBJ_ATTR_CLASS" attributes/attr_8    
    OBJ_ATTR_CLASS
    0x04
   
    // Verify that the key to be exported is extractable.
    $  grep -A 1 "OBJ_ATTR_KEY_TYPE" attributes/attr_8
    OBJ_ATTR_EXTRACTABLE
    0x00000001

    // Verify that the wrapping key is an AES key
    $  grep -A 1 "OBJ_ATTR_KEY_TYPE" attributes/attr_262168
    OBJ_ATTR_KEY_TYPE
    0x1f

    // Verify that the wrapping key is a session key
    $  grep -A 1 "OBJ_ATTR_TOKEN" attributes/attr_262168
    OBJ_ATTR_TOKEN
    0x00    
    
    // Verify that the wrapping key can be used for wrapping
     $  grep -A 1 "OBJ_ATTR_WRAP" attributes/attr_262168
    OBJ_ATTR_WRAP
    0x00000001
```
마지막으로, **exSymKey** 명령을 통해 세션 키(키 `262168`)를 래핑 키로 사용해 키 `8`을 내보냅니다.  
세션이 끝나면 키 `262168`은 더 이상 존재하지 않습니다.  

```
        Command:  exSymKey -k 8 -w 262168 -out aes256_H8.key

        Cfm3WrapKey returned: 0x00 : HSM Return: SUCCESS

        Cfm3UnWrapHostKey returned: 0x00 : HSM Return: SUCCESS


Wrapped Symmetric Key written to file "aes256_H8.key"
```

**Example : 외부 언래핑 키 사용**  
이 예제는 the HSM 외부 언래핑 키를 사용하여 HSM에서 키를 내보내는 방법을 보여 줍니다.  
HSM에서 키를 내보낼 때 래핑 키로 사용할 HSM의 AES 키를 지정합니다. 기본적으로 래핑 키는 내보낼 키를 래핑 및 언래핑하는 데 사용합니다. 하지만 `-wk` 파라미터를 사용하여 언래핑에 파일에 있는 외부 키를 사용하도록 **exSymKey**에게 알릴 수 있습니다. 그러면 `-w` 파라미터로 지정된 키가 대상 키를 래핑하고 `-wk` 파라미터로 지정된 파일의 키가 언래핑합니다.  
래핑 키는 대칭 키인 AES 키여야 하므로, HSM의 래핑 키와 디스크의 언래핑 키는 키 구성 요소가 같아야 합니다. 이렇게 하려면 내보내기 작업 전에 HSM으로 래핑 키를 가져오거나 HSM에서 래핑 키를 내보내야 합니다.  
이 예제에서는 키를 HSM 외부에서 생성하여 HSM으로 가져옵니다. 이 예제는 키의 내부 사본을 사용하여 가져오는 대칭 키를 래핑하고 파일에 저장된 키의 사본을 사용하여 언래핑합니다.  
첫 번째 명령은 OpenSSL을 사용하여 256비트 AES 키를 생성합니다. 이 명령은 `aes256-forImport.key` 파일에 키를 저장합니다. OpenSSL 명령은 출력을 반환하지 않지만, 여러 명령을 사용하여 성공 여부를 확인할 수 있습니다. 이 예제는 **wc**(단어 수) 도구를 사용하여 파일이 32바이트의 데이터를 포함하는지 확인합니다.  

```
$  openssl rand -out keys/aes256-forImport.key 32

$ wc keys/aes256-forImport.key
 0  2 32 keys/aes256-forImport.key
```
이 명령은 [imSymKey](key_mgmt_util-imSymKey.md) 명령을 사용하여 `aes256-forImport.key` 파일에서 HSM으로 AES 키를 가져옵니다. 명령이 완료되면 키가 HSM(키 핸들 `262167`) 및 `aes256-forImport.key` 파일에 존재합니다.  

```
Command:  imSymKey -f keys/aes256-forImport.key -t 31 -l aes256-imported -w 6

        Cfm3WrapHostKey returned: 0x00 : HSM Return: SUCCESS

        Cfm3CreateUnwrapTemplate returned: 0x00 : HSM Return: SUCCESS

        Cfm3UnWrapKey returned: 0x00 : HSM Return: SUCCESS

        Symmetric Key Unwrapped.  Key Handle: 262167

        Cluster Error Status
        Node id 1 and err state 0x00000000 : HSM Return: SUCCESS
        Node id 0 and err state 0x00000000 : HSM Return: SUCCESS
```
이 명령은 내보내기 작업에 키를 사용합니다. 이 명령은 **exSymKey**를 사용하여 192비트 AES 키인 키 `21`을 내보냅니다. 키를 래핑하기 위해 이 명령은 HSM으로 가져온 사본인 키 `262167`을 사용합니다. 키를 언래핑하기 위해 `aes256-forImport.key` 파일에서 동일한 키 구성 요소를 사용합니다. 명령이 완료되면 키 `21`가 `aes192_h21.key` 파일로 내보내집니다.  

```
        Command:  exSymKey -k 21 -w 262167 -out aes192_H21.key -wk aes256-forImport.key

        Cfm3WrapKey returned: 0x00 : HSM Return: SUCCESS

Wrapped Symmetric Key written to file "aes192_H21.key"
```

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

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

**-k**  
내보낼 키의 키 핸들을 지정합니다. 이 파라미터는 필수 사항입니다. 소유하는 대칭 키의 키 핸들을 입력합니다. 이 파라미터는 필수 사항입니다. 키 핸들을 찾으려면 [findKey](key_mgmt_util-findKey.md) 명령을 사용하십시오.  
키를 내보낼 수 있는지 확인하려면 [getAttribute](key_mgmt_util-getAttribute.md) 명령을 사용하여 상수 `354`로 표시되는 `OBJ_ATTR_EXTRACTABLE` 속성의 값을 가져옵니다. 또한 본인이 소유한 키만 내보낼 수 있습니다. 키의 소유자를 찾으려면 [getKeyInfo](key_mgmt_util-getKeyInfo.md) 명령을 사용합니다.  
필수 항목 여부: 예

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

**-out**  
출력 파일의 경로 및 이름을 지정합니다. 명령이 성공하면 이 파일이 내보낸 키를 평문으로 포함합니다. 파일이 이미 존재하는 경우, 이 명령은 경고 없이 파일에 덮어씁니다.  
필수 항목 여부: 예

**-m**  
래핑 메커니즘을 지정합니다. 유일하게 유효한 값은 `NIST_AES_WRAP` 메커니즘을 나타내는 `4`입니다.  
필수 여부: 아니요  
기본값: 4

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

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