Langkah 3: Enkripsi material kunci - AWS Key Management Service

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

Setelah Anda mengunduh kunci publik dan token impor, 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 dan. Pilih algoritme pembungkus

Material kunci harus dalam format biner. Untuk detail informasi, lihat Persyaratan untuk bahan kunci impor.

catatan

Untuk pasangan kunci asimetris, enkripsi dan impor hanya kunci pribadi. AWS KMS kunci publik berasal dari kunci privat.

Kombinasi berikut NOT didukung: materi kunci ECC _ NIST _P521, spesifikasi kunci pembungkus publik RSA _2048, dan algoritme pembungkus _ _ _*. RSAES OAEP SHA

Anda tidak dapat langsung membungkus materi kunci ECC _ NIST _P521 dengan kunci pembungkus publik RSA _2048. Gunakan kunci pembungkus yang lebih besar atau algoritme pembungkus RSA AES _ KEY _ WRAP _ _ SHA _*.

Algoritma pembungkus RSA AES KEY WRAP _ _ _ RSA _ SHA _256 dan AES KEY _ WRAP _ _ _ SHA _1 tidak didukung di Wilayah China.

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

Saat Anda mengenkripsi materi kunci Anda, gunakan algoritme pembungkus yang sama dengan yang Anda tentukan saat mengunduh kunci publik dan token impor. Untuk menemukan algoritma pembungkus yang Anda tentukan, lihat peristiwa CloudTrail log untuk GetParametersForImportpermintaan terkait.

Hasilkan bahan utama untuk pengujian

SSLPerintah Open berikut menghasilkan bahan 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 DER -encoded, pipa perintah pembuatan material kunci ke perintah berikut. openssl pkcs8 topk8Parameter mengarahkan Open SSL untuk mengambil kunci pribadi sebagai input dan mengembalikan kunci berformat PKCS #8. (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 China, Anda harus menghasilkan kunci simetris 128-bit (string acak 16-byte).

    openssl rand -out PlaintextKeyMaterial.bin 16
  • HMACkunci

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

    Panjang HMAC kunci Anda harus sesuai dengan panjang yang ditentukan oleh spesifikasi kunci KMS kunci. Misalnya, jika KMS kuncinya adalah HMAC _384, 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
  • RSAkunci pribadi

    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
  • ECCkunci pribadi

    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
  • SM2kunci pribadi (hanya Wilayah China)

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

Contoh mengenkripsi materi kunci dengan Open SSL

Contoh berikut menunjukkan cara menggunakan Open SSL untuk mengenkripsi materi kunci Anda dengan kunci publik yang Anda unduh. Untuk mengenkripsi materi kunci Anda menggunakan kunci SM2 publik (khusus Wilayah China), gunakan SM2OfflineOperationHelperkelas. Untuk informasi selengkapnya tentang jenis bahan utama yang didukung oleh setiap algoritme pembungkus, lihatPilih algoritme pembungkus.

penting

Contoh-contoh ini adalah bukti demonstrasi konsep saja. Untuk sistem produksi, gunakan metode yang lebih aman (seperti sistem manajemen komersial HSM atau kunci) untuk menghasilkan dan menyimpan materi utama Anda.

Kombinasi berikut NOT didukung: materi kunci ECC _ NIST _P521, spesifikasi kunci pembungkus publik RSA _2048, dan algoritme pembungkus _ _ _*. RSAES OAEP SHA

Anda tidak dapat langsung membungkus materi kunci ECC _ NIST _P521 dengan kunci pembungkus publik RSA _2048. Gunakan kunci pembungkus yang lebih besar atau algoritme pembungkus RSA AES _ KEY _ WRAP _ _ SHA _*.

RSAES_OAEP_SHA_1

AWS KMS mendukung RSAES _ OAEP _ SHA _1 untuk kunci enkripsi simetris (SYMMETRIC_DEFAULT), kurva elips (ECC) kunci pribadi, kunci SM2 pribadi, dan kunci. HMAC

RSAES_ OAEP _ SHA _1 tidak didukung untuk kunci RSA pribadi. Selain itu, Anda tidak dapat menggunakan kunci pembungkus publik RSA _2048 dengan algoritme pembungkus RSAES _ _ SHA _* apa pun untuk membungkus kunci pribadi OAEP _ _P521 (ECCNISTsecp521r1). Anda harus menggunakan kunci pembungkus publik yang lebih besar atau algoritma WRAP pembungkus RSA AES _ KEY _ _.

Contoh berikut mengenkripsi materi kunci Anda dengan kunci publik yang Anda unduh dan algoritme pembungkus RSAES OAEP _ _ SHA _1, 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, sepertiPlaintextKeyMaterial.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_OAEP_SHA_256

AWS KMS mendukung RSAES _ OAEP _ SHA _256 untuk kunci enkripsi simetris (SYMMETRIC_DEFAULT), kurva elips (ECC) kunci pribadi, kunci SM2 pribadi, dan kunci. HMAC

RSAES_ OAEP _ SHA _256 tidak didukung untuk kunci RSA pribadi. Selain itu, Anda tidak dapat menggunakan kunci pembungkus publik RSA _2048 dengan algoritme pembungkus RSAES _ _ SHA _* apa pun untuk membungkus kunci pribadi OAEP _ _P521 (ECCNISTsecp521r1). Anda harus menggunakan kunci publik yang lebih besar atau algoritma WRAP pembungkus RSA AES KEY _ _ _.

Contoh berikut mengenkripsi materi kunci dengan kunci publik yang Anda unduh dan algoritme pembungkus RSAES OAEP _ _ SHA _256, 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.binHMAC_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_AES_KEY_WRAP_SHA_1

Algoritma pembungkus RSA AES KEY _ WRAP _ _ _ SHA _1 melibatkan dua operasi enkripsi.

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

  2. Enkripsi kunci AES simetris yang Anda gunakan dengan kunci publik yang Anda unduh dan algoritme pembungkus RSAES _ OAEP _ SHA _1.

Algoritma pembungkus RSA AES KEY _ WRAP _ _ _ SHA _1 membutuhkan Open SSL versi 3. x atau yang lebih baru.

  1. Hasilkan kunci enkripsi AES simetris 256-bit

    Perintah ini menghasilkan kunci enkripsi AES simetris 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
  2. Enkripsi materi kunci Anda dengan kunci enkripsi AES simetris

    Perintah ini mengenkripsi materi kunci Anda dengan kunci enkripsi AES simetris 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.binRSA_3072_PrivateKey.der, atauECC_NIST_P521_PrivateKey.der.

    • aes-key.bin adalah file yang berisi kunci enkripsi AES simetris 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
  3. Enkripsi kunci enkripsi AES simetris Anda dengan kunci publik

    Perintah ini mengenkripsi kunci enkripsi AES simetris Anda dengan kunci publik yang Anda unduh dan algoritme pembungkus RSAES OAEP _ _ SHA _1, DER -encode, dan simpan 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 AES simetris 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
  4. Hasilkan file yang akan diimpor

    Menggabungkan file dengan materi kunci terenkripsi dan file dengan kunci terenkripsi. AES Simpan dalam EncryptedKeyMaterial.bin file, yang merupakan file yang akan Anda impor di fileLangkah 4: Impor material kunci.

    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_AES_KEY_WRAP_SHA_256

Algoritma pembungkus RSA AES KEY _ WRAP _ _ _ SHA _256 melibatkan dua operasi enkripsi.

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

  2. Enkripsi kunci AES simetris yang Anda gunakan dengan kunci publik yang Anda unduh dan algoritme pembungkus RSAES _ OAEP _ SHA _256.

Algoritma pembungkus RSA AES KEY _ WRAP _ _ _ SHA _256 membutuhkan Open SSL versi 3. x atau yang lebih baru.

  1. Hasilkan kunci enkripsi AES simetris 256-bit

    Perintah ini menghasilkan kunci enkripsi AES simetris 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
  2. Enkripsi materi kunci Anda dengan kunci enkripsi AES simetris

    Perintah ini mengenkripsi materi kunci Anda dengan kunci enkripsi AES simetris 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.binRSA_3072_PrivateKey.der, atauECC_NIST_P521_PrivateKey.der.

    • aes-key.bin adalah file yang berisi kunci enkripsi AES simetris 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
  3. Enkripsi kunci enkripsi AES simetris Anda dengan kunci publik

    Perintah ini mengenkripsi kunci enkripsi AES simetris Anda dengan kunci publik yang Anda unduh dan algoritme pembungkus RSAES _ OAEP _ SHA _256, DER -mengkodekannya, 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 AES simetris 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
  4. Hasilkan file yang akan diimpor

    Gabungkan file dengan bahan kunci terenkripsi dan file dengan kunci terenkripsi. AES Simpan dalam EncryptedKeyMaterial.bin file, yang merupakan file yang akan Anda impor di fileLangkah 4: Impor material kunci.

    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.