

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Langkah 3: Enkripsi material kunci
<a name="importing-keys-encrypt-key-material"></a>

Setelah Anda [mengunduh kunci publik dan token impor](importing-keys-get-public-key-and-token.md), enkripsi materi kunci Anda menggunakan kunci publik yang Anda unduh dan algoritme pembungkus yang Anda tentukan. Jika Anda perlu mengganti kunci publik atau token impor, atau mengubah algoritma pembungkus, Anda harus mengunduh kunci publik baru dan token impor. Untuk informasi tentang kunci publik dan algoritma pembungkus yang AWS KMS mendukung, lihat [Pilih spesifikasi kunci publik pembungkus](importing-keys-get-public-key-and-token.md#select-wrapping-key-spec) dan. [Pilih algoritme pembungkus](importing-keys-get-public-key-and-token.md#select-wrapping-algorithm)

Material kunci harus dalam format biner. Untuk detail informasi, lihat [Persyaratan untuk bahan kunci impor](importing-keys-conceptual.md#importing-keys-material-requirements).

**catatan**  
Untuk pasangan kunci asimetris, enkripsi dan impor hanya kunci pribadi. AWS KMS kunci publik berasal dari kunci privat.  
Kombinasi berikut TIDAK didukung: bahan kunci ECC\$1NIST\$1P521, spesifikasi kunci pembungkus publik RSA\$12048, dan algoritma pembungkus RSAES\$1OAEP\$1SHA\$1\$1.  
Anda tidak dapat langsung membungkus materi kunci ECC\$1NIST\$1P521 dengan kunci pembungkus publik RSA\$12048. Gunakan kunci pembungkus yang lebih besar atau algoritma pembungkus RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1\$1.  
Algoritma pembungkus RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 dan RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 tidak didukung di Wilayah Tiongkok.

Biasanya, Anda mengenkripsi material kunci Anda ketika Anda mengekspornya dari modul keamanan perangkat keras (HSM) atau sistem manajemen kunci. Untuk informasi tentang cara mengekspor material kunci dalam format biner, lihat dokumentasi untuk HSM atau sistem manajemen kunci Anda. Anda juga dapat merujuk ke bagian berikut yang memberikan bukti konsep demonstrasi menggunakan OpenSSL.

Saat Anda mengenkripsi materi kunci Anda, gunakan algoritme pembungkus yang sama dengan yang Anda tentukan saat [mengunduh kunci publik dan token impor](importing-keys-get-public-key-and-token.md). Untuk menemukan algoritma pembungkus yang Anda tentukan, lihat peristiwa CloudTrail log untuk [GetParametersForImport](https://docs.aws.amazon.com/kms/latest/APIReference/API_GetParametersForImport.html)permintaan terkait.

## Hasilkan bahan utama untuk pengujian
<a name="importing-keys-example-key-material"></a>

Perintah OpenSSL berikut menghasilkan material kunci dari setiap jenis yang didukung untuk pengujian. Contoh-contoh ini disediakan hanya untuk pengujian dan proof-of-concept demonstrasi. Untuk sistem produksi, gunakan metode yang lebih aman untuk menghasilkan materi utama Anda, seperti modul keamanan perangkat keras atau sistem manajemen kunci.

Untuk mengonversi kunci pribadi pasangan kunci asimetris menjadi format yang dikodekan DER, salurkan perintah pembuatan material kunci ke perintah berikut. `openssl pkcs8` `topk8`Parameter mengarahkan OpenSSL untuk mengambil kunci pribadi sebagai input dan mengembalikan kunci berformat PKCS \$18. (Perilaku default adalah sebaliknya.) 

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

Perintah berikut menghasilkan bahan kunci uji untuk setiap jenis kunci yang didukung.
+ Kunci enkripsi simetris (32 byte)

  Perintah ini menghasilkan kunci simetris 256-bit (string acak 32-byte) dan menyimpannya dalam file. `PlaintextKeyMaterial.bin` Anda tidak perlu menyandikan materi kunci ini. 

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

  Hanya di Wilayah Tiongkok, Anda harus menghasilkan kunci simetris 128-bit (string acak 16-byte).

  ```
  openssl rand -out PlaintextKeyMaterial.bin 16
  ```
+ Kunci HMAC

  Perintah ini menghasilkan string byte acak dari ukuran yang ditentukan. Anda tidak perlu menyandikan materi kunci ini. 

  Panjang kunci HMAC Anda harus sesuai dengan panjang yang ditentukan oleh spesifikasi kunci kunci KMS. Misalnya, jika kunci KMS adalah HMAC\$1384, Anda harus mengimpor kunci 384-bit (48-byte).

  ```
  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
  ```
+ Kunci pribadi 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
  ```
+ Kunci pribadi 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 kunci pribadi (hanya Wilayah Tiongkok)

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

## Contoh mengenkripsi materi kunci dengan OpenSSL
<a name="importing-keys-encrypt-key-material-openssl"></a>

Contoh berikut menunjukkan cara menggunakan [OpenSSL](https://openssl.org/) untuk mengenkripsi materi kunci Anda dengan kunci publik yang Anda unduh. [Untuk mengenkripsi materi kunci Anda menggunakan kunci SM2 publik (khusus Wilayah Tiongkok), gunakan kelas tersebut`SM2OfflineOperationHelper`.](offline-operations.md#key-spec-sm-offline-helper) Untuk informasi selengkapnya tentang jenis bahan utama yang didukung oleh setiap algoritme pembungkus, lihat[Pilih algoritme pembungkus](importing-keys-get-public-key-and-token.md#select-wrapping-algorithm).

**penting**  
Contoh-contoh ini adalah bukti demonstrasi konsep saja. Untuk sistem produksi, gunakan metode yang lebih aman (seperti HSM komersial atau sistem manajemen kunci) untuk menghasilkan dan menyimpan material kunci Anda.  
Kombinasi berikut TIDAK didukung: bahan kunci ECC\$1NIST\$1P521, spesifikasi kunci pembungkus publik RSA\$12048, dan algoritma pembungkus RSAES\$1OAEP\$1SHA\$1\$1.  
Anda tidak dapat langsung membungkus materi kunci ECC\$1NIST\$1P521 dengan kunci pembungkus publik RSA\$12048. Gunakan kunci pembungkus yang lebih besar atau algoritma pembungkus RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1\$1.

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

AWS KMS mendukung RSAES\$1OAEP\$1SHA\$11 untuk kunci enkripsi simetris (SYMMETRIC\$1DEFAULT), kunci pribadi kurva elips (ECC), kunci pribadi, dan kunci HMAC. SM2 

RSAES\$1OAEP\$1SHA\$11 tidak didukung untuk kunci pribadi RSA. Selain itu, Anda tidak dapat menggunakan kunci pembungkus publik RSA\$12048 dengan algoritma pembungkus RSAES\$1OAEP\$1SHA\$1\$1 apa pun untuk membungkus kunci pribadi ECC\$1NIST\$1P521 (secp521r1). Anda harus menggunakan kunci pembungkus publik yang lebih besar atau algoritma pembungkus RSA\$1AES\$1KEY\$1WRAP.

Contoh berikut mengenkripsi materi kunci Anda dengan [kunci publik yang Anda unduh](importing-keys-get-public-key-and-token.md) dan algoritma pembungkus RSAES\$1OAEP\$1SHA\$11, dan menyimpannya dalam file. `EncryptedKeyMaterial.bin` 

Dalam contoh ini:
+ *`WrappingPublicKey.bin`*adalah file yang berisi kunci publik pembungkus yang diunduh. 
+ *`PlaintextKeyMaterial.bin`*adalah file yang berisi materi kunci yang Anda enkripsi, seperti`PlaintextKeyMaterial.bin`, `HMAC_384_PlaintextKey.bin` atau. `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 mendukung RSAES\$1OAEP\$1SHA\$1256 untuk kunci enkripsi simetris (SYMMETRIC\$1DEFAULT), kunci pribadi kurva elips (ECC), kunci pribadi, dan kunci HMAC. SM2 

RSAES\$1OAEP\$1SHA\$1256 tidak didukung untuk kunci pribadi RSA. Selain itu, Anda tidak dapat menggunakan kunci pembungkus publik RSA\$12048 dengan algoritma pembungkus RSAES\$1OAEP\$1SHA\$1\$1 apa pun untuk membungkus kunci pribadi ECC\$1NIST\$1P521 (secp521r1). Anda harus menggunakan kunci publik yang lebih besar atau algoritma pembungkus RSA\$1AES\$1KEY\$1WRAP.

Contoh berikut mengenkripsi materi kunci dengan [kunci publik yang Anda unduh](importing-keys-get-public-key-and-token.md) dan algoritma pembungkus RSAES\$1OAEP\$1SHA\$1256, dan menyimpannya dalam file. `EncryptedKeyMaterial.bin` 

Dalam contoh ini:
+ *`WrappingPublicKey.bin`*adalah file yang berisi kunci pembungkus publik yang diunduh. Jika Anda mengunduh kunci publik dari konsol, file ini diberi nama `wrappingKey_KMS key_key_ID_timestamp` (misalnya,`wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909`). 
+ *`PlaintextKeyMaterial.bin`*adalah file yang berisi materi kunci yang Anda enkripsi, seperti, `PlaintextKeyMaterial.bin``HMAC_384_PlaintextKey.bin`, atau. `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 ]

Algoritma pembungkus RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 melibatkan dua operasi enkripsi.

1. Enkripsi materi kunci Anda dengan kunci simetris AES yang Anda hasilkan dan algoritme enkripsi simetris AES.

1. Enkripsi kunci simetris AES yang Anda gunakan dengan kunci publik yang Anda unduh dan algoritma pembungkus RSAES\$1OAEP\$1SHA\$11.

Algoritma pembungkus RSA\$1AES\$1KEY\$1WRAP\$1SHA\$11 membutuhkan OpenSSL versi 3. *x* atau yang lebih baru.

1. 

**Hasilkan kunci enkripsi simetris AES 256-bit**

   Perintah ini menghasilkan kunci enkripsi simetris AES yang terdiri dari 256 bit acak, dan menyimpannya dalam file `aes-key.bin`

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

1. 

**Enkripsi materi kunci Anda dengan kunci enkripsi simetris AES**

   Perintah ini mengenkripsi materi kunci Anda dengan kunci enkripsi simetris AES dan menyimpan materi kunci terenkripsi dalam file. `key-material-wrapped.bin`

   Dalam contoh perintah ini:
   + *`PlaintextKeyMaterial.bin`*adalah file yang berisi materi utama yang Anda impor, seperti,`PlaintextKeyMaterial.bin`, `HMAC_384_PlaintextKey.bin``RSA_3072_PrivateKey.der`, atau`ECC_NIST_P521_PrivateKey.der`.
   + *`aes-key.bin`*adalah file yang berisi kunci enkripsi simetris AES 256-bit yang Anda buat di perintah sebelumnya.

   ```
   # 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. 

**Enkripsi kunci enkripsi simetris AES Anda dengan kunci publik**

   Perintah ini mengenkripsi kunci enkripsi simetris AES Anda dengan kunci publik yang Anda unduh dan algoritma pembungkus RSAES\$1OAEP\$1SHA\$11, Der menyandikannya, dan menyimpannya dalam file. `aes-key-wrapped.bin` 

   Dalam contoh perintah ini:
   + *`WrappingPublicKey.bin`*adalah file yang berisi kunci pembungkus publik yang diunduh. Jika Anda mengunduh kunci publik dari konsol, file ini diberi nama `wrappingKey_KMS key_key_ID_timestamp` (misalnya, `wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909`
   + *`aes-key.bin`*adalah file yang berisi kunci enkripsi simetris AES 256-bit yang Anda buat dalam perintah pertama dalam urutan contoh ini.

   ```
   # 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. 

**Hasilkan file yang akan diimpor**

   Gabungkan file dengan materi kunci terenkripsi dan file dengan kunci AES terenkripsi. Simpan dalam `EncryptedKeyMaterial.bin` file, yang merupakan file yang akan Anda impor di file[Langkah 4: Impor material kunci](importing-keys-import-key-material.md).

   Dalam contoh perintah ini:
   + *`key-material-wrapped.bin`*adalah file yang berisi materi kunci terenkripsi Anda.
   + *`aes-key-wrapped.bin`*adalah file yang berisi kunci enkripsi AES terenkripsi.

   ```
   # 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 ]

Algoritma pembungkus RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 melibatkan dua operasi enkripsi.

1. Enkripsi materi kunci Anda dengan kunci simetris AES yang Anda hasilkan dan algoritme enkripsi simetris AES.

1. Enkripsi kunci simetris AES yang Anda gunakan dengan kunci publik yang Anda unduh dan algoritma pembungkus RSAES\$1OAEP\$1SHA\$1256.

Algoritma pembungkus RSA\$1AES\$1KEY\$1WRAP\$1SHA\$1256 membutuhkan OpenSSL versi 3. *x* atau yang lebih baru.

1. 

**Hasilkan kunci enkripsi simetris AES 256-bit**

   Perintah ini menghasilkan kunci enkripsi simetris AES yang terdiri dari 256 bit acak, dan menyimpannya dalam file `aes-key.bin`

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

1. 

**Enkripsi materi kunci Anda dengan kunci enkripsi simetris AES**

   Perintah ini mengenkripsi materi kunci Anda dengan kunci enkripsi simetris AES dan menyimpan materi kunci terenkripsi dalam file. `key-material-wrapped.bin`

   Dalam contoh perintah ini:
   + *`PlaintextKeyMaterial.bin`*adalah file yang berisi materi utama yang Anda impor, seperti,`PlaintextKeyMaterial.bin`, `HMAC_384_PlaintextKey.bin``RSA_3072_PrivateKey.der`, atau`ECC_NIST_P521_PrivateKey.der`.
   + *`aes-key.bin`*adalah file yang berisi kunci enkripsi simetris AES 256-bit yang Anda buat di perintah sebelumnya.

   ```
   # 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. 

**Enkripsi kunci enkripsi simetris AES Anda dengan kunci publik**

   Perintah ini mengenkripsi kunci enkripsi simetris AES Anda dengan kunci publik yang Anda unduh dan algoritma pembungkus RSAES\$1OAEP\$1SHA\$1256, Der menyandikannya, dan menyimpannya dalam file. `aes-key-wrapped.bin` 

   Dalam contoh perintah ini:
   + *`WrappingPublicKey.bin`*adalah file yang berisi kunci pembungkus publik yang diunduh. Jika Anda mengunduh kunci publik dari konsol, file ini diberi nama `wrappingKey_KMS key_key_ID_timestamp` (misalnya, `wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909`
   + *`aes-key.bin`*adalah file yang berisi kunci enkripsi simetris AES 256-bit yang Anda buat dalam perintah pertama dalam urutan contoh ini.

   ```
   # 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. 

**Hasilkan file yang akan diimpor**

   Gabungkan file dengan materi kunci terenkripsi dan file dengan kunci AES terenkripsi. Simpan dalam `EncryptedKeyMaterial.bin` file, yang merupakan file yang akan Anda impor di file[Langkah 4: Impor material kunci](importing-keys-import-key-material.md).

   Dalam contoh perintah ini:
   + *`key-material-wrapped.bin`*adalah file yang berisi materi kunci terenkripsi Anda.
   + *`aes-key-wrapped.bin`*adalah file yang berisi kunci enkripsi AES terenkripsi.

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

------

Lanjut ke [Langkah 4: Impor material kunci](importing-keys-import-key-material.md).