

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 匯出金鑰
<a name="keys-export"></a>

**Contents**
+ [匯出對稱金鑰](#keys-export-symmetric)
  + [使用非對稱技術匯出金鑰 (TR-34)](#keys-export-tr34)
  + [使用非對稱技術 (ECDH) 匯出金鑰](#keys-export-ecdh)
  + [使用非對稱技術匯出金鑰 (RSA Wrap)](#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 付款密碼編譯會做為金鑰分佈主機 (KDH)，而您的目標系統會成為金鑰接收裝置 (KRD)。

**注意**  
如果您的 HSM 支援 TR-34 匯出，但不支援 TR-34 匯入，建議您先使用 TR-34 在 HSM 與 AWS 付款密碼編譯之間建立共用 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 付款密碼編譯憑證匯入您的接收系統****  
從步驟 1 將憑證鏈匯入您的接收系統。

1. 

****設定接收系統的憑證****  
為了保護傳輸的承載，傳送方 (KDH) 會對其進行加密。您的接收系統 （通常是 HSM 或合作夥伴的 HSM) 需要產生公有金鑰並建立 X.509 公有金鑰憑證。您可以使用 AWS 私有 CA 來產生憑證，但您可以使用任何憑證授權單位。

   取得憑證後，請使用 **ImportKey**命令將根憑證匯入 AWS 付款密碼編譯。將 `KeyMaterialType` 設定為 `RootCertificatePublicKey`，將 `KeyUsageType` 設定為 `TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE`。

   我們使用 `TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE`做為 ，`KeyUsageType`因為這是簽署分葉憑證的根金鑰。您不需要將分葉憑證匯入 AWS 付款密碼編譯 - 您可以內嵌傳遞憑證。
**注意**  
如果您先前已匯入根憑證，請略過此步驟。對於中繼憑證，請使用 `TrustedCertificatePublicKey`。

1. 

****匯出您的金鑰****  
呼叫 **ExportKey** API，並將 `KeyMaterialType`設定為 `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 的付款密碼編譯金鑰加密金鑰匯入程序\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/images/keyimport-ecdh-export.png)


橢圓曲線 Diffie-Hellman (ECDH) 使用 ECC 非對稱密碼編譯在兩方之間建立共用金鑰，而不需要預先交換的金鑰。ECDH 金鑰是暫時性的，因此 AWS 付款密碼編譯不會儲存它們。在此程序中，使用 ECDH 衍生一次性 [KBPK/KEK](terminology.md#terms.kbpk)。該衍生金鑰會立即用於包裝您要傳輸的金鑰，這可能是另一個 KBPK、BDK、IPEK 金鑰或其他金鑰類型。

匯出時， AWS 付款密碼編譯稱為 U 方 （啟動者），而接收系統稱為 V 方 （回應者）。

**注意**  
ECDH 可用來交換任何對稱金鑰類型，但如果尚未建立 KEK，則是唯一可用於傳輸 AES-256 金鑰的方法。

1. 

****產生 ECC 金鑰對****  
呼叫 `create-key` 來建立此程序的 ECC 金鑰對。此 API 會為金鑰匯入或匯出產生金鑰對。在建立時，指定可以使用此 ECC 金鑰衍生的金鑰類型。使用 ECDH 交換 （包裝） 其他金鑰時，請使用 的值`TR31_K1_KEY_BLOCK_PROTECTION_KEY`。
**注意**  
 雖然低階 ECDH 會產生可用於任何用途的衍生金鑰，但 AWS 付款密碼編譯會允許金鑰僅用於單一衍生金鑰類型，以限制金鑰意外重複使用多次用途。

   ```
   $ 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` 以接收公有金鑰做為您帳戶的 CA 簽署的 X.509 憑證，該憑證是特定區域的 AWS 付款密碼編譯所特有。  
**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 付款密碼編譯****  
在 ECDH 中，每一方都會產生金鑰對，並同意通用金鑰。若要讓 AWS 付款密碼編譯衍生金鑰，它需要 X.509 公有金鑰格式的對手方公有金鑰。

   從 HSM 傳輸金鑰時，請在該 HSM 上建立金鑰對。對於支援金鑰區塊HSMs，金鑰標頭看起來會與 類似`D0144K3EX00E0000`。建立憑證時，您通常會在 HSM 上產生 CSR，然後 HSM、第三方或 等服務 AWS 私有 CA 可以產生憑證。

   使用 KeyMaterialType 為 `RootCertificatePublicKey`且 KeyUsageType 為 的 `importKey`命令，將根憑證載入 AWS 付款密碼編譯`TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE`。

   對於中繼憑證，請使用 `importKey`命令搭配 KeyMaterialType `TrustedCertificatePublicKey`和 KeyUsageType `TR31_S0_ASYMMETRIC_KEY_FOR_DIGITAL_SIGNATURE`。針對多個中繼憑證重複此程序。使用鏈結中最後一個匯入憑證`KeyArn`的 作為後續匯出命令的輸入。
**注意**  
請勿匯入分葉憑證。在匯出命令期間直接提供。

1. 

****從 AWS 付款密碼編譯衍生金鑰和匯出金鑰****  
匯出時，服務會使用 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. 

****在 Party V HSM 上使用 ECDH 衍生一次性金鑰****  
許多 HSMs和相關系統支援使用 ECDH 建立金鑰。將步驟 1 的公有金鑰指定為公有金鑰，並將步驟 3 的金鑰指定為私有金鑰。如需允許的選項，例如衍生方法，請參閱 [API 指南](https://docs.aws.amazon.com/payment-cryptography/latest/APIReference/API_ExportDiffieHellmanTr31KeyBlock.html)。
**注意**  
 雜湊類型等衍生參數必須完全符合兩側。否則，您將產生不同的金鑰。

1. 

****將金鑰匯入目標系統****  
最後，使用標準 TR-31 命令從 AWS 付款密碼編譯匯入金鑰。將 ECDH 衍生金鑰指定為 KBPK，並使用先前從 AWS 付款密碼編譯匯出的 TR-31 金鑰區塊。

### 使用非對稱技術匯出金鑰 (RSA Wrap)
<a name="keys-export-rsawrap"></a>

 當 TR-34 無法使用時，您可以使用 RSA wrap/unwrap 進行金鑰交換。如同 TR-34，此方法使用 RSA 非對稱密碼編譯來加密對稱金鑰。不過，RDA 包裝不包含：
+ 傳送方簽署承載
+ 在傳輸期間維護金鑰中繼資料完整性的金鑰區塊

**注意**  
您可以使用 RSA wrap 匯出 TDES 和 AES-128 金鑰。

1. 

****在接收系統上建立 RSA 金鑰和憑證****  
建立或識別用於接收包裝金鑰的 RSA 金鑰。我們需要 X.509 憑證格式的金鑰。確定憑證由根憑證簽署，您可以將其匯入 AWS 付款密碼編譯。

1. 

****將根公有憑證匯入 AWS 付款密碼編譯****  
使用 **import-key**搭配 `--key-material`選項來匯入憑證

   ```
   $ 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
   + 匯出的分葉憑證
   + 要匯出的對稱金鑰

   輸出是對稱金鑰的十六進位編碼二進位包裝 （加密） 版本。  
**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 unwrap 匯入金鑰 （包括 AWS 付款密碼編譯）。匯入時，請指定：
   + 步驟 1 的公有金鑰做為加密憑證
   + RSA 格式
   + PKCS\$11 v2.2 OAEP 的填補模式 （使用 SHA 256)
**注意**  
我們會輸出 hexBinary 格式的包裝金鑰。如果您的系統需要不同的二進位表示法，例如 base64，您可能需要轉換格式。

### 使用預先建立的金鑰交換金鑰 (TR-31) 匯出對稱金鑰
<a name="keys-export-tr31"></a>

交換多個金鑰或支援金鑰輪換時，您通常會先使用紙質金鑰元件交換初始金鑰加密金鑰 (KEK)，或使用 [TR-34](#keys-export-tr34) 交換 AWS 付款密碼編譯。建立 KEK 之後，您可以使用它來傳輸後續金鑰，包括其他 KEKs。我們支援使用 ANSI TR-31 進行此金鑰交換，HSM 廠商廣泛支援此金鑰交換。

1. 

****設定您的金鑰加密金鑰 (KEK)****  
請確定您已交換 KEK，並且有可用的 keyARN （或 keyAlias)。

1. 

****在 AWS 付款密碼編譯上建立您的金鑰****  
如果金鑰尚未存在，請建立金鑰。或者，您可以在其他系統上建立 金鑰，並使用[匯入](#keys-export-tr31)命令。

1. 

****從 AWS 付款密碼編譯匯出您的金鑰****  
以 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 付款密碼編譯的後續操作。

我們不會強制執行 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/zh_tw/payment-cryptography/latest/userguide/keys-export.html)  | 否 |  我們將版本 B 用於 TDES 包裝金鑰，並將版本 D 用於 AES 包裝金鑰。我們僅支援版本 A 和 C 進行匯入操作。  | 
| 金鑰區塊長度 | 指定剩餘訊息的長度 | 否 |  我們會自動計算此值。在解密承載之前，長度可能不正確，因為我們可能會根據規格的要求新增金鑰填補。  | 
| 金鑰使用方式 |  定義金鑰的允許用途，例如： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/keys-export.html)  | 否 |  | 
| 演算法 |  指定基礎金鑰的演算法。我們支援： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/keys-export.html)  | 否 | 我們會依原狀匯出此值。 | 
| 金鑰使用方式 |  定義允許的操作，例如： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/keys-export.html)  | 是\$1 |  | 
| 金鑰版本 | 指出金鑰取代/輪換的版本編號。如果未指定，則預設為 00。 | 是 - 可以附加 |  | 
| 金鑰可匯出性 |  控制是否可以匯出金鑰： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/keys-export.html)  | 是\$1 |  | 
| 選用金鑰區塊 | 是 - 可以附加 |  選用金鑰區塊是以密碼編譯方式繫結至金鑰的名稱/值對。例如，DUKPT 金鑰的 KeySetID。我們會根據您的名稱/值對輸入，自動計算區塊數量、每個區塊的長度和填補區塊 (PB)。  |  | 

*\$1修改值時，您的新值必須比 AWS 付款密碼編譯中的目前值更嚴格。*例如：
+ 如果目前的金鑰使用模式是 Generate=True，Verify=True，您可以將其變更為 Generate=True，Verify=False
+ 如果金鑰已設定為不可匯出，則您無法將其變更為可匯出

匯出金鑰時，我們會自動套用所匯出金鑰的目前值。不過，您可能想要在傳送至接收系統之前修改或附加這些值。以下是一些常見的案例：
+ 將金鑰匯出至付款終端機時，將其可匯出性設定為 ，`Not Exportable`因為終端機通常只會匯入金鑰，不應匯出金鑰。
+ 當您需要將相關聯的金鑰中繼資料傳遞至接收系統時，請使用 TR-31 選用標頭，以密碼編譯方式將中繼資料繫結至金鑰，而不是建立自訂承載。
+ 使用 `KeyVersion` 欄位設定金鑰版本來追蹤金鑰輪換。

TR-31/X9.143 定義了常見的標頭，但您可以使用其他標頭，只要它們符合 AWS 付款密碼編譯參數，而且您的接收系統可以接受它們。如需有關匯出期間金鑰區塊標頭的詳細資訊，請參閱 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 付款密碼編譯不會剖析或使用這些標頭。


| 標頭名稱 | 用途 | 典型驗證 | 備註 | 
| --- | --- | --- | --- | 
| BI | DUKPT 的基本衍生金鑰識別符 | 2 個十六進位字元 (TDES 為 00，AES 為 11)，TDES KSI 為 10 個十六進位字元，BDK ID 為 8 個十六進位字元 (AES DUKPT)。 | 包含 (BDK ID，適用於 AES DUKPT) 或金鑰集識別符 (KSI，適用於 TDES DUKPT)。可在交換 BDK ID 或 KSI 時使用，但不需要交換 IK 和 KS 區塊中包含的其他資料。傳輸到 KIF 時通常會使用 BI，而注入終端機本身時則會使用 IK 或 KS。 | 
| HM | 指定 HMAC 操作的雜湊類型 |  [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/payment-cryptography/latest/userguide/keys-export.html)  | 服務會在匯出時自動填入此欄位，並在匯入時剖析它。您可以匯入 SHAKE128 等服務不支援的雜湊類型，但可能無法用於密碼編譯函數。 | 
| IK |  AES DUKPT 的初始金鑰序號 | 16 個十六進位字元  | 此值用於執行個體化接收裝置上初始 DUKPT 金鑰的使用，並識別衍生自 BDK 的初始金鑰。此欄位通常包含衍生資料，但沒有計數器。將 KS 用於 TDES DUKPT。 | 
| KS |  TDES DUKPT 的初始金鑰序號 | 20 個十六進位字元  | 此值用於執行個體化接收裝置上初始 DUKPT 金鑰的使用，並識別衍生自 BDK 的初始金鑰。此欄位通常包含衍生資料 \$1 歸零計數器值。使用 IK for AES DUKPT。 | 
| KP | 包裝金鑰的 [KCV](terminology.md#terms.kcv)  | 2 個十六進位字元代表 KCV 方法 (X9.24 方法為 00，CMAC 方法為 01)。接著是 KCV 值，通常為 6 個十六進位字元。例如，010FA329 代表使用 01(CMAC) 方法計算的 0FA329 KCV。  | 此值用於執行個體化接收裝置上初始 DUKPT 金鑰的使用，並識別衍生自 BDK 的初始金鑰。此欄位通常包含衍生資料 \$1 歸零計數器值。使用 IK for AES DUKPT。 | 
| 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..."
}
```