Importar o material de chave — etapa 3: Criptografar o material de chave - AWS Key Management Service

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Importar o material de chave — etapa 3: Criptografar o material de chave

Depois de fazer download da chave pública e importar o token, criptografe seu material de chaves usando a chave pública que você baixou e o algoritmo de empacotamento que você especificou. Se precisar substituir a chave pública ou o token de importação, ou alterar o algoritmo de empacotamento, você deverá baixar uma nova chave pública e importar o token. Para obter informações sobre as chaves públicas e os algoritmos de empacotamento que AWS KMS oferecem suporte, consulte Selecionar uma especificação de chave pública de empacotamento e. Selecionar um algoritmo de empacotamento

O material de chaves deve estar em formato binário. Para obter informações detalhadas, consulte Requisitos para material de chave importada.

nota

Para pares de chaves assimétricas, criptografe e importe somente a chave privada. AWS KMS deriva a chave pública da chave privada.

A seguinte combinação é NOT suportada: ECC _ NIST _P521, a especificação da chave de empacotamento pública RSA _2048 e um algoritmo de empacotamento _ _ _*. RSAES OAEP SHA

Você não pode empacotar diretamente o material de chave ECC _ NIST _P521 com uma chave de empacotamento pública RSA _2048. Use uma chave de empacotamento maior ou um algoritmo de empacotamento RSA AES KEY _ _ WRAP _ _ _ SHA _*.

Os algoritmos de empacotamento RSA AES KEY WRAP _ _ RSA _ _ AES _ SHA _256 e KEY WRAP _ _ _ _ SHA _1 não são suportados nas regiões da China.

Normalmente, você criptografa seu material de chaves ao exportá-lo do seu módulo de segurança de hardware (HSM) ou sistema de gerenciamento de chaves. Para obter informações sobre como exportar material de chaves em formato binário, consulte a documentação do seu sistema HSM ou do sistema de gerenciamento de chaves. Você também pode consultar a seção a seguir, que fornece uma demonstração de prova de conceito usando o OpenSSL.

Ao criptografar o material de chaves, use o mesmo algoritmo de empacotamento que você especificou quando fez download da chave pública e do token de importação. Para encontrar o algoritmo de empacotamento que você especificou, consulte o evento de CloudTrail log da GetParametersForImportsolicitação associada.

Gerar material de chave para testes

Os SSL comandos Open a seguir geram material chave de cada tipo suportado para testes. Esses exemplos são fornecidos somente para testes e proof-of-concept demonstrações. Para sistemas de produção, use um método mais seguro para gerar o material de chaves, como um módulo de segurança de hardware ou um sistema de gerenciamento de chaves.

Para converter as chaves privadas de pares de chaves assimétricas em formato DER codificado, canalize o comando de geração de material de chave para o comando a seguir. openssl pkcs8 O topk8 parâmetro faz com SSL que Open use uma chave privada como entrada e retorne uma chave formatada PKCS #8. (O comportamento padrão é o oposto.)

openssl pkcs8 -topk8 -outform der -nocrypt

Os comandos a seguir geram material de chave de teste para cada tipo de chave compatível.

  • Chave de criptografia simétrica (32 bytes)

    Esse comando gera uma chave simétrica de 256 bits (sequência aleatória de 32 bytes) e a salva no arquivo PlaintextKeyMaterial.bin. Não é necessário codificar esse material de chaves.

    openssl rand -out PlaintextKeyMaterial.bin 32

    Somente nas regiões da China, você deve gerar uma chave simétrica de 128 bits (sequência aleatória de 16 bytes).

    openssl rand -out PlaintextKeyMaterial.bin 16
  • HMACchaves

    Esse comando gera uma sequência de bytes aleatória do tamanho especificado. Não é necessário codificar esse material de chaves.

    O comprimento da HMAC chave deve corresponder ao comprimento definido pela especificação da KMS chave. Por exemplo, se a KMS chave for HMAC _384, você deverá importar uma chave de 384 bits (48 bytes).

    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
  • RSAchaves privadas

    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
  • ECCchaves privadas

    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
  • SM2chaves privadas (somente regiões da China)

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

Exemplos de criptografia de material de chaves com o Open SSL

Os exemplos a seguir mostram como usar o Open SSL para criptografar seu material de chave com a chave pública que você baixou. Para criptografar seu material de chave usando uma chave SM2 pública (somente regiões da China), use a SM2OfflineOperationHelperclasse. Para obter mais informações sobre os principais tipos de material que cada algoritmo de embalagem suporta, consulteSelecionar um algoritmo de empacotamento.

Importante

Esses exemplos são apenas uma demonstração da prova de conceito. Para sistemas de produção, use um método mais seguro (como um sistema comercial HSM ou de gerenciamento de chaves) para gerar e armazenar seu material chave.

A seguinte combinação é NOT suportada: ECC _ NIST _P521, a especificação da chave de empacotamento pública RSA _2048 e um algoritmo de empacotamento _ _ _*. RSAES OAEP SHA

Você não pode empacotar diretamente o material de chave ECC _ NIST _P521 com uma chave de empacotamento pública RSA _2048. Use uma chave de empacotamento maior ou um algoritmo de empacotamento RSA AES KEY _ _ WRAP _ _ _ SHA _*.

RSAES_OAEP_SHA_1

AWS KMS suporta RSAES _ OAEP _ SHA _1 para chaves de criptografia simétricas (SYMMETRIC_DEFAULT), chaves privadas de curva elíptica (ECC), SM2 chaves privadas e chaves. HMAC

RSAES_ OAEP _ SHA _1 não é compatível com chaves RSA privadas. Além disso, você não pode usar uma chave de empacotamento pública RSA _2048 com nenhum algoritmo de empacotamento RSAES _ OAEP _ SHA _* para encapsular uma chave privada _ _P521 (ECCNISTsecp521r1). Você deve usar uma chave de empacotamento pública maior ou um algoritmo de WRAP empacotamento RSA AES KEY _ _ _.

O exemplo a seguir criptografa seu material de chave com a chave pública que você baixou e com o algoritmo de encapsulamento RSAES OAEP _ _ SHA _1 e o salva no arquivo. EncryptedKeyMaterial.bin

Neste exemplo:

  • WrappingPublicKey.compartimento é o arquivo que contém a chave pública de empacotamento baixada.

  • PlaintextKeyMaterial.compartimento é o arquivo que contém o material de chave que você está criptografando, comoPlaintextKeyMaterial.bin, HMAC_384_PlaintextKey.bin ouECC_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 suporta RSAES _ OAEP _ SHA _256 para chaves de criptografia simétricas (SYMMETRIC_DEFAULT), chaves privadas de curva elíptica (ECC), SM2 chaves privadas e chaves. HMAC

RSAES_ OAEP _ SHA _256 não é compatível com chaves RSA privadas. Além disso, você não pode usar uma chave de empacotamento pública RSA _2048 com nenhum algoritmo de empacotamento RSAES _ OAEP _ SHA _* para encapsular uma chave privada _ _P521 (ECCNISTsecp521r1). Você deve usar uma chave pública maior ou um algoritmo de WRAP agrupamento RSA AES KEY _ _ _.

O exemplo a seguir criptografa o material da chave com a chave pública que você baixou e com o algoritmo de encapsulamento RSAES OAEP _ _ SHA _256 e o salva no arquivo. EncryptedKeyMaterial.bin

Neste exemplo:

  • WrappingPublicKey.compartimento é o arquivo que contém a chave de empacotamento pública baixada. Se você fez download da chave pública do console, esse arquivo será chamado wrappingKey_KMS key_key_ID_timestamp (por exemplo, wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909).

  • PlaintextKeyMaterial.compartimento é o arquivo que contém o material de chave que você está criptografando, como PlaintextKeyMaterial.binHMAC_384_PlaintextKey.bin, ouECC_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

O algoritmo de empacotamento RSA AES KEY WRAP _ _ _ _ SHA _1 envolve duas operações de criptografia.

  1. Criptografe seu material de chaves com uma chave AES simétrica que você gera e um algoritmo de criptografia AES simétrica.

  2. Criptografe a chave AES simétrica que você usou com a chave pública que você baixou e o algoritmo de RSAES encapsulamento _ OAEP _ SHA _1.

O algoritmo de empacotamento RSA AES KEY WRAP _ _ _ _ SHA _1 requer a SSL versão Open 3. x ou mais tarde.

  1. Gere uma chave de criptografia AES simétrica de 256 bits

    Esse comando gera uma chave de criptografia AES simétrica que consiste em 256 bits aleatórios e a salva no arquivo aes-key.bin

    # Generate a 32-byte AES symmetric encryption key $ openssl rand -out aes-key.bin 32
  2. Criptografe seu material de chave com a chave de criptografia AES simétrica

    Esse comando criptografa o material da chave com a chave de criptografia AES simétrica e salva o material da chave criptografada no key-material-wrapped.bin arquivo.

    Neste comando de exemplo:

    • PlaintextKeyMaterial.compartimento é o arquivo que contém o material chave que você está importando, comoPlaintextKeyMaterial.bin, HMAC_384_PlaintextKey.binRSA_3072_PrivateKey.der, ouECC_NIST_P521_PrivateKey.der.

    • aes-key.bin é o arquivo que contém a chave de criptografia AES simétrica de 256 bits que você gerou no comando anterior.

    # 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. Criptografe sua chave de criptografia AES simétrica com a chave pública

    Esse comando criptografa sua chave de criptografia AES simétrica com a chave pública que você baixou e o algoritmo de DER encapsulamento RSAES OAEP _ _ SHA _1, codifica-a e a salva no arquivo. aes-key-wrapped.bin

    Neste comando de exemplo:

    • WrappingPublicKey.compartimento é o arquivo que contém a chave de empacotamento pública baixada. Se você fez download da chave pública do console, esse arquivo será chamado wrappingKey_KMS key_key_ID_timestamp (por exemplo, wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909

    • aes-key.bin é o arquivo que contém a chave de criptografia AES simétrica de 256 bits que você gerou no primeiro comando nesta sequência de exemplo.

    # 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. Gerar o arquivo a ser importado

    Concatene o arquivo com o material da chave criptografada e o arquivo com a chave criptografada. AES Salve-os no arquivo EncryptedKeyMaterial.bin, que é o arquivo que você importará no Etapa 4: Importar o material de chave.

    Neste comando de exemplo:

    • key-material-wrapped.compartimento é o arquivo que contém seu material de chave criptografada.

    • aes-key-wrapped.compartimento é o arquivo que contém a chave de AES criptografia criptografada.

    # 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

O algoritmo de empacotamento RSA AES KEY WRAP _ _ _ _ _ SHA _256 envolve duas operações de criptografia.

  1. Criptografe seu material de chaves com uma chave AES simétrica que você gera e um algoritmo de criptografia AES simétrica.

  2. Criptografe a chave AES simétrica que você usou com a chave pública que você baixou e o algoritmo de RSAES encapsulamento _ OAEP _ SHA _256.

O algoritmo de empacotamento RSA AES KEY WRAP _ _ _ _ SHA _256 requer a SSL versão Open 3. x ou mais tarde.

  1. Gere uma chave de criptografia AES simétrica de 256 bits

    Esse comando gera uma chave de criptografia AES simétrica que consiste em 256 bits aleatórios e a salva no arquivo aes-key.bin

    # Generate a 32-byte AES symmetric encryption key $ openssl rand -out aes-key.bin 32
  2. Criptografe seu material de chave com a chave de criptografia AES simétrica

    Esse comando criptografa o material da chave com a chave de criptografia AES simétrica e salva o material da chave criptografada no key-material-wrapped.bin arquivo.

    Neste comando de exemplo:

    • PlaintextKeyMaterial.compartimento é o arquivo que contém o material chave que você está importando, comoPlaintextKeyMaterial.bin, HMAC_384_PlaintextKey.binRSA_3072_PrivateKey.der, ouECC_NIST_P521_PrivateKey.der.

    • aes-key.bin é o arquivo que contém a chave de criptografia AES simétrica de 256 bits que você gerou no comando anterior.

    # 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. Criptografe sua chave de criptografia AES simétrica com a chave pública

    Esse comando criptografa sua chave de criptografia AES simétrica com a chave pública que você baixou e o algoritmo de DER encapsulamento RSAES OAEP _ _ SHA _256, codifica-a e a salva no arquivo. aes-key-wrapped.bin

    Neste comando de exemplo:

    • WrappingPublicKey.compartimento é o arquivo que contém a chave de empacotamento pública baixada. Se você fez download da chave pública do console, esse arquivo será chamado wrappingKey_KMS key_key_ID_timestamp (por exemplo, wrappingKey_f44c4e20-f83c-48f4-adc6-a1ef38829760_0809092909

    • aes-key.bin é o arquivo que contém a chave de criptografia AES simétrica de 256 bits que você gerou no primeiro comando nesta sequência de exemplo.

    # 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. Gerar o arquivo a ser importado

    Concatene o arquivo com o material da chave criptografada e o arquivo com a chave criptografada. AES Salve-os no arquivo EncryptedKeyMaterial.bin, que é o arquivo que você importará no Etapa 4: Importar o material de chave.

    Neste comando de exemplo:

    • key-material-wrapped.compartimento é o arquivo que contém seu material de chave criptografada.

    • aes-key-wrapped.compartimento é o arquivo que contém a chave de AES criptografia criptografada.

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

Vá para Etapa 4: Importar o material de chave.