

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

# 키 내보내기
<a name="keys-export"></a>

**Contents**
+ [대칭 키 내보내기](#keys-export-symmetric)
  + [비대칭 기법을 사용하여 키 내보내기(TR-34)](#keys-export-tr34)
  + [비대칭 기법(ECDH)을 사용하여 키 내보내기](#keys-export-ecdh)
  + [비대칭 기법을 사용하여 키 내보내기(RSA 랩)](#keys-export-rsawrap)
  + [사전 설정된 키 교환 키(TR-31)를 사용하여 대칭 키를 내보냅니다.](#keys-export-tr31)
+ [DUKPT 초기 키 내보내기(IPEK/IK)](#keys-export-ipek)
+ [내보낼 키 블록 헤더 지정](#keys-export-optionalheaders)
  + [일반 헤더](#keys-export-commonheaders)
+ [비대칭(RSA) 키 내보내기](#keys-export-publickey)

## 대칭 키 내보내기
<a name="keys-export-symmetric"></a>

**중요**  
 시작하기 AWS CLI 전에 최신 버전의가 있는지 확인합니다. 업그레이드하려면 [설치를 참조하세요 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/getting-started-install.html).

### 비대칭 기법을 사용하여 키 내보내기(TR-34)
<a name="keys-export-tr34"></a>

TR-34는 RSA 비대칭 암호화를 사용하여 교환을 위해 대칭 키를 암호화하고 서명합니다. 암호화는 기밀성을 보호하는 반면 서명은 무결성을 보장합니다. 키를 내보내면 AWS Payment Cryptography가 키 배포 호스트(KDH) 역할을 하며 대상 시스템이 키 수신 디바이스(KRD)가 됩니다.

**참고**  
HSM이 TR-34 내보내기를 지원하지만 TR-34 가져오기를 지원하지 않는 경우 먼저 TR-34를 사용하여 HSM과 AWS Payment Cryptography 간에 공유 KEK를 설정하는 것이 좋습니다. 그런 다음 TR-31을 사용하여 나머지 키를 전송할 수 있습니다.

1. 

****내보내기 프로세스 초기화****  
를 실행**get-parameters-for-export**하여 키 내보내기를 위한 키 페어를 생성합니다. 이 키 페어를 사용하여 TR-34 페이로드에 서명합니다. TR-34 용어에서 이는 KDH 서명 인증서입니다. 인증서는 수명이 짧으며에 지정된 기간 동안만 유효합니다`ParametersValidUntilTimestamp`.
**참고**  
모든 인증서는 base64 인코딩에 있습니다.  
**Example**  

   ```
   $ aws payment-cryptography get-parameters-for-export \
       --signing-key-algorithm RSA_2048 \
       --key-material-type TR34_KEY_BLOCK
   ```

   ```
   {
     "SigningKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUV2RENDQXFTZ0F3SUJ...",
     "SigningKeyCertificateChain": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS....",
     "SigningKeyAlgorithm": "RSA_2048",
     "ExportToken": "export-token-au7pvkbsq4mbup6i",
     "ParametersValidUntilTimestamp": "2023-06-13T15:40:24.036000-07:00"
   }
   ```

1. 

****AWS Payment Cryptography 인증서를 수신 시스템으로 가져오기****  
1단계의 인증서 체인을 수신 시스템으로 가져옵니다.

1. 

****수신 시스템의 인증서 설정****  
전송된 페이로드를 보호하기 위해 전송 당사자(KDH)는 페이로드를 암호화합니다. 수신 시스템(일반적으로 HSM 또는 파트너의 HSM)은 퍼블릭 키를 생성하고 X.509 퍼블릭 키 인증서를 생성해야 합니다. AWS Private CA 를 사용하여 인증서를 생성할 수 있지만 모든 인증 기관을 사용할 수 있습니다.

   인증서를 받은 후 **ImportKey** 명령을 사용하여 루트 인증서를 AWS Payment Cryptography로 가져옵니다. 이 경우 `KeyMaterialType`을 `RootCertificatePublicKey`로, `KeyUsageType`를 `TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE`으로 설정합니다.

   리프 인증서에 서명하는 루트 키이기 `KeyUsageType` 때문에를 `TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE`로 사용합니다. 잎 인증서를 AWS Payment Cryptography로 가져올 필요가 없습니다. 잎 인증서를 인라인으로 전달할 수 있습니다.
**참고**  
이전에 루트 인증서를 가져온 경우이 단계를 건너뜁니다. 중간 인증서의 경우를 사용합니다`TrustedCertificatePublicKey`.

1. 

****키 내보내기****  
가 로 `KeyMaterialType` 설정된 **ExportKey** API를 호출합니다`TR34_KEY_BLOCK`. 다음을 제공해야 합니다.
   + 로 3단계에서 루트 CA의 keyARN `CertificateAuthorityPublicKeyIdentifier`
   + 로 3단계의 리프 인증서 `WrappingKeyCertificate`
   + 로 내보내려는 키의 keyARN(또는 별칭) `--export-key-identifier`
   + 1단계의 내보내기 토큰  
**Example**  

   ```
   $ aws payment-cryptography export-key \
       --export-key-identifier "example-export-key" \
       --key-material '{"Tr34KeyBlock": { \
       "CertificateAuthorityPublicKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/4kd6xud22e64wcbk", \
       "ExportToken": "export-token-au7pvkbsq4mbup6i", \
       "KeyBlockFormat": "X9_TR34_2012", \
       "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUV2RENDQXFXZ0F3SUJBZ0lSQ..."} \
       }'
   ```

   ```
   {
     "WrappedKey": {
       "KeyMaterial": "308205A106092A864886F70D010702A08205923082058...",
       "WrappedKeyMaterialFormat": "TR34_KEY_BLOCK"
     }
   }
   ```

### 비대칭 기법(ECDH)을 사용하여 키 내보내기
<a name="keys-export-ecdh"></a>

![\[AWS ECDH를 사용한 Payment Cryptography 키 암호화 키 가져오기 프로세스\]](http://docs.aws.amazon.com/ko_kr/payment-cryptography/latest/userguide/images/keyimport-ecdh-export.png)


타원 곡선 Diffie-Hellman(ECDH)은 ECC 비대칭 암호화를 사용하여 사전 교환된 키 없이 두 당사자 간에 공유 키를 설정합니다. ECDH 키는 임시 키이므로 AWS Payment Cryptography는 키를 저장하지 않습니다. 이 프로세스에서 일회성 [KBPK/KEK](terminology.md#terms.kbpk)는 ECDH를 사용하여 파생됩니다. 이 파생 키는 다른 KBPK, BDK, IPEK 키 또는 기타 키 유형일 수 있는 전송하려는 키를 래핑하는 데 즉시 사용됩니다.

내보낼 때 AWS Payment Cryptography를 당사자 U(이니시에이터)라고 하며 수신 시스템을 당사자 V(응답자)라고 합니다.

**참고**  
ECDH는 모든 대칭 키 유형을 교환하는 데 사용할 수 있지만 KEK가 아직 설정되지 않은 경우 AES-256 키를 전송하는 데 사용할 수 있는 유일한 접근 방식입니다.

1. 

****ECC 키 페어 생성****  
를 호출`create-key`하여이 프로세스에 대한 ECC 키 페어를 생성합니다. 이 API는 키 가져오기 또는 내보내기를 위한 키 페어를 생성합니다. 생성 시이 ECC 키를 사용하여 파생할 수 있는 키 종류를 지정합니다. ECDH를 사용하여 다른 키를 교환(래핑)할 때는 값을 사용합니다`TR31_K1_KEY_BLOCK_PROTECTION_KEY`.
**참고**  
 하위 수준 ECDH는 어떤 목적으로든 사용할 수 있는 파생 키를 생성하지만 AWS Payment Cryptography는 단일 파생 키 유형에만 키를 사용할 수 있도록 허용하여 여러 목적으로 키를 실수로 재사용하는 것을 제한합니다.

   ```
   $ aws payment-cryptography create-key --exportable --key-attributes KeyAlgorithm=ECC_NIST_P256,KeyUsage=TR31_K3_ASYMMETRIC_KEY_FOR_KEY_AGREEMENT,KeyClass=ASYMMETRIC_KEY_PAIR,KeyModesOfUse='{DeriveKey=true}' --derive-key-usage "TR31_K1_KEY_BLOCK_PROTECTION_KEY"
   ```

   ```
   {
           "Key": {
               "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/wc3rjsssguhxtilv",
               "KeyAttributes": {
                   "KeyUsage": "TR31_K3_ASYMMETRIC_KEY_FOR_KEY_AGREEMENT",
                   "KeyClass": "ASYMMETRIC_KEY_PAIR",
                   "KeyAlgorithm": "ECC_NIST_P256",
                   "KeyModesOfUse": {
                       "Encrypt": false,
                       "Decrypt": false,
                       "Wrap": false,
                       "Unwrap": false,
                       "Generate": false,
                       "Sign": false,
                       "Verify": false,
                       "DeriveKey": true,
                       "NoRestrictions": false
                   }
               },
               "KeyCheckValue": "2432827F",
               "KeyCheckValueAlgorithm": "CMAC",
               "Enabled": true,
               "Exportable": true,
               "KeyState": "CREATE_COMPLETE",
               "KeyOrigin": "AWS_PAYMENT_CRYPTOGRAPHY",
               "CreateTimestamp": "2025-03-28T22:03:41.087000-07:00",
               "UsageStartTimestamp": "2025-03-28T22:03:41.068000-07:00"
           }
       }
   ```

1. 

****퍼블릭 키 인증서 가져오기****  
를 호출`get-public-key-certificate`하여 특정 리전의 AWS Payment Cryptography 전용 계정 CA에서 서명한 X.509 인증서로 퍼블릭 키를 수신합니다.  
**Example**  

   ```
   $ aws payment-cryptography get-public-key-certificate \
              --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/wc3rjsssguhxtilv
   ```

   ```
   {
         "KeyCertificate": "LS0tLS1CRUdJTi...",
         "KeyCertificateChain": "LS0tLS1CRUdJT..."
       }
   ```

1. 

****상대방 시스템에 퍼블릭 인증서 설치(당사자 V)****  
HSMs 많은 경우 키를 설정하려면 1단계에서 생성된 퍼블릭 인증서를 설치, 로드 또는 신뢰해야 합니다. 여기에는 HSM에 따라 전체 인증서 체인 또는 루트 인증서만 포함될 수 있습니다. 구체적인 지침은 HSM 설명서를 참조하세요.

1. 

****소스 시스템에서 ECC 키 페어를 생성하고 AWS Payment Cryptography에 인증서 체인 제공****  
ECDH에서 각 당사자는 키 페어를 생성하고 공통 키에 동의합니다. AWS Payment Cryptography가 키를 추출하려면 상대방의 퍼블릭 키가 X.509 퍼블릭 키 형식으로 필요합니다.

   HSM에서 키를 전송할 때 해당 HSM에 키 페어를 생성합니다. 키 블록HSMs의 경우 키 헤더는와 비슷합니다`D0144K3EX00E0000`. 인증서를 생성할 때 일반적으로 HSM에서 CSR을 생성한 다음 HSM, 타사 또는와 같은 서비스가 인증서를 생성할 AWS Private CA 수 있습니다.

   KeyMaterialTypeKeyUsageType이 인 `importKey` 명령을 사용하여 루트 인증서를 AWS Payment Cryptography에 로드합니다`TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE`. `RootCertificatePublicKey` 

   중간 인증서의 경우 `importKey` 명령을의 KeyMaterialType `TrustedCertificatePublicKey` 및의 KeyUsageType과 함께 사용합니다`TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE`. 여러 중간 인증서에 대해이 프로세스를 반복합니다. 체인에서 마지막으로 가져온 인증서`KeyArn`의를 후속 내보내기 명령에 대한 입력으로 사용합니다.
**참고**  
리프 인증서를 가져오지 마십시오. 내보내기 명령 중에 직접 제공합니다.

1. 

****AWS Payment Cryptography에서 키 추출 및 키 내보내기****  
내보낼 때 서비스는 ECDH를 사용하여 키를 추출한 다음 즉시 이를 [KBPK](terminology.md#terms.kbpk)로 사용하여 TR-31을 사용하여 내보낼 키를 래핑합니다. 내보낼 키는 TR-31 유효한 조합이 적용되는 모든 TDES 또는 AES 키일 수 있습니다. 단, 래핑 키가 내보낼 키만큼 강력해야 합니다.

   ```
   $ aws payment-cryptography export-key \
               --export-key-identifier arn:aws:payment-cryptography:us-west-2:529027455495:key/e3a65davqhbpjm4h \
               --key-material='{
                 "DiffieHellmanTr31KeyBlock": {
                   "CertificateAuthorityPublicKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/swseahwtq2oj6zi5",
                   "DerivationData": {
                     "SharedInformation": "ADEF567890"
                   },
                   "DeriveKeyAlgorithm": "AES_256",
                   "KeyDerivationFunction": "NIST_SP800",
                   "KeyDerivationHashAlgorithm": "SHA_256",
                   "PrivateKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/wc3rjsssguhxtilv",
                   "PublicKeyCertificate": "LS0tLS1CRUdJTiBDRVJUSUZJQ0FUR..."
                 }
               }'
   ```

   ```
   {
               "WrappedKey": {
                   "WrappedKeyMaterialFormat": "TR31_KEY_BLOCK",
                   "KeyMaterial": "D0112K1TB00E00007012724C0FAAF64DA50E2FF4F9A94DF50441143294E0E995DB2171554223EAA56D078C4CFCB1C112B33BBF05597EE700",
                   "KeyCheckValue": "E421AD",
                   "KeyCheckValueAlgorithm": "ANSI_X9_24"
               }
           }
   ```

1. 

****파티 V HSM에서 ECDH를 사용하여 일회성 키 생성****  
많은 HSMs 및 관련 시스템은 ECDH를 사용하여 키 설정을 지원합니다. 1단계의 퍼블릭 키를 퍼블릭 키로 지정하고 3단계의 키를 프라이빗 키로 지정합니다. 파생 방법과 같은 허용 가능한 옵션은 [API 가이드를](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ExportDiffieHellmanTr31KeyBlock.html) 참조하세요.
**참고**  
 해시 유형과 같은 파생 파라미터는 양쪽에서 정확히 일치해야 합니다. 그렇지 않으면 다른 키를 생성합니다.

1. 

****대상 시스템으로 키 가져오기****  
마지막으로 표준 TR-31 명령을 사용하여 AWS Payment Cryptography에서 키를 가져옵니다. ECDH 파생 키를 KBPK로 지정하고 이전에 AWS Payment Cryptography에서 내보낸 TR-31 키 블록을 사용합니다.

### 비대칭 기법을 사용하여 키 내보내기(RSA 랩)
<a name="keys-export-rsawrap"></a>

 TR-34를 사용할 수 없는 경우 키 교환에 RSA 래핑/언래핑을 사용할 수 있습니다. TR-34와 마찬가지로이 메서드는 RSA 비대칭 암호화를 사용하여 대칭 키를 암호화합니다. 그러나 RSA 랩에는 다음이 포함되지 않습니다.
+ 전송 당사자에 의한 페이로드 서명
+ 전송 중에 키 메타데이터 무결성을 유지하는 키 블록

**참고**  
RSA 랩을 사용하여 TDES 및 AES-128 키를 내보낼 수 있습니다.

1. 

****수신 시스템에서 RSA 키 및 인증서 생성****  
래핑된 키를 수신하기 위한 RSA 키를 생성하거나 식별합니다. 키는 X.509 인증서 형식이어야 합니다. 인증서를 AWS Payment Cryptography로 가져올 수 있는 루트 인증서로 서명했는지 확인합니다.

1. 

****루트 퍼블릭 인증서를 AWS Payment Cryptography로 가져오기****  
`--key-material` 옵션과 **import-key** 함께 사용하여 인증서 가져오기

   ```
   $ aws payment-cryptography import-key \
       --key-material='{"RootCertificatePublicKey": { \
       "KeyAttributes": { \
       "KeyAlgorithm": "RSA_4096", \
       "KeyClass": "PUBLIC_KEY", \
       "KeyModesOfUse": {"Verify": true}, \
       "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE"}, \
       "PublicKeyCertificate": "LS0tLS1CRUdJTiBDRV..."} \
       }'
   ```

   ```
   {
     "Key": {
       "CreateTimestamp": "2023-09-14T10:50:32.365000-07:00",
       "Enabled": true,
       "KeyArn": "arn:aws:payment-cryptography:us-east-2:111122223333:key/nsq2i3mbg6sn775f",
       "KeyAttributes": {
         "KeyAlgorithm": "RSA_4096",
         "KeyClass": "PUBLIC_KEY",
         "KeyModesOfUse": {
           "Decrypt": false,
           "DeriveKey": false,
           "Encrypt": false,
           "Generate": false,
           "NoRestrictions": false,
           "Sign": false,
           "Unwrap": false,
           "Verify": true,
           "Wrap": false
         },
         "KeyUsage": "TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE"
       },
       "KeyOrigin": "EXTERNAL",
       "KeyState": "CREATE_COMPLETE",
       "UsageStartTimestamp": "2023-09-14T10:50:32.365000-07:00"
     }
   }
   ```

1. 

****키 내보내기****  
리프 인증서를 사용하여 키를 내보내도록 AWS Payment Cryptography에 지시합니다. 다음을 지정해야 합니다.
   + 2단계에서 가져온 루트 인증서의 ARN
   + 내보내기를 위한 리프 인증서
   + 내보낼 대칭 키

   출력은 대칭 키의 16진수로 인코딩된 이진 래핑(암호화) 버전입니다.  
**Example 예 - 키 내보내기**  

   ```
   $ cat export-key.json
   ```

   ```
   {
     "ExportKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi",
     "KeyMaterial": {
       "KeyCryptogram": {
         "CertificateAuthorityPublicKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/zabouwe3574jysdl",
         "WrappingKeyCertificate": "LS0tLS1CRUdJTiBDEXAMPLE...",
         "WrappingSpec": "RSA_OAEP_SHA_256"
       }
     }
   }
   ```

   ```
   $ aws payment-cryptography export-key \
       --cli-input-json file://export-key.json
   ```

   ```
   {
     "WrappedKey": {
       "KeyMaterial": "18874746731E9E1C4562E4116D1C2477063FCB08454D757D81854AEAEE0A52B1F9D303FA29C02DC82AE7785353816EFAC8B5F4F79CC29A1DDA80C65F34364373D8C74E5EC67E4CB55DEA7F091210DCACD3C46FE4A5DAA0F0D9CAA7C959CA7144A5E7052F34AAED93EF44C004AE7ABEBD616C955BBA10993C06FB905319F87B9B4E1B7A7C7D17AF15B6154E807B9C574387A43197C31C6E565554437A252EFF8AC81613305760D11F9B53B08A1BA79EC7E7C82C48083C4E2D0B6F86C34AB83647BDD7E85240AD1AF3C0F6CA8C5BF323BB2D3896457C554F978F4C9436513F494130A6FADBC038D51898AAD72E02A89FF256C524E7B5D85B813751B718C4933D9DC6031F2C5B2E13351A54B6021B2DB72AA0C7EA54727FBCD557E67E5E7CC2E165576E39DB4DA33510BA9A3C847313103A18EF3B23A3440471864D58C79C569D5CD2A653AC16043CA9A61E6878F74C18EE15F9AB23754C37A945B68C0437C19F0079F74B573D9B59DAC25A20781DBE8075C947C9EDC76177A1B0794288CBF89567A541E8401C74E85B8E1C3E501860AF702F641CAA04327018A84EF3A82932A2BCF37047AB40FE77E0A6F68D0904C7E60983CD6F871D5E0E27EEF425C97D39E9394E8927EEF5D2EA9388DF3C5C241F99378DF5DADE8D0F0CF453C803BA38BA702B9651685FAFA6DCB4B14333F8D3C57F2D93E0852AA94EEC3AF3217CAE5873EFD9",
       "WrappedKeyMaterialFormat": "KEY_CRYPTOGRAM"
     }
   }
   ```

1. 

****키를 수신 시스템으로 가져오기****  
많은 HSMs 및 관련 시스템은 RSA 언래핑( AWS Payment Cryptography 포함)을 사용하여 키 가져오기를 지원합니다. 가져올 때 다음을 지정합니다.
   + 암호화 인증서로 1단계의 퍼블릭 키
   + RSA 형식
   + 패딩 모드 - PKCS\$11 v2.2 OAEP(SHA 256 사용)
**참고**  
래핑된 키는 hexBinary 형식으로 출력됩니다. 시스템에 base64와 같은 다른 바이너리 표현이 필요한 경우 형식을 변환해야 할 수 있습니다.

### 사전 설정된 키 교환 키(TR-31)를 사용하여 대칭 키를 내보냅니다.
<a name="keys-export-tr31"></a>

여러 키를 교환하거나 키 교체를 지원하는 경우 일반적으로 먼저 종이 키 구성 요소를 사용하거나 AWS Payment Cryptography에서 [TR-34](#keys-export-tr34)를 사용하여 초기 키 암호화 키(KEK)를 교환합니다. KEK를 설정한 후 이를 사용하여 다른 KEKs. HSM 공급업체에서 널리 지원하는 ANSI TR-31을 사용하여이 키 교환을 지원합니다.

1. 

****키 암호화 키(KEK) 설정****  
KEK를 이미 교환했고 keyARN(또는 keyAlias)을 사용할 수 있는지 확인합니다.

1. 

****AWS Payment Cryptography에서 키 생성****  
키가 아직 없는 경우 키를 생성합니다. 또는 다른 시스템에서 키를 생성하고 [가져오기](#keys-export-tr31) 명령을 사용할 수 있습니다.

1. 

****AWS Payment Cryptography에서 키 내보내기****  
TR-31 형식으로 내보낼 때 내보낼 키와 사용할 래핑 키를 지정합니다.  
**Example 예 - TR31 키 블록을 사용하여 키 내보내기**  

   ```
   $ aws payment-cryptography export-key \
       --key-material='{"Tr31KeyBlock": \
       { "WrappingKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza" }}' \
       --export-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/5rplquuwozodpwsp
   ```

   ```
   {
     "WrappedKey": {
       "KeyCheckValue": "73C263",
       "KeyCheckValueAlgorithm": "ANSI_X9_24",
       "KeyMaterial": "D0144K0AB00E0000A24D3ACF3005F30A6E31D533E07F2E1B17A2A003B338B1E79E5B3AD4FBF7850FACF9A3784489581A543C84816C8D3542AE888CE6D4EDDFD09C39957B131617BC",
       "WrappedKeyMaterialFormat": "TR31_KEY_BLOCK"
     }
   }
   ```

1. 

****키를 시스템으로 가져오기****  
시스템의 가져오기 키 구현을 사용하여 키를 가져옵니다.

## DUKPT 초기 키 내보내기(IPEK/IK)
<a name="keys-export-ipek"></a>

[DUKPT](terminology.md#terms.dukpt)를 사용하는 경우 터미널 플릿에 대해 단일 기본 파생 키(BDK)를 생성할 수 있습니다. 터미널은 BDK에 직접 액세스할 수 없습니다. 대신 각 터미널은 IPEK 또는 초기 키(IK)라고 하는 고유한 초기 터미널 키를 받습니다. 각 IPEK는 고유한 키 일련 번호(KSN)를 사용하여 BDK에서 파생됩니다.

KSN 구조는 암호화 유형에 따라 다릅니다.
+ TDES의 경우: 10바이트 KSN에는 다음이 포함됩니다.
  + 키 세트 ID의 경우 24비트
  + 터미널 ID의 경우 19비트
  + 트랜잭션 카운터의 경우 21비트
+ AES의 경우: 12바이트 KSN에는 다음이 포함됩니다.
  + BDK ID의 경우 32비트
  + 파생 식별자(ID)의 경우 32비트
  + 트랜잭션 카운터의 경우 32비트

이러한 초기 키를 생성하고 내보내는 메커니즘을 제공합니다. TR-31, TR-34 또는 RSA 래핑 방법을 사용하여 생성된 키를 내보낼 수 있습니다. IPEK 키는 유지되지 않으며 AWS Payment Cryptography의 후속 작업에 사용할 수 없습니다.

KSN의 처음 두 부분 간에 분할을 적용하지 않습니다. 유도 식별자를 BDK와 함께 저장하려면 AWS 태그를 사용할 수 있습니다.

**참고**  
KSN의 카운터 부분(AES DUKPT의 경우 32비트)은 IPEK/IK 파생에 사용되지 않습니다. 예를 들어 12345678901234560001 및 12345678901234569999의 입력은 동일한 IPEK를 생성합니다.

```
$ aws payment-cryptography export-key \
    --key-material='{"Tr31KeyBlock": { \
    "WrappingKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza"}} ' \
    --export-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/tqv5yij6wtxx64pi \
    --export-attributes 'ExportDukptInitialKey={KeySerialNumber=12345678901234560001}'
```

```
{
"WrappedKey": {
    "KeyCheckValue": "73C263",
    "KeyCheckValueAlgorithm": "ANSI_X9_24",
    "KeyMaterial": "B0096B1TX00S000038A8A06588B9011F0D5EEF1CCAECFA6962647A89195B7A98BDA65DDE7C57FEA507559AF2A5D601D1",
    "WrappedKeyMaterialFormat": "TR31_KEY_BLOCK"
}
}
```

## 내보낼 키 블록 헤더 지정
<a name="keys-export-optionalheaders"></a>

ASC TR-31 또는 TR-34 형식으로 내보낼 때 키 블록 정보를 수정하거나 추가할 수 있습니다. 다음 표에서는 TR-31 키 블록 형식과 내보내기 중에 수정할 수 있는 요소에 대해 설명합니다.


| 키 블록 속성 | 용도 | 내보내기 중에 수정할 수 있나요? | 참고 | 
| --- | --- | --- | --- | 
| 버전 ID |  키 구성 요소를 보호하는 데 사용되는 방법을 정의합니다. 표준에는 다음이 포함됩니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/payment-cryptography/latest/userguide/keys-export.html)  | 아니요 |  TDES 래핑 키에는 버전 B를 사용하고 AES 래핑 키에는 버전 D를 사용합니다. 버전 A 및 C는 가져오기 작업에만 지원됩니다.  | 
| 키 블록 길이 | 나머지 메시지의 길이를 지정합니다. | 아니요 |  이 값은 자동으로 계산됩니다. 사양에 따라 키 패딩을 추가할 수 있으므로 페이로드를 해독하기 전에 길이가 잘못 표시될 수 있습니다.  | 
| 키 사용 |  다음과 같이 키에 허용되는 목적을 정의합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/payment-cryptography/latest/userguide/keys-export.html)  | 아니요 |  | 
| Algorithm |  기본 키의 알고리즘을 지정합니다. 다음을 지원합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/payment-cryptography/latest/userguide/keys-export.html)  | 아니요 | 이 값을 있는 그대로 내보냅니다. | 
| 키 사용 |  다음과 같은 허용되는 작업을 정의합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/payment-cryptography/latest/userguide/keys-export.html)  | 예\$1 |  | 
| 키 버전 | 키 교체/회전을 위한 버전 번호를 나타냅니다. 지정하지 않으면 기본값은 00입니다. | 예 - 추가할 수 있음 |  | 
| 키 내보내기 |  키를 내보낼 수 있는지 여부를 제어합니다. [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/payment-cryptography/latest/userguide/keys-export.html)  | 예\$1 |  | 
| 선택적 키 블록 | 예 - 추가할 수 있음 |  선택적 키 블록은 키에 암호화 방식으로 바인딩된 이름/값 페어입니다. 예: DUKPT 키의 KeySetID. 이름/값 페어 입력을 기반으로 블록 수, 각 블록의 길이 및 패딩 블록(PB)을 자동으로 계산합니다.  |  | 

*\$1 값을 수정할 때 새 값은 AWS Payment Cryptography의 현재 값보다 더 제한적이어야 합니다.* 예제: 
+ 현재 키 사용 모드가 Generate=True,Verify=True인 경우 이를 Generate=True,Verify=False로 변경할 수 있습니다.
+ 키가 이미 내보내기 불가능으로 설정된 경우 키를 내보내기 가능으로 변경할 수 없습니다.

키를 내보내면 내보내는 키의 현재 값이 자동으로 적용됩니다. 그러나 수신 시스템으로 전송하기 전에 이러한 값을 수정하거나 추가할 수 있습니다. 다음은 몇 가지 일반적인 시나리오입니다.
+ 키를 결제 터미널로 내보낼 때 터미널은 일반적으로 키만 가져오고 내보내서는 안 `Not Exportable`되므로 내보내기 가능성을 로 설정합니다.
+ 연결된 키 메타데이터를 수신 시스템에 전달해야 하는 경우 사용자 지정 페이로드를 생성하는 대신 TR-31 선택적 헤더를 사용하여 메타데이터를 키에 암호화 방식으로 바인딩합니다.
+ `KeyVersion` 필드를 사용하여 키 버전을 설정하여 키 교체를 추적합니다.

TR-31/X9.143은 공통 헤더를 정의하지만 Payment AWS Cryptography 파라미터를 충족하고 수신 시스템이 이를 수락할 수 있는 한 다른 헤더를 사용할 수 있습니다. 내보내기 중 키 블록 헤더에 대한 자세한 내용은 API 안내서의 [키 블록 헤더](https://docs.aws.amazon.com/payment-cryptography/latest/DataAPIReference/API_KeyBlockHeaders.html)를 참조하세요.

다음은 다음과 같은 사양으로 BDK 키(예: KIF)를 내보내는 예입니다.
+ 키 버전: 02
+ KeyExportability: NON\$1EXPORTABLE
+ KeySetID: 00ABCDEFAB(00은 TDES 키를 나타내고 ABCDEFABCD는 초기 키임)

 키 사용 모드를 지정하지 않으므로이 키는 arn:aws:payment-cryptography:us-east-2:111122223333:key/5rplquuwozodpwsp(DeriveKey = true)에서 사용 모드를 상속합니다.

**참고**  
이 예제에서 내보내기를 내보내기 불가능으로 설정하더라도 [KIF](terminology.md#terms.kif)는 여전히 다음을 수행할 수 있습니다.  
[DUKPT에 사용되는 IPEK/IK](terminology.md#terms.ipek)와 같은 파생 키
이러한 파생 키를 내보내 디바이스에를 설치합니다.
이는 표준에서 특별히 허용됩니다.

```
$ aws payment-cryptography export-key \
    --key-material='{"Tr31KeyBlock": { \
    "WrappingKeyIdentifier": "arn:aws:payment-cryptography:us-east-2:111122223333:key/ov6icy4ryas4zcza", \
    "KeyBlockHeaders": { \
    "KeyModesOfUse": { \
    "Derive": true}, \
    "KeyExportability": "NON_EXPORTABLE", \
    "KeyVersion": "02", \
    "OptionalBlocks": { \
    "BI": "00ABCDEFABCD"}}} \
    }' \
    --export-key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/5rplquuwozodpwsp
```

```
{
"WrappedKey": {
    "WrappedKeyMaterialFormat": "TR31_KEY_BLOCK",
    "KeyMaterial": "EXAMPLE_KEY_MATERIAL_TR31",
    "KeyCheckValue": "A4C9B3",
    "KeyCheckValueAlgorithm": "ANSI_X9_24"
    }
}
```

### 일반 헤더
<a name="keys-export-commonheaders"></a>

X9.143은 일반적인 사용 사례에 대한 특정 헤더를 정의합니다. HM(HMAC 해시) 헤더를 제외하고 AWS Payment Cryptography는 이러한 헤더를 구문 분석하거나 활용하지 않습니다.


| 헤더 이름 | 용도 | 일반적인 검증 | 참고 | 
| --- | --- | --- | --- | 
| BI | DUKPT의 기본 파생 키 식별자 | 16진수 문자 2개(TDES의 경우 00, AES의 경우 11), TDES KSI의 경우 101진수 문자 또는 BDK ID(AES DUKPT)의 경우 816진수 문자. | (BDK ID, AES DUKPT용) 또는 키 세트 식별자(KSI, TDES DUKPT용)를 포함합니다. BDK ID 또는 KSI를 교환할 때 사용할 수 있지만 IK 및 KS 블록에 포함된 다른 데이터를 교환할 필요는 없습니다. 일반적으로 BI는 KIF로 전송할 때 사용되는 반면, IK 또는 KS는 터미널 자체에 주입할 때 사용됩니다. | 
| HM | HMAC 작업에 대한 해시 유형을 지정합니다. |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ko_kr/payment-cryptography/latest/userguide/keys-export.html)  | 서비스는 내보내기 시이 필드를 자동으로 채우고 가져오기 시 구문 분석합니다. SHAKE128과 같은 서비스에서 지원하지 않는 해시 유형은 가져올 수 있지만 암호화 함수에는 사용할 수 없습니다. | 
| IK |  AES DUKPT의 초기 키 일련 번호 | 16 16진수 문자  | 이 값은 수신 디바이스에서 초기 DUKPT 키 사용을 인스턴스화하는 데 사용되며 BDK에서 파생된 초기 키를 식별합니다. 이 필드에는 일반적으로 파생 데이터가 포함되지만 카운터는 포함되지 않습니다. TDES DUKPT용 KS를 사용합니다. | 
| KS |  TDES DUKPT의 초기 키 일련 번호 | 20 16진수 문자  | 이 값은 수신 디바이스에서 초기 DUKPT 키 사용을 인스턴스화하는 데 사용되며 BDK에서 파생된 초기 키를 식별합니다. 이 필드에는 일반적으로 파생 데이터 \$1 제로화된 카운터 값이 포함됩니다. AES DUKPT용 IK를 사용합니다. | 
| KP | 래핑 키의 [KCV](terminology.md#terms.kcv)  | 2개의 16진수 문자는 KCV 메서드를 나타냅니다(X9.24 메서드의 경우 00, CMAC 메서드의 경우 01). 그 뒤에는 일반적으로 616진수 문자인 KCV 값이 옵니다. 예를 들어 010FA329는 01(CMAC) 메서드를 사용하여 계산된 0FA329의 KCV를 나타냅니다.  | 이 값은 수신 디바이스에서 초기 DUKPT 키 사용을 인스턴스화하는 데 사용되며 BDK에서 파생된 초기 키를 식별합니다. 이 필드에는 일반적으로 파생 데이터 \$1 제로화된 카운터 값이 포함됩니다. AES DUKPT용 IK를 사용합니다. | 
| PB | 패딩 블록 | 임의의 인쇄 가능한 ASCII 문자  | 서비스는 내보내기 시이 필드를 자동으로 채워 선택적 헤더가 암호화 블록 길이의 배수가 되도록 합니다. | 

## 비대칭(RSA) 키 내보내기
<a name="keys-export-publickey"></a>

인증서 형식으로 퍼블릭 키를 내보내려면 **get-public-key-certificate** 명령을 사용합니다. 이 명령은 다음을 반환합니다.
+ 인증서
+ 루트 인증서

두 인증서 모두 base64 인코딩에 있습니다.

**참고**  
이 작업은 멱등성이 아닙니다. 후속 호출은 동일한 기본 키를 사용하는 경우에도 다른 인증서를 생성할 수 있습니다.

**Example**  

```
$ aws payment-cryptography get-public-key-certificate \
     --key-identifier arn:aws:payment-cryptography:us-east-2:111122223333:key/5dza7xqd6soanjtb
```

```
{
"KeyCertificate": "LS0tLS1CRUdJTi...",
"KeyCertificateChain": "LS0tLS1CRUdJT..."
}
```