AWS Conceitos do SDK de criptografia de banco de dados - AWS SDK de criptografia de banco de dados

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á.

AWS Conceitos do SDK de criptografia de banco de dados

Nossa biblioteca de criptografia do lado do cliente foi renomeada para SDK de criptografia de AWS banco de dados. Este guia do desenvolvedor ainda fornece informações sobre o DynamoDB Encryption Client.

Este tópico explica os conceitos e a terminologia usados no SDK de criptografia de AWS banco de dados.

Para saber como os componentes do SDK de criptografia AWS de banco de dados interagem, consulteComo funciona o SDK AWS de criptografia de banco de dados.

Para saber mais sobre o SDK AWS de criptografia de banco de dados, consulte os tópicos a seguir.

criptografia envelopada

A segurança dos dados criptografados depende em parte da proteção da chave de dados que pode descriptografá-los. Uma prática recomendada aceita para proteger a chave de dados é criptografá-la. Para fazer isso, você precisa de outra chave de criptografia, conhecida como chave de criptografia de chave ou chave de encapsulamento. Essa prática de uso de uma chave do KMS para criptografar chaves de dados é conhecida como criptografia envelopada.

Proteção de chaves de dados

O SDK AWS de criptografia de banco de dados criptografa cada campo com uma chave de dados exclusiva. Em seguida, ele criptografa cada chave de dados sob a chave de empacotamento especificada. Ele armazena as chaves de dados criptografadas na descrição do material.

Para especificar a chave de empacotamento, use um token de autenticação.

Criptografia de envelopes com o SDK AWS de criptografia de banco de dados
Criptografar os mesmos dados com várias chaves de empacotamento

É possível criptografar a chave de dados com várias chaves de empacotamento. Talvez você queira fornecer chaves de empacotamento distintas para usuários diferentes ou chaves de empacotamento de tipos variados ou em locais diferentes. Cada uma das chaves de encapsulamento criptografa a mesma chave de dados. O SDK AWS de criptografia de banco de dados armazena todas as chaves de dados criptografadas junto com os campos criptografados na descrição do material.

Para descriptografar os dados, você precisa fornecer pelo menos uma chave de empacotamento que possa descriptografar as chaves de dados criptografadas.

Combinação de pontos fortes de vários algoritmos

Para criptografar seus dados, por padrão, o SDK de criptografia de AWS banco de dados usa um conjunto de algoritmos com criptografia simétrica AES-GCM, uma função de derivação de chave (HKDF) baseada em HMAC e assinatura ECDSA. Para criptografar a chave de dados, você pode especificar um algoritmo de criptografia simétrico ou assimétrico apropriado à sua chave de encapsulamento.

Em geral, os algoritmos de criptografia de chaves simétricas são mais rápidos e produzem textos cifrados menores que a criptografia de chave pública ou assimétrica. No entanto, os algoritmos de chave pública fornecem separação inerente de funções. Para combinar os pontos fortes de cada um, você pode criptografar a chave de dados com a criptografia de chave pública.

Recomendamos usar um dos AWS KMS chaveiros sempre que possível. Ao usar o AWS KMS chaveiro, você pode escolher combinar os pontos fortes de vários algoritmos especificando um AWS KMS key RSA assimétrico como sua chave de agrupamento. Também é possível usar uma chave do KMS de criptografia simétrica.

Chave de dados

Uma chave de dados é uma chave de criptografia que o SDK AWS de criptografia de banco de dados usa para criptografar os campos em um registro que estão marcados ENCRYPT_AND_SIGN nas ações criptográficas. Cada chave de dados é uma matriz de bytes que cumpre os requisitos para chaves criptográficas. O SDK AWS de criptografia de banco de dados usa uma chave de dados exclusiva para criptografar cada atributo.

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

Para proteger suas chaves de dados, o SDK AWS de criptografia de banco de dados as criptografa sob uma ou mais chaves de criptografia de chave conhecidas como chaves de encapsulamento. Depois que o SDK AWS de criptografia de banco de dados usa suas chaves de dados em texto simples para criptografar seus dados, ele os remove da memória assim que possível. Em seguida, ele armazena as chaves de dados criptografadas na descrição do material. Para obter detalhes, consulte Como funciona o SDK AWS de criptografia de banco de dados.

dica

No SDK AWS de criptografia de banco de dados, distinguimos as chaves de dados das chaves de criptografia de dados. Como prática recomendada, todos os conjuntos de algoritmos compatíveis devem usar uma função de derivação de chave. 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 registros. Por esse motivo, sempre dizemos que os dados são criptografados "sob" uma chave de dados em vez de "pela" chave de dados.

Cada chave de dados criptografada inclui metadados, incluindo o identificador da chave de encapsulamento que a criptografou. Esses metadados possibilitam que o SDK de criptografia AWS de banco de dados identifique chaves de encapsulamento válidas durante a descriptografia.

Chave de empacotamento

Uma chave de empacotamento é uma chave de criptografia que o SDK de criptografia de banco de dados da AWS usa para criptografar a chave de dados que criptografa seus registros. Cada chave de dados em texto simples pode ser criptografada sob uma ou mais chaves mestras. Você determina quais chaves de empacotamento são usadas para proteger seus dados ao configurar um token de autenticação.

Criptografar uma chave de dados com várias chaves de empacotamento

O SDK AWS de criptografia de banco de dados oferece suporte a várias chaves de agrupamento comumente usadas, como AWS Key Management Service(AWS KMS) chaves KMS de criptografia simétrica (incluindo chaves multirregionais) e chaves RSA KMS assimétricas, AWS KMS chaves brutas AES-GCM (Advanced Encryption Standard/Galois Counter Mode) e chaves RSA brutas. Recomendamos utilizar chaves do KMS sempre que possível. Para decidir qual chave de empacotamento você deve usar, consulte Selecting wrapping keys.

Quando você usa a criptografia envelopada, você precisa proteger suas chaves de empacotamento contra acesso não autorizado. É possível fazer isso de uma das seguintes maneiras:

Se você não tem um sistema de gerenciamento de chaves, recomendamos AWS KMS. O SDK AWS de criptografia de banco de dados se integra AWS KMS para ajudar você a proteger e usar suas chaves de empacotamento.

Tokens de autenticação

Para especificar as chaves de empacotamento que você usa para criptografia e decodificação, use um token de autenticação. Você pode usar os chaveiros fornecidos pelo SDK do AWS Database Encryption ou criar suas próprias implementações.

Um token de autenticação gera, criptografa e descriptografa chaves de dados. Ele também gera as chaves MAC usadas para calcular os códigos de autenticação de mensagens por hash (HMAC) na assinatura. Ao definir um token de autenticação, você pode especificar as chaves de empacotamento que criptografam suas chaves de dados. A maioria dos tokens de autenticação especificam pelo menos uma chave de encapsulamento ou um serviço que fornece e protege chaves de encapsulamento. Ao criptografar, o SDK AWS de criptografia de banco de dados usa todas as chaves de encapsulamento especificadas no chaveiro para criptografar a chave de dados. Para obter ajuda sobre como escolher e usar os chaveiros definidos pelo SDK do AWS Database Encryption, consulte Como usar chaveiros.

Ações criptográficas

As ações criptográficas informam ao criptografador quais ações devem ser executadas em cada campo em um registro.

Os valores das ações de atributo podem ser um destes:

  • Criptografar e assinar: criptografa o campo. Inclua o campo criptografado na assinatura.

  • Somente assinar: inclui o campo na assinatura.

  • Assinar e incluir no contexto de criptografia — Inclua o campo no contexto de assinatura e criptografia.

    Por padrão, as chaves de partição e classificação são o único atributo incluído no contexto de criptografia. Você pode considerar definir campos adicionais para que o fornecedor da ID da chave de filial do seu AWS KMS chaveiro hierárquico possa identificar qual chave de ramificação é necessária para a descriptografia a partir SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT do contexto de criptografia. Para obter mais informações, consulte fornecedor de ID de chave de filial.

    nota

    Para usar a ação SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT criptográfica, você deve usar a versão 3.3 ou posterior do SDK de criptografia de AWS banco de dados. Implante a nova versão para todos os leitores antes de atualizar seu modelo de dados para incluí-laSIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT.

  • Não fazer nada: não criptografa nem inclui o campo na assinatura.

Para qualquer campo que possa armazenar dados confidenciais, use Criptografar e assinar. Para valores de chave primária (por exemplo, uma chave de partição e uma chave de classificação em uma tabela do DynamoDB), use Somente assinar ou Assinar e incluir no contexto de criptografia. Se você especificar qualquer sinal e incluir atributos no contexto de criptografia, os atributos de partição e classificação também deverão ser Assinar e incluir no contexto de criptografia. Não é necessário especificar ações criptográficas para a descrição do material. O SDK AWS de criptografia de banco de dados assina automaticamente o campo em que a descrição do material está armazenada.

Escolha suas ações criptográficas com cuidado. Em caso de dúvida, use Criptografar e assinar. Depois de usar o SDK AWS de criptografia de banco de dados para proteger seus registros, você não pode alterar um SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT campo existente ENCRYPT_AND_SIGN ou alterar a DO_NOTHING ação criptográfica atribuída a um campo existenteDO_NOTHING. SIGN_ONLY No entanto, você ainda pode fazer outras alterações em seu modelo de dados. Por exemplo, você pode adicionar ou remover campos criptografados em uma única implantação.

Descrição do material

A descrição do material serve como cabeçalho para um registro criptografado. Quando você criptografa e assina campos com o SDK AWS de criptografia de banco de dados, o criptografador registra a descrição do material à medida que reúne os materiais criptográficos e armazena a descrição do material em um novo campo (aws_dbe_head) que o criptografador adiciona ao seu registro.

A descrição do material é uma estrutura de dados formatada portátil que contém cópias criptografadas das chaves de dados e outras informações, como algoritmos de criptografia, contexto de criptografia e instruções de criptografia e assinatura. O criptografador registra a descrição do material à medida que monta os materiais para criptografia e assinatura. Depois, quando precisar montar materiais de criptografia para verificar e descriptografar um campo, ele usará a descrição do material como guia.

O armazenamento de dados criptografados junto com o campo criptografado 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 descrição do material, consulte Formato de descrição do material.

Contexto de criptografia

Para melhorar a segurança de suas operações criptográficas, o SDK AWS de criptografia de banco de dados inclui um contexto de criptografia em todas as solicitações para criptografar e assinar um registro.

Um contexto de criptografia é um conjunto de pares de chave-valor que contêm dados autenticados adicionais arbitrários e não secretos. O SDK AWS de criptografia de banco de dados inclui o nome lógico do seu banco de dados e os valores da chave primária (por exemplo, uma chave de partição e uma chave de classificação em uma tabela do DynamoDB) no contexto de criptografia. Quando você criptografa e assina um campo, o contexto de criptografia é associado de maneira criptográfica aos registros criptografados de forma que o mesmo contexto de criptografia seja necessário para descriptografar os campos.

Se você usa um AWS KMS chaveiro, o SDK AWS de criptografia de banco de dados também usa o contexto de criptografia para fornecer dados autenticados adicionais (AAD) nas chamadas que o chaveiro faz. AWS KMS

Sempre que você usar um algoritmo de criptografia com assinatura, o gerenciador de material de criptografia (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. A chave de verificação pública é armazenada na descrição do material.

Gerenciador de material de criptografia

O gerenciador de material de criptografia (CMM) monta o material criptográfico usado para criptografar, descriptografar e assinar dados. Sempre que você usa o conjunto de algoritmos padrão, os materiais criptográficos incluem texto simples e chaves de dados criptografadas, chaves de assinatura simétricas e uma chave de assinatura assimétrica. Você nunca interage diretamente com o CMM. Os métodos de criptografia e descriptografia o processam para você.

Como o CMM atua como uma ligação entre o SDK de criptografia AWS de banco de dados e um chaveiro, é um ponto ideal para personalização e extensão, como suporte para aplicação de políticas. É possível especificar explicitamente um CMM, mas isso não é obrigatório. Quando você especifica um token de autenticação, o SDK de criptografia de banco de dados da AWS cria um CMM padrão para você. O CMM padrão obtém o material de criptografia ou de descriptografia do token de autenticação que você especificar. Isso pode envolver uma chamada a um serviço criptográfico, como o AWS Key Management Service (AWS KMS).

Criptografia simétrica e assimétrica

A criptografia simétrica usa a mesma chave para criptografar e descriptografar dados.

A criptografia assimétrica usa um par de chaves de dados matematicamente relacionado. Uma chave no par criptografa os dados; somente a outra chave no par pode descriptografar os dados. Para obter detalhes, consulte Algoritmos criptográficos no Guia de ferramentas e serviços criptográficos da AWS .

O SDK AWS de criptografia de banco de dados usa criptografia de envelope. Ele criptografa os dados com uma chave de dados simétrica. Ele criptografa a chave de dados simétrica com uma ou mais chaves de empacotamento simétricas ou assimétricas. Ele adiciona uma descrição do material ao registro que inclui pelo menos uma cópia criptografada da chave de dados.

Criptografar dados (criptografia simétrica)

Para criptografar seus dados, o SDK AWS de criptografia de banco de dados usa uma chave de dados simétrica e um conjunto de algoritmos que inclui um algoritmo de criptografia simétrica. Para descriptografar os dados, o SDK de criptografia AWS de banco de dados usa a mesma chave de dados e o mesmo conjunto de algoritmos.

Criptografar chave de dados (criptografia simétrica ou assimétrica)

O token de autenticação que você fornece para uma operação de criptografia e descriptografia determina como a chave de dados simétrica é criptografada e descriptografada. Você pode escolher um chaveiro que use criptografia simétrica, como um AWS KMS chaveiro com uma chave KMS de criptografia simétrica, ou um que use criptografia assimétrica, como um AWS KMS chaveiro com uma chave RSA KMS assimétrica.

Confirmação de chave

O SDK AWS de criptografia de banco de dados oferece suporte ao comprometimento de chaves (às vezes conhecido como robustez), uma propriedade de segurança que garante que cada texto cifrado possa ser descriptografado somente em um único texto simples. Para fazer isso, o compromisso da chave garante que somente a chave de dados que criptografou seu registro seja usada para descriptografá-lo. O SDK de criptografia de banco de dados da AWS inclui um compromisso fundamental para todas as operações de criptografia e descriptografia.

A maioria das cifras simétricas modernas (incluindo AES) criptografa texto sem formatação com uma única chave secreta, como a chave de dados exclusiva que o SDK de criptografia de AWS banco de dados usa para criptografar cada campo de texto sem formatação marcado em um registro. ENCRYPT_AND_SIGN Descriptografar esse registro com a mesma chave de dados retorna um texto sem formatação idêntico ao original. A decodificação com uma chave diferente geralmente falhará. Embora seja difícil, é tecnicamente possível decifrar um texto cifrado com duas chaves diferentes. Em casos raros, é possível encontrar uma chave que possa decifrar parcialmente o texto cifrado em um texto simples diferente, mas ainda inteligível.

O SDK AWS de criptografia de banco de dados sempre criptografa cada atributo em uma chave de dados exclusiva. Ele pode criptografar essa chave de dados em várias chaves de empacotamento, mas as chaves de empacotamento sempre criptografam a mesma chave de dados. No entanto, um registro criptografado sofisticado e criado manualmente pode, na verdade, conter chaves de dados diferentes, cada uma criptografada por uma chave de empacotamento diferente. Por exemplo, se um usuário descriptografar o registro criptografado, ele retornará 0x0 (falso), enquanto outro usuário descriptografando o mesmo registro criptografado obterá 0x1 (verdadeiro).

Para evitar esse cenário, o SDK AWS de criptografia de banco de dados inclui comprometimento de chave ao criptografar e descriptografar. O método de criptografia vincula criptograficamente a chave de dados exclusiva que produziu o texto cifrado ao compromisso da chave, um código de autenticação de mensagens por hash (HMAC) calculado sobre a descrição do material usando uma derivação da chave de dados. Em seguida, ele armazena o compromisso de chaves na descrição do material. Ao descriptografar um registro com comprometimento de chave, o SDK de criptografia AWS de banco de dados verifica se a chave de dados é a única chave para esse registro criptografado. Se a verificação da chave de dados falhar, a operação de descriptografia falhará.

Assinaturas digitais

Para garantir a autenticidade dos dados que circulam entre os sistemas, você pode aplicar uma assinatura digital ao registro. As assinaturas digitais são sempre assimétricas. Use a chave privada para criar a assinatura e anexá-la ao registro original. O destinatário usa uma chave pública para verificar se o registro não foi modificado desde que você o assinou. Você deve usar assinaturas digitais se os usuários que criptografam os dados e os usuários que decifram os dados não forem igualmente confiáveis.

O SDK AWS de criptografia de banco de dados criptografa seus dados usando um algoritmo de criptografia autenticado, o AES-GCM, mas como o AES-GCM usa chaves simétricas, qualquer pessoa que possa descriptografar a chave de dados usada para descriptografar o texto cifrado também pode criar manualmente um novo texto cifrado, causando uma possível preocupação de segurança.

Para evitar esse problema, o conjunto de algoritmos padrão adiciona uma assinatura do Algoritmo de assinatura digital de curva elíptica (ECDSA) aos registros criptografados. O conjunto de algoritmos padrão criptografa os campos em seu registro marcados com ENCRYPT_AND_SIGN usando um algoritmo de criptografia autenticado, o AES-GCM. Em seguida, ele calcula os Códigos de Autenticação de Mensagens Baseados em Hash (HMACs) e as assinaturas ECDSA assimétricas nos campos do seu registro marcados com, e. ENCRYPT_AND_SIGN SIGN_ONLY SIGN_AND_INCLUDE_IN_ENCRYPTION_CONTEXT O processo de descriptografia usa as assinaturas para verificar se um usuário autorizado criptografou o registro.

Quando o conjunto de algoritmos padrão é usado, o SDK do AWS Database Encryption gera uma chave privada temporária e um par de chaves públicas para cada registro criptografado. O SDK AWS de criptografia de banco de dados armazena a chave pública na descrição do material e descarta a chave privada, e ninguém pode criar outra assinatura que verifique com a chave pública. Como o algoritmo vincula a chave pública à chave de dados criptografada como dados autenticados adicionais na descrição do material, um usuário que só pode descriptografar registros não pode alterar a chave pública.

O SDK AWS de criptografia de banco de dados sempre inclui a verificação HMAC. As assinaturas digitais ECDSA são habilitadas por padrão, mas não são obrigatórias. Se os usuários que criptografam dados e os usuários que decifram os dados forem igualmente confiáveis, considere usar um conjunto de algoritmos que não inclua assinaturas digitais para melhorar seu desempenho. Para obter mais informações sobre como selecionar conjuntos de algoritmos alternativos, consulte Escolha de um conjunto de algoritmos.