

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# ステップ 3: キーマテリアルを暗号化する
<a name="importing-keys-encrypt-key-material"></a>

[パブリックキーとインポートトークンをダウンロード](importing-keys-get-public-key-and-token.md)した後、ダウンロードしたパブリックキーと指定したラップアルゴリズムを使用してキーマテリアルを暗号化します。パブリックキーまたはインポートトークンを置き換える必要がある場合、あるいはラップアルゴリズムを変更する必要がある場合は、新しいパブリックキーとインポートトークンをダウンロードする必要があります。が AWS KMS サポートするパブリックキーとラッピングアルゴリズムの詳細については、[ラップパブリックキーの仕様を選択](importing-keys-get-public-key-and-token.md#select-wrapping-key-spec)「」および「」を参照してください[ラップアルゴリズムの選択](importing-keys-get-public-key-and-token.md#select-wrapping-algorithm)。

キーマテリアルはバイナリ形式である必要があります。詳細については、「[インポートされたキーマテリアルの要件](importing-keys-conceptual.md#importing-keys-material-requirements)」を参照してください。

**注記**  
非対称キーペアの場合、プライベートキーのみを暗号化してインポートします。 は、プライベートキーからパブリックキー AWS KMS を取得します。  
ECC\$1NIST\$1P521 キーマテリアル、RSA\$12048 パブリックラップキー仕様、および RSAES\$1OAEP\$1SHA\$1\$1 ラップアルゴリズムの組み合わせはサポートされていません。  
RSA\$12048 パブリックラップキーを使用して、ECC\$1NIST\$1P521 のキーマテリアルを直接ラップすることはできません。大きなラップキー、または RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1\$1 ラップアルゴリズムを使用してください。  
RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 および RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 ラッピングアルゴリズムは、中国リージョンではサポートされていません。

通常、ハードウェアセキュリティモジュール (HSM) またはキー管理システムからエクスポートする場合、キーマテリアルを暗号化します。バイナリ形式でキーマテリアルをエクスポートする方法については、HSM またはキー管理システムに関するドキュメントを参照してください。OpenSSL を使用して、概念実証デモを提供する、次のセクションを参照できます。

キーマテリアルを暗号化する場合、[パブリックキーとインポートトークンをダウンロード](importing-keys-get-public-key-and-token.md)したときに指定した、同じラップアルゴリズムを使用します。指定したラップアルゴリズムを見つけるには、関連付けられた [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html) リクエストの CloudTrail ログイベントを確認してください。

## テスト用のキーマテリアルを生成
<a name="importing-keys-example-key-material"></a>

次の OpenSSL コマンドは、サポートされている各タイプのテスト用のキーマテリアルを生成します。これらの例は、テストと概念実証デモのみを目的としています。本稼働システムの場合、ハードウェアセキュリティモジュールやキー管理システムなど、より安全な方法を使用してキーマテリアルを生成します。

非対称キーペアのプライベートキーを DER でエンコードされた形式に変換するには、パイプを使ってキーマテリアル生成コマンドを次の `openssl pkcs8` コマンドに渡します。この `topk8` パラメータは、プライベートキーを入力として受け取り、PKCS\$18 形式のキーを返すように OpenSSL に指示します。(デフォルトの動作は逆です) 

```
openssl pkcs8 -topk8 -outform der -nocrypt
```

次のコマンドは、サポートされている各キータイプのテストキーマテリアルを生成します。
+ 対称暗号化キー (32 バイト)

  このコマンドは、256 ビット対称キー (32 バイトのランダム文字列) を生成し、`PlaintextKeyMaterial.bin` ファイルに保存します。このキーマテリアルをエンコードする必要はありません。

  ```
  openssl rand -out PlaintextKeyMaterial.bin 32
  ```

  中国リージョンでのみ、128 ビット対称キー (16 バイトのランダム文字列) を生成する必要があります。

  ```
  openssl rand -out PlaintextKeyMaterial.bin 16
  ```
+ HMAC キー

  このコマンドは、指定したサイズのランダムバイト文字列を生成します。このキーマテリアルをエンコードする必要はありません。

  HMAC キーの長さは、KMS キーのキー仕様で定義されている長さと一致する必要があります。例えば、KMS キーが HMAC\$1384 の場合、384 ビット (48 バイト) キーをインポートする必要があります。

  ```
  openssl rand -out HMAC_224_PlaintextKey.bin 28
  
  openssl rand -out HMAC_256_PlaintextKey.bin 32
  
  openssl rand -out HMAC_384_PlaintextKey.bin 48
  
  openssl rand -out HMAC_512_PlaintextKey.bin 64
  ```
+ RSA プライベートキー

  ```
  openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:2048 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_2048_PrivateKey.der
  
  openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:3072 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_3072_PrivateKey.der
  
  openssl genpkey -algorithm rsa -pkeyopt rsa_keygen_bits:4096 | openssl pkcs8 -topk8 -outform der -nocrypt > RSA_4096_PrivateKey.der
  ```
+ ECC プライベートキー

  ```
  openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-256 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P256_PrivateKey.der
  
  openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-384 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P384_PrivateKey.der
  
  openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:P-521 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_NIST_P521_PrivateKey.der
  
  openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:secp256k1 | openssl pkcs8 -topk8 -outform der -nocrypt > ECC_SECG_P256K1_PrivateKey.der
  ```
+ SM2 プライベートキー (中国リージョンのみ)

  ```
  openssl genpkey -algorithm ec -pkeyopt ec_paramgen_curve:sm2 | openssl pkcs8 -topk8 -outform der -nocrypt > SM2_PrivateKey.der
  ```

## OpenSSL によるキーマテリアルの暗号化の例
<a name="importing-keys-encrypt-key-material-openssl"></a>

以下の例は、[OpenSSL](https://openssl.org/) を使用して、ダウンロードしたパブリックキーでキーマテリアルを暗号化する方法を示しています。SM2 パブリックキー (中国リージョンのみ) を使用してキーマテリアルを暗号化するには、[`SM2OfflineOperationHelper` クラス](offline-operations.md#key-spec-sm-offline-helper)を使用します。各ラッピングアルゴリズムがサポートするキーマテリアルタイプの詳細については、「[ラップアルゴリズムの選択](importing-keys-get-public-key-and-token.md#select-wrapping-algorithm)」を参照してください。

**重要**  
これらの例では、概念実証デモのみです。本稼働システムの場合、より安全な方法 (商用 HSM またはキー管理システムなど) を使用して、キーマテリアルを生成し、保存します。  
ECC\$1NIST\$1P521 キーマテリアル、RSA\$12048 パブリックラップキー仕様、および RSAES\$1OAEP\$1SHA\$1\$1 ラップアルゴリズムの組み合わせはサポートされていません。  
RSA\$12048 パブリックラップキーを使用して、ECC\$1NIST\$1P521 のキーマテリアルを直接ラップすることはできません。大きなラップキー、または RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1\$1 ラップアルゴリズムを使用してください。

------
#### [ RSAES\$1OAEP\$1SHA\$11 ]

AWS KMS は、対称暗号化キー (SYMMETRIC\$1DEFAULT)、楕円曲線 (ECC) プライベートキー、SM2 プライベートキー、および HMAC キーの RSAES\$1OAEP\$1SHA\$11 をサポートしています。

RSAES\$1OAEP\$1SHA\$11 は RSA プライベートキーではサポートされていません。また、任意の RSAES\$1OAEP\$1SHA\$1\$1 ラップアルゴリズムの RSA\$12048 パブリックラップキーを使用して ECC\$1NIST\$1P521 (secp521r1) プライベートキーをラップすることはできません。より大きいサイズのパブリックラップキーまたは RSA\$1AES\$1KEY\$1WRAP ラップアルゴリズムを使用する必要があります。

次の例では、[ダウンロードしたパブリックキー](importing-keys-get-public-key-and-token.md)と RSAES\$1OAEP\$1SHA\$11 ラップアルゴリズムを使用してキーマテリアルを暗号化し、`EncryptedKeyMaterial.bin` ファイルに保存します。

この例では、以下のようになっています：
+ *`WrappingPublicKey.bin`* は、ダウンロードしたラップパブリックキーを含むファイルです。
+ *`PlaintextKeyMaterial.bin`* は、`PlaintextKeyMaterial.bin`、`HMAC_384_PlaintextKey.bin`、`ECC_NIST_P521_PrivateKey.der` など、暗号化するキーマテリアルを含むファイルです。

```
$ openssl pkeyutl \
    -encrypt \
    -in PlaintextKeyMaterial.bin \
    -out EncryptedKeyMaterial.bin \
    -inkey WrappingPublicKey.bin \
    -keyform DER \
    -pubin \
    -pkeyopt rsa_padding_mode:oaep \
    -pkeyopt rsa_oaep_md:sha1
```

------
#### [ RSAES\$1OAEP\$1SHA\$1256 ]

AWS KMS は、対称暗号化キー (SYMMETRIC\$1DEFAULT)、楕円曲線 (ECC) プライベートキー、SM2 プライベートキー、および HMAC キーの RSAES\$1OAEP\$1SHA\$1256 をサポートしています。

RSAES\$1OAEP\$1SHA\$1256 は RSA プライベートキーではサポートされていません。また、任意の RSAES\$1OAEP\$1SHA\$1\$1 ラップアルゴリズムの RSA\$12048 パブリックラップキーを使用して ECC\$1NIST\$1P521 (secp521r1) プライベートキーをラップすることはできません。より大きいサイズのパブリックキーまたは RSA\$1AES\$1KEY\$1WRAP ラップアルゴリズムを使用する必要があります。

次の例では、[ダウンロードしたパブリックキー](importing-keys-get-public-key-and-token.md)と RSAES\$1OAEP\$1SHA\$1256 ラップアルゴリズムを使用してキーマテリアルを暗号化し、`EncryptedKeyMaterial.bin` ファイルに保存します。

この例では、以下のようになっています：
+ *`WrappingPublicKey.bin`* は、ダウンロードしたパブリックラップキーを含むファイルです。コンソールからパブリックキーをダウンロードした場合、このファイルの名前は `wrappingKey_KMS key_key_ID_timestamp` (例えば、`wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909`) となります。
+ *`PlaintextKeyMaterial.bin`* は、`PlaintextKeyMaterial.bin`、`HMAC_384_PlaintextKey.bin`、`ECC_NIST_P521_PrivateKey.der` など、暗号化するキーマテリアルを含むファイルです。

```
$ openssl pkeyutl \
    -encrypt \
    -in PlaintextKeyMaterial.bin \
    -out EncryptedKeyMaterial.bin \
    -inkey WrappingPublicKey.bin \
    -keyform DER \
    -pubin \
    -pkeyopt rsa_padding_mode:oaep \
    -pkeyopt rsa_oaep_md:sha256 \
    -pkeyopt rsa_mgf1_md:sha256
```

------
#### [ RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 ]

RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 ラップアルゴリズムには 2 つの暗号化オペレーションオペレーションが含まれています。

1. 生成した AES 対称キーと AES 対称暗号化アルゴリズムを使用してキーマテリアルを暗号化します。

1. 使用した AES 対称キーを、ダウンロードしたパブリックキーと RSAES\$1OAEP\$1SHA\$11 ラップアルゴリズムで暗号化します。

RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 ラップアルゴリズムには OpenSSL バージョン 3.*x* 以降が必要です。

1. 

**256 ビット AES 対称暗号化キーを生成する**

   このコマンドは、256 ランダムビットで構成される AES 対称暗号化キーを生成し、`aes-key.bin` ファイルに保存します

   ```
   # Generate a 32-byte AES symmetric encryption key
   $ openssl rand -out aes-key.bin 32
   ```

1. 

**AES 対称暗号化キーを使用してキーマテリアルを暗号化する**

   このコマンドは、AES 対称暗号化キーを使用してキーマテリアルを暗号化し、暗号化されたキーマテリアルを `key-material-wrapped.bin` ファイルに保存します。

   このコマンド例では、
   + *`PlaintextKeyMaterial.bin`* は、`PlaintextKeyMaterial.bin`、`HMAC_384_PlaintextKey.bin`、`RSA_3072_PrivateKey.der`、`ECC_NIST_P521_PrivateKey.der` など、インポートするキーマテリアルを含むファイルです。
   + *`aes-key.bin`* は、前のコマンドで生成した 256 ビット AES 対称暗号化キーを含むファイルです。

   ```
   # Encrypt your key material with the AES symmetric encryption key
   $ openssl enc -id-aes256-wrap-pad \
           -K "$(xxd -p < aes-key.bin | tr -d '\n')" \
           -iv A65959A6 \
           -in PlaintextKeyMaterial.bin \
           -out key-material-wrapped.bin
   ```

1. 

**AES 対称暗号化キーをパブリックキーで暗号化する**

   このコマンドは、ダウンロードしたパブリックキーと RSAES\$1OAEP\$1SHA\$11 ラップアルゴリズムで AES 対称暗号化キーを暗号化し、DER エンコードして `aes-key-wrapped.bin` ファイルに保存します。

   このコマンド例では、
   + *`WrappingPublicKey.bin`* は、ダウンロードしたパブリックラップキーを含むファイルです。コンソールからパブリックキーをダウンロードした場合、このファイルの名前は `wrappingKey_KMS key_key_ID_timestamp` (例えば、`wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909`) となります
   + *`aes-key.bin`* は、このシーケンスの例の最初のコマンドで生成した 256 ビット AES 対称暗号化キーを含むファイルです。

   ```
   # Encrypt your AES symmetric encryption key with the downloaded public key
   $ openssl pkeyutl \
       -encrypt \
       -in aes-key.bin \
       -out aes-key-wrapped.bin \
       -inkey WrappingPublicKey.bin \
       -keyform DER \
       -pubin \
       -pkeyopt rsa_padding_mode:oaep \
       -pkeyopt rsa_oaep_md:sha1 \
       -pkeyopt rsa_mgf1_md:sha1
   ```

1. 

**インポートするファイルを生成する**

   暗号化されたキーマテリアルを含むファイルと暗号化された AES キーを含むファイルを連結します。これらを `EncryptedKeyMaterial.bin` ファイルに保存します。このファイルは、[ステップ 4: キーマテリアルのインポート](importing-keys-import-key-material.md) にインポートするファイルです。

   このコマンド例では、
   + *`key-material-wrapped.bin`* は、暗号化されたキーマテリアルを含むファイルです。
   + *`aes-key-wrapped.bin`* は、暗号化された AES 暗号化キーを含むファイルです。

   ```
   # Combine the encrypted AES key and encrypted key material in a file
   $ cat aes-key-wrapped.bin key-material-wrapped.bin > EncryptedKeyMaterial.bin
   ```

------
#### [ RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 ]

RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 ラップアルゴリズムには 2 つの暗号化手順が含まれています。

1. 生成した AES 対称キーと AES 対称暗号化アルゴリズムを使用してキーマテリアルを暗号化します。

1. 使用した AES 対称キーを、ダウンロードしたパブリックキーと RSAES\$1OAEP\$1SHA\$1256 ラップアルゴリズムで暗号化します。

RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 ラップアルゴリズムには OpenSSL バージョン 3.*x* 以降が必要です。

1. 

**256 ビット AES 対称暗号化キーを生成する**

   このコマンドは、256 ランダムビットで構成される AES 対称暗号化キーを生成し、`aes-key.bin` ファイルに保存します

   ```
   # Generate a 32-byte AES symmetric encryption key
   $ openssl rand -out aes-key.bin 32
   ```

1. 

**AES 対称暗号化キーを使用してキーマテリアルを暗号化する**

   このコマンドは、AES 対称暗号化キーを使用してキーマテリアルを暗号化し、暗号化されたキーマテリアルを `key-material-wrapped.bin` ファイルに保存します。

   このコマンド例では、
   + *`PlaintextKeyMaterial.bin`* は、`PlaintextKeyMaterial.bin`、`HMAC_384_PlaintextKey.bin`、`RSA_3072_PrivateKey.der`、`ECC_NIST_P521_PrivateKey.der` など、インポートするキーマテリアルを含むファイルです。
   + *`aes-key.bin`* は、前のコマンドで生成した 256 ビット AES 対称暗号化キーを含むファイルです。

   ```
   # Encrypt your key material with the AES symmetric encryption key
   $ openssl enc -id-aes256-wrap-pad \
           -K "$(xxd -p < aes-key.bin | tr -d '\n')" \
           -iv A65959A6 \
           -in PlaintextKeyMaterial.bin \
           -out key-material-wrapped.bin
   ```

1. 

**AES 対称暗号化キーをパブリックキーで暗号化する**

   このコマンドは、ダウンロードしたパブリックキーと RSAES\$1OAEP\$1SHA\$1256 ラップアルゴリズムで AES 対称暗号化キーを暗号化し、DER エンコードして `aes-key-wrapped.bin` ファイルに保存します。

   このコマンド例では、
   + *`WrappingPublicKey.bin`* は、ダウンロードしたパブリックラップキーを含むファイルです。コンソールからパブリックキーをダウンロードした場合、このファイルの名前は `wrappingKey_KMS key_key_ID_timestamp` (例えば、`wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909`) となります
   + *`aes-key.bin`* は、このシーケンスの例の最初のコマンドで生成した 256 ビット AES 対称暗号化キーを含むファイルです。

   ```
   # Encrypt your AES symmetric encryption key with the downloaded public key
   $ openssl pkeyutl \
       -encrypt \
       -in aes-key.bin \
       -out aes-key-wrapped.bin \
       -inkey WrappingPublicKey.bin \
       -keyform DER \
       -pubin \
       -pkeyopt rsa_padding_mode:oaep \
       -pkeyopt rsa_oaep_md:sha256 \
       -pkeyopt rsa_mgf1_md:sha256
   ```

1. 

**インポートするファイルを生成する**

   暗号化されたキーマテリアルを含むファイルと暗号化された AES キーを含むファイルを連結します。これらを `EncryptedKeyMaterial.bin` ファイルに保存します。このファイルは、[ステップ 4: キーマテリアルのインポート](importing-keys-import-key-material.md) にインポートするファイルです。

   このコマンド例では、
   + *`key-material-wrapped.bin`* は、暗号化されたキーマテリアルを含むファイルです。
   + *`aes-key-wrapped.bin`* は、暗号化された AES 暗号化キーを含むファイルです。

   ```
   # Combine the encrypted AES key and encrypted key material in a file
   $ cat aes-key-wrapped.bin key-material-wrapped.bin > EncryptedKeyMaterial.bin
   ```

------

[ステップ 4: キーマテリアルのインポート](importing-keys-import-key-material.md) に進みます。