Como o AWS Nitro Enclaves usa o AWS KMS - AWS Key Management Service

Como o AWS Nitro Enclaves usa o AWS KMS

O AWS Nitro Enclaves é um recurso do Amazon EC2 que permite criar ambientes de computação isolados a partir de instâncias do Amazon EC2.

Aplicações em execução no AWS Nitro Enclaves podem usar o AWS Nitro Enclaves Development Kit para chamar as operações do AWS KMS Decrypt, GenerateDataKey e GenerateRandom. O Nitro Enclaves SDK adiciona o documento de atestado do enclave a cada solicitação da API do AWS KMS. Em vez de retornarem dados em texto simples, as operações do AWS KMS criptografam o texto simples com a chave pública do documento de atestado. Esse design permite que o texto cifrado seja descriptografado somente pela chave privada correspondente dentro do enclave.

Para oferecer suporte ao AWS Nitro Enclaves, o AWS KMS adiciona um parâmetro de solicitação Recipient com o tipo de objeto RecipientInfo e um campo de resposta CiphertextForRecipient aos campos de solicitação e resposta padrão para essas operações. Esses elementos específicos do enclave são válidos somente nas operações de API com suporte e somente quando a solicitação é assinada usando o AWS Nitro Enclaves Development Kit. O AWS KMS baseia-se na assinatura digital do documento de atestado do enclave para provar que a chave pública na solicitação veio de um enclave válido. Não é possível fornecer seu próprio certificado para assinar digitalmente o documento de atestado.

O AWS KMS também oferece suporte a chaves de condição de política, que você pode usar para permitir operações de enclave em uma chave do AWS KMS somente quando o documento de atestado tem o conteúdo especificado. Para obter mais detalhes, consulte Chaves de condição do AWS KMS para o AWS Nitro Enclaves.

Para obter informações sobre o AWS Nitro Enclaves, consulte O que é o AWS Nitro Enclaves, no Guia do desenvolvedor do AWS Nitro Enclaves. Para obter informações sobre como configurar seus dados e chaves de dados para criptografia, consulteUsar atestado criptográfico com o AWS KMS.

Recipient

"Recipient": { "AttestationDocument": blob, "KeyEncryptionAlgorithm": "string" }

Um parâmetro de solicitação que contém o documento de atestado assinado de um enclave e um algoritmo de criptografia. O único algoritmo de criptografia válido é RSAES_OAEP_SHA_256.

Esse parâmetro é válido somente quando a solicitação vem do AWS Nitro Enclaves Development Kit.

Tipo: objeto RecipientInfo

RecipientInfo

Esse tipo contém informações sobre o enclave que recebe a resposta da operação de API.

AttestationDocument

Um documento com medidas que descrevem o estado do enclave Nitro. Esse documento também inclui a chave pública do enclave. O AWS KMS criptografará qualquer texto simples na resposta com essa chave pública para que ele possa ser descriptografado posteriormente somente pela chave privada correspondente no enclave.

Tipo: Objeto de dados binários codificado pelo Base64

Restrições de tamanho: tamanho mínimo 1. Tamanho máximo de 262144.

Required: No

KeyEncryptionAlgorithm

O algoritmo de criptografia que o AWS KMS deve usar com a chave pública. O único valor válido é RSAES_OAEP_SHA_256.

Tipo: string

Valores válidos: RSAES_OAEP_SHA_256

Required: No

CiphertextForRecipient

{ "CiphertextForRecipient": blob }

Esse campo de resposta contém um texto cifrado criptografado com a chave pública do documento de atestado na solicitação. Esse campo é preenchido somente quando a solicitação inclui um parâmetro Recipient com um documento de atestado válido e um algoritmo de criptografia. Quando esse campo é preenchido, a propriedade Plaintext na resposta é nula.

Tipo: Objeto de dados binários codificado pelo Base64

Restrições de tamanho: tamanho mínimo 1. Tamanho máximo de 6144.

Operações do AWS KMS no AWS Nitro Enclaves

Os seguintes exemplos de operações do AWS KMS oferecem suporte ao Nitro Enclaves. Esse tópico explica como essas operações de API se comportam quando uma solicitação vem do AWS Nitro Enclaves Development Kit e o parâmetro Recipient inclui um documento de atestado válido. Essas operações oferecem suporte ao parâmetro Recipient e ao campo de resposta CiphertextForRecipient.

Decrypt

Para chamar a operação Decrypt a partir de um enclave, use a operação kms-decrypt no AWS Nitro Enclaves Development Kit.

Depois de usar a chave do AWS KMS especificada para descriptografar o blob de texto cifrado na solicitação, a operação Decrypt recriptografa o texto simples resultante usando a chave pública do documento de atestado e o algoritmo de criptografia especificado. Ele retorna o texto cifrado resultante no campo CiphertextForRecipient na resposta. O campo Plaintext na resposta é nulo.

GenerateDataKey

Para chamar a operação GenerateDataKey a partir de um enclave, use a operação kms-generate-data-key no AWS Nitro Enclaves Development Kit.

Depois de gerar a chave de dados, a operação GenerateDataKey criptografa uma cópia da chave de dados com a chave do AWS KMS especificada e a retorna no campo CiphertextBlob. Ela criptografa a outra cópia da chave de dados com a chave pública do documento de atestado e a retorna no campo CiphertextForRecipient. O campo Plaintext na resposta é nulo.

Seu uso das duas chaves de dados criptografadas na resposta do GenerateDataKey depende do seu uso do enclave.

  • Se quiser usar a chave de dados para criptografar dados dentro do enclave, descriptografe o valor no campo CiphertextForRecipient usando a chave privada dentro do seu enclave. Se quiser persistir esses dados recém-criptografados fora do enclave, você pode armazená-los com qualquer uma das duas cópias de chave de dados criptografadas na resposta GenerateDataKey(kms-generate-data-key).

  • Se você pretende manter o enclave funcionando e pode confiar na durabilidade da chave privada na memória do enclave, você pode incluir o objeto CiphertextForRecipient com os dados recém-criptografados quando você os move para fora do enclave. Quando estiver pronto para descriptografar o objeto CiphertextForRecipient, você deverá usar a chave privada correspondente no enclave.

    Se você não pretende manter seu enclave funcionando ou não deseja confiar na durabilidade da chave privada na memória do enclave, inclua o objeto CiphertextBlob com seus dados criptografados. Para descriptografar essa cópia da chave de dados, você deve enviá-la ao AWS KMS em uma solicitação Decrypt (kms-decrypt).

    Você também pode transmitir o objeto CiphertextBlob para um enclave diferente e, em seguida, descriptografá-lo chamando a operação kms-decrypt (Decrypt) no AWS Nitro Enclaves Development Kit. Essa solicitação incluirá o documento de atestado para o novo enclave com uma nova chave pública. O AWS KMS descriptografará a chave de dados que foi criptografada com a chave do AWS KMS e, em seguida, a recriptografará com a chave pública do novo enclave. Essa chave de dados pode ser descriptografada apenas usando a chave privada correspondente no novo enclave.

GenerateRandom

Para chamar a operação GenerateRandom a partir de um enclave, use a operação kms-generate-random no AWS Nitro Enclaves Development Kit.

Depois de gerar a string de byte aleatório, a operação GenerateRandom criptografa a string de byte aleatório usando a chave pública no documento de atestado e o algoritmo de criptografia especificado. Ela retorna a string de byte criptografada no campo CiphertextForRecipient. O campo Plaintext na resposta é nulo.