Conceitos no SDK de criptografia da AWS - SDK de criptografia da AWS

Se fornecermos uma tradução da versão em inglês do guia, a versão em inglês prevalecerá caso haja qualquer conflito entre as versões. A tradução é fornecida com o uso de tradução por máquina.

Conceitos no SDK de criptografia da AWS

Esta seção apresenta os conceitos usados no SDK de criptografia da AWS e fornece um glossário e uma referência.

Chaves de dados

A chave de ados é uma chave de criptografia que o SDK de criptografia da AWS usa para criptografar os dados. Cada chave de dados é uma matriz de bytes que cumpre os requisitos para chaves criptográficas. A menos que você esteja usando armazenamento em cache de chaves de dados, o SDK de criptografia da AWS usará uma chave de dados exclusiva para criptografar cada mensagem.

Para proteger suas chaves de dados, o SDK de criptografia da AWS as criptografa sob uma ou mais chaves de criptografia conhecidas como chaves mestras. Depois que o SDK de criptografia da AWS usa suas chaves dados em texto simples para criptografar dados, ele as remove da memória assim que possível. Depois, ele armazena as chaves de dados criptografadas junto com os dados criptografados na mensagem criptografada que as operações de criptografia retornam.

Ao usar o SDK de criptografia da AWS, você não precisa gerar, implementar, estender, proteger nem usar chaves de dados nem chaves mestras. O SDK de criptografia da AWS faz esse trabalho para você quando você chama as operações de criptografia e descriptografia.

No entanto, quando você seleciona o provedor de chaves mestras (Java e Python) ou token de autenticação (C e JavaScript), você determina a origem de suas chaves mestras. Você também determina se a chave de dados de texto simples é criptografada por uma ou várias chaves mestras.

dica

No SDK de criptografia da AWS, diferenciamos chaves de dados de chaves de criptografia de dados. Vários dos pacotes de algoritmos, incluindo o pacote padrão, usam uma função de derivação de chaves que impede que a chave de dados atinja seus limites de criptografia. A função de derivação de chaves usa a chave de dados como entrada e retorna uma chave de criptografia de dados que é realmente usada para criptografar os dados. Por esse motivo, sempre dizemos que os dados são criptografados "sob" uma chave de dados em vez de "pela" chave de dados.

Master key (Chave mestra)

Uma chave mestra, também conhecida como chave de empacotamento, é uma chave de criptografia usada para criptografar chaves de dados. Cada chave de dados de texto simples pode ser criptografada sob uma ou mais chaves mestras.

Ao usar o SDK de criptografia da AWS, você não precisa gerar, implementar, estender, proteger nem usar chaves de dados nem chaves mestras. O SDK de criptografia da AWS faz esse trabalho para você quando você chama as operações de criptografia e descriptografia. No entanto, em implementações de Java e Python, você precisa especificar um gerenciador de material de criptografia ou um provedor de chaves mestras que forneça chaves mestras. Nas implementações de C e JavaScript, você especifica um token de autenticação que interage com as chaves de empacotamento para você e retorna chaves de dados.

O SDK de criptografia da AWS fornece várias chaves mestras ou chaves de empacotamento usadas comumente, como chaves mestras do cliente (CMKs) simétricas do AWS Key Management Service (AWS KMS), chaves brutas do AES-GCM (Advanced Encryption Standard/Galois Counter Mode) e chaves RSA. Você também pode estender ou implementar suas próprias chaves mestras e chaves de empacotamento.

Gerenciador de material de criptografia

O gerenciador de materiais criptográficos (CMM) monta o material criptográfico usado para criptografar e descriptografar dados. O material criptográfico inclui texto não criptografado e chaves de dados criptografadas e uma chave de assinatura de mensagem opcional. Você pode usar o CMM padrão fornecido pelo SDK de criptografia da AWS ou escrever um CMM personalizado. Você pode especificar um CMM, mas nunca interaja com ele diretamente. Os métodos de criptografia e descriptografia o processam para você.

O CMM padrão obtém o material de criptografia ou de descriptografia do provedor de chaves mestras (Java e Python) ou do token de autenticação (C ou JavaScript) que você especificar. Isso pode envolver uma chamada a um serviço criptográfico, como o AWS Key Management Service (AWS KMS).

Você pode especificar um CMM e um provedor de chaves mestras ou um token de autenticação, mas isso não é necessário. Se você especificar um provedor de chaves mestras ou token de autenticação, o SDK de criptografia da AWS criará um CMM padrão para você.

Como o CMM atua como uma ligação entre o SDK e um token de autenticação ou provedor de chaves mestras, ele é um ponto ideal para personalização e extensão, como suporte para a aplicação de políticas e o armazenamento em cache. O SDK de criptografia da AWS fornece um CMM de armazenamento em cache para oferecer suporte ao armazenamento em cache de chaves de dados.

Provedor de chaves mestras (Java e Python)

No AWS Encryption SDK para Java e no AWS Encryption SDK para Python, um provedor de chaves mestras retorna chaves mestras ou objetos que identificam ou representam chaves mestras. Cada chave mestra está associado a um provedor de chaves mestras, mas um provedor de chaves mestras normalmente fornece várias chaves mestras.

Ao usar as implementações de Java e Python do SDK de criptografia da AWS, você precisa especificar um gerenciador de material de criptografia (CMM) ou um provedor de chaves mestras, mas não precisa projetar nem implementar seu próprio provedor de chaves mestras. Se você especificar um provedor de chaves mestras, o SDK criará um CMM padrão para você com base no provedor de chaves mestras especificado.

Master key providers em Java e Python são compatíveis com teclados no AWS Encryption SDK para C e o AWS Encryption SDK para JavaScript, sujeito a restrições linguísticas. No entanto, você deve especificar o mesmo material de chave e usar um token de autenticação que seja compatível com o provedor de chaves mestras. Para obter mais detalhes, consulte Compatibilidade dos tokens de autenticação.

Token de autenticação (C e JavaScript)

Um token de autenticação gera, criptografa e descriptografa chaves de dados. Em geral, cada token de autenticação está associado a uma chave de empacotamento ou a um serviço que fornece e protege chaves de empacotamento. Você pode usar os tokens de autenticação fornecidos pelo SDK de criptografia da AWS ou elaborar seus próprios tokens de autenticação personalizados compatíveis. Os tokens de autenticação são compatíveis apenas no AWS Encryption SDK para C e no AWS Encryption SDK para JavaScript.

Você pode usar um único token de autenticação ou também combinar tokens de autenticação do mesmo ou de outro tipo em um multitoken de autenticação. O multitoken de autenticação retorna uma cópia da chave de dados criptografada por todas as chaves de empacotamento em todos os tokens de autenticação que compreendem o multitoken de autenticação. Ao usar um multitoken de autenticação para criptografar dados, você pode descriptografá-los com um token de autenticação configurado com qualquer uma das chaves de empacotamento no multitoken de autenticação.

Para obter detalhes sobre como trabalhar com tokens de autenticação, consulte Usar tokens de autenticação.

Os tokens de autenticação em C e JavaScript são compatíveis com provedores de chaves mestras no AWS Encryption SDK para Java e no AWS Encryption SDK para Python. Contudo, tem de especificar o mesmo material-chave e utilizar um teclado que seja compatível com o provedor de chaves mestras, sujeito a restrições linguísticas. Qualquer pequena incompatibilidade devido às restrições de linguagem é explicada no tópico sobre a implementação de linguagem. Para obter mais detalhes, consulte Compatibilidade dos tokens de autenticação.

Pacote de algoritmos

O SDK de criptografia da AWS é compatível com vários pacotes de algoritmos. Todos os conjuntos compatíveis usam o Advanced Encryption Standard (AES) como o algoritmo principal e o combinam com outros algoritmos e valores.

O SDK de criptografia da AWS estabelece um pacote de algoritmos recomendado como o padrão para todas as operações de criptografia. O padrão pode ser alterado conforme os padrões e as práticas recomendadas são aprimoradas. Você pode especificar um pacote de algoritmos alternativo em solicitações de criptografia de dados ou ao criar um gerenciador de materiais criptográficos (CMM), mas, a menos que um alternativo seja necessário para sua situação, é melhor usar o padrão. O padrão atual é AES-GCM com uma HMAC-based extract-and-expand key derivation function (HKDF - função de derivação de chave para extração e expansão com base em HMAC), Elliptic Curve Digital Signature Algorithm (ECDSA - algoritmo de assinatura digital de curva elíptica) e uma chave de criptografia de 256 bits.

Se você especificar um pacote de algoritmos, recomendamos um pacote de algoritmos que usa uma função de derivação de chaves e um algoritmo de assinatura de mensagem. Os pacotes de algoritmos que não têm nenhum dos recursos são compatíveis apenas para compatibilidade com versões anteriores.

Contexto de criptografia

Para melhorar a segurança de suas operações de criptografia, inclua um contexto de criptografia em todas as solicitações para criptografar dados. O uso de um contexto de criptografia é opcional, mas é uma melhor prática de criptografia que recomendamos.

Um contexto de criptografia é um conjunto de pares de chave-valor que contêm dados autenticados adicionais arbitrários e não secretos. O contexto de criptografia pode conter todos os dados que você escolher, mas geralmente consiste em dados que são úteis para registro em log e rastreamento, como dados sobre o tipo de arquivo, a finalidade ou a propriedade. Quando você criptografa dados, o contexto de criptografia é associado de maneira criptográfica aos dados criptografados de forma que o mesmo contexto de criptografia seja necessário para descriptografar os dados. O SDK de criptografia da AWS inclui o contexto de criptografia em texto simples no cabeçalho da mensagem criptografada retornada por ele.

O contexto de criptografia usado pelo SDK de criptografia da AWS consiste no contexto de criptografia especificado e um par de chaves públicas adicionado pelo gerenciador de materiais criptográficos (CMM). Especificamente, sempre que você usar um algoritmo de criptografia com assinatura, o CMM adicionará um par de nome/valor ao contexto de criptografia consistindo em um nome reservado, aws-crypto-public-key, e um valor representando a chave de verificação pública. O nome aws-crypto-public-key no contexto de criptografia é reservado pelo SDK de criptografia da AWS e não pode ser usado como um nome em nenhum outro par no contexto de criptografia. Para obter detalhes, consulte AAD na Referência do formato de mensagens.

O exemplo de contexto de criptografia a seguir consiste nos dois pares de contexto de criptografia especificados na solicitação e no par de chaves públicas adicionado pelo CMM.

"Purpose"="Test", "Department"="IT", aws-crypto-public-key=<public key>

Para descriptografar os dados, você passa a mensagem criptografada. Como o SDK de criptografia da AWS pode extrair o contexto de criptografia do cabeçalho da mensagem criptografada, não é necessário fornecer o contexto separadamente. No entanto, o contexto de criptografia pode ajudar a confirmar se você está descriptografando a mensagem criptografada correta.

  • Na interface de linha de comando do SDK de criptografia da AWS (CLI), se você fornecer um contexto de criptografia em um comando de descriptografia, a CLI verificará se os valores estão presentes no contexto da mensagem criptografada antes de retornar os dados em texto simples.

  • Em outras linguagens, a resposta de descriptografia inclui o contexto de criptografia e os dados em texto simples. A função de descriptografia em seu aplicativo sempre deve verificar se o contexto de criptografia na resposta de descriptografia inclui o contexto de criptografia na solicitação de criptografia (ou um subconjunto) antes de retornar os dados em texto simples.

Ao escolher um contexto de criptografia, lembre-se de que ele não é um segredo. O contexto de criptografia é exibido em texto não criptografado no cabeçalho da mensagem criptografada retornada pelo SDK. Se você estiver usando o AWS Key Management Service, o contexto de criptografia também poderá ser exibido em texto não criptografado em registros e logs de auditoria, como o AWS CloudTrail.

Para obter exemplos de verificação de um contexto de criptografia em seu código, consulte:

Mensagem criptografada

Quando você criptografa dados com o SDK de criptografia da AWS, ele retorna uma mensagem criptografada.

Uma mensagem criptografada é uma estrutura de dados formatados portátil que inclui os dados criptografados junto com as cópias criptografadas das chaves de dados, o ID do algoritmo e, opcionalmente, um contexto de criptografia e uma assinatura de mensagem. As operações de criptografia no SDK de criptografia da AWS retornam uma mensagem criptografada, e as operações de descriptografia usam uma mensagem criptografada como entrada.

A combinação de dados criptografados e de suas chaves de dados criptografadas simplifica a operação e elimina a necessidade de armazenar e gerenciar chaves de dados criptografadas independentemente dos dados que elas criptografam.

Para obter informações técnicas sobre a mensagem criptografada, consulte Formato da mensagem criptografada.