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 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
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
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 respostaGenerateDataKey
(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 objetoCiphertextForRecipient
, 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çãoDecrypt
(kms-decrypt
).Você também pode transmitir o objeto
CiphertextBlob
para um enclave diferente e, em seguida, descriptografá-lo chamando a operaçãokms-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
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.