Conceitos no AWS Encryption SDK - AWS Encryption SDK

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

Conceitos no AWS Encryption SDK

Esta seção apresenta os conceitos usados no AWS Encryption SDK e fornece um glossário e uma referência. Ele foi projetado para ajudar você a entender como oAWS Encryption SDKfunciona e os termos que usamos para descrevê-lo.

Precisa de ajuda?

Criptografia de envelope

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 umaChave de criptografia de chaveouWrapping key. A prática de uso de uma chave de empacotamento para criptografar chaves de dados é conhecida comocriptografia de envelope.

Proteção de chaves de dados

OAWS Encryption SDKcriptografa cada mensagem com uma chave de dados exclusiva. Em seguida, ele criptografa a chave de dados sob a chave de empacotamento especificada por você. Ele armazena a chave de dados criptografada junto com os dados criptografados na mensagem criptografada retornada por ele.

Para especificar sua chave de embalagem, você usa umToken de autenticação doouProvedor de chaves mestras do.


                            Criptografia de envelope com oAWS Encryption SDK
Criptografar os mesmos dados com várias chaves de empacotamento

Você pode criptografar a chave de dados em várias chaves de empacotamento. Talvez você queira fornecer chaves de embalagem diferentes para usuários diferentes, ou chaves de embalagem de diferentes tipos ou em locais diferentes. Cada uma das chaves de empacotamento criptografa a mesma chave de dados. OAWS Encryption SDKArmazena todas as chaves de dados criptografadas com os dados criptografados na mensagem criptografada.

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


                            Cada chave empacotadora criptografa a mesma chave de dados, resultando em uma chave de dados criptografada para cada chave de empacotamento
Combinação de pontos fortes de vários algoritmos

Para criptografar seus dados, por padrão, oAWS Encryption SDKusa um sofisticadoPacote de algoritmoscom criptografia simétrica AES-GCM, uma função de derivação de chave (HKDF) e assinatura. Para criptografar a chave de dados, você pode especificar umalgoritmo de criptografia simétrica ou assimétricaapropriado à sua chave de embrulho.

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 e gerenciamento de chaves mais fácil. Para combinar os pontos fortes de cada um, você pode criptografar seus dados com criptografia de chave simétrica e, em seguida, criptografar a chave de dados com criptografia de chave pública.

Chave de dados

A chave de ados é uma chave de criptografia que o AWS Encryption SDK 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 AWS Encryption SDK usará uma chave de dados exclusiva para criptografar cada mensagem.

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

Para proteger suas chaves de dados, oAWS Encryption SDKcriptografa-os em um ou maisChaves de criptografia de chaveconhecido comoChaves de embalagemou chaves mestras. Depois que o AWS Encryption SDK 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. Para obter detalhes, consulte Como o AWS Encryption SDK funciona.

dica

No AWS Encryption SDK, 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.

Cada chave de dados criptografada inclui metadados, incluindo o identificador da chave de empacotamento que a criptografou. Esses metadados facilitam o para oAWS Encryption SDKpara identificar chaves de embalagem válidas ao descriptografar.

Wrapping key

UMAWrapping keyé uma chave de criptografia de chave que oAWS Encryption SDKusa para criptografar oChave de dadosque criptografa seus dados. Cada chave de dados em texto simples pode ser criptografada sob uma ou mais chaves de empacotamento. Você determina quais chaves de empacotamento são usadas para proteger seus dados ao configurar umToken de autenticação doouProvedor de chaves mestras do.

nota

Wrapping keySe refere às chaves em um tokens de autenticação ou um provedor de chaves mestras. Chave mestranormalmente está associado aoMasterKeyclasse que você instancia quando usa um provedor de chaves mestras.

OAWS Encryption SDKsuporta várias chaves de embalagem comumente usadas, comoAWS Key Management Service(AWS KMS) simétricaAWS KMS keys(incluindoChaves KMS de várias regiões), chaves brutas do AES-GCM (Advanced Encryption Standard/Galois Counter Mode) e chaves RSA brutas. Você também pode estender ou implementar suas próprias chaves de empacotamento.

Quando você usa a criptografia de envelope, você precisa proteger suas chaves de empacotamento contra acesso não autorizado. Você pode fazer isso de qualquer uma das seguintes maneiras:

Se você não tiver um sistema de gerenciamento de chaves, recomendamos o AWS KMS. OAWS Encryption SDKO integra-se aoAWS KMSPara ajudar a proteger e usar suas chaves de empacotamento. No entanto, oAWS Encryption SDKNão requerAWSou qualquerAWSserviço.

Porta-chaves e provedores de chave mestra

Para especificar as chaves de empacotamento usadas para criptografia e descriptografia, use um chaveiro (C, C#/.NET e JavaScript) ou um provedor de chave mestra (Java, Python, CLI). Você pode usar os chaveiros e os provedores de chave mestra que oAWS Encryption SDKfornece ou projete suas próprias implementações. OAWS Encryption SDKfornece chaveiros e provedores de chave mestra compatíveis entre si sujeitos a restrições de idioma. Para obter detalhes, consulte Compatibilidade dos tokens de autenticação.

Um token de autenticação gera, criptografa e descriptografa chaves de dados. Ao definir um chaveiro, você pode especificar oChaves de embalagemque criptografam suas chaves de dados. A maioria dos chaveiros especifica pelo menos uma chave de empacotamento ou um serviço que fornece e protege chaves de empacotamento. Você também pode definir um chaveiro sem chaves de empacotamento ou um chaveiro mais complexo com opções de configuração adicionais. Para obter ajuda para escolher e usar os chaveiros que oAWS Encryption SDKdefine, consulteUsar tokens de autenticação. Os chaveiros são suportados em C, C#/.NET e JavaScript.

UMAProvedor de chaves mestras doé uma alternativa para um chaveiro. O provedor de chave mestra retorna as chaves de empacotamento (ou chaves mestras) especificadas. Cada chave mestra é associada a um provedor de chaves mestras, mas um provedor de chaves mestras normalmente fornece várias chaves mestras. Provedores de chave mestra são suportados em Java, Python e oAWSCLI de criptografia.

Você deve especificar um chaveiro (ou provedor de chave mestra) para criptografia. Você pode especificar o mesmo chaveiro (ou provedor de chave mestra), ou outro, para descriptografia. Ao criptografar, oAWS Encryption SDKusa todas as chaves de empacotamento especificadas para criptografar a chave de dados. Ao descriptografar, oAWS Encryption SDKO usa somente as chaves de empacotamento especificadas por você para descriptografar uma chave de dados criptografada. Especificar chaves de embalagem para descriptografia é opcional, mas é umAWS Encryption SDK prática recomendada.

Para obter detalhes sobre como especificar chaves de empacotamento, consulteSelecione as teclas de embalagem.

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 AWS Encryption SDK inclui o contexto de criptografia em texto simples no cabeçalho da mensagem criptografada retornada por ele.

O contexto de criptografia que oAWS Encryption SDKO uso consiste no contexto de criptografia especificado e um key pair públicas que oGerenciador de material criptográfico(CMM) adiciona. 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 AWS Encryption SDK 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 AWS Encryption SDK 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 AWS Encryption SDK (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 implementações de linguagem de programação, 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 simples no cabeçalho doMensagem criptografadaque oAWS Encryption SDKO retorna. 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 envio e verificação de um contexto de criptografia em seu código, consulte os exemplos de sua preferênciaLinguagem de programação.

Mensagem criptografada

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

UmaMensagem criptografadaé um portátilestrutura de dados formatadaIsso inclui os dados criptografados junto com as cópias criptografadas das chaves de dados, o ID do algoritmo e, opcionalmente, umcontexto de criptografiae umassinatura digital. As operações de criptografia no AWS Encryption SDK 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.

Pacote de algoritmos

OAWS Encryption SDKusa um conjunto de algoritmos para criptografar e assinar os dados noMensagem criptografadaque as operações de criptografia e descriptografia retornam. O AWS Encryption SDK é 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 AWS Encryption SDK 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 pacote de algoritmos alternativoGerenciador de material de criptografia (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 um baseado em HMAC extract-and-expand Função de derivação de chave(HKDF),Compromissos, umAlgoritmo de assinatura digital de curva elíptica (ECDSA)assinatura e uma chave de criptografia de 256 bits.

Se o aplicativo exigir alto desempenho e os usuários que estão criptografando dados e aqueles que estão descriptografando dados forem igualmente confiáveis, você pode considerar especificar um conjunto de algoritmos sem uma assinatura digital. No entanto, recomendamos enfaticamente um conjunto de algoritmos que inclua comprometimento de chaves e uma função de derivação de chave. Os pacotes de algoritmos sem esses recursos são compatíveis somente para compatibilidade com versões anteriores.

Gerenciador de material de criptografia

O gerenciador de material de criptografia (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ê nunca interage com o CMM diretamente. Os métodos de criptografia e descriptografia o processam para você.

Você pode usar o CMM padrão ou oCMM de armazenamento em cacheque oAWS Encryption SDKfornece ou escreva um CMM personalizado. E você pode especificar um CMM, mas ele não é necessário. Quando você especifica um tokens de autenticação ou um provedor de chaves mestras, oAWS Encryption SDKcria um CMM padrão para você. O CMM padrão obtém o material de criptografia ou descriptografia do provedor de chaves mestras ou do provedor de chaves mestras especificado por você. Isso pode envolver uma chamada a um serviço criptográfico, como o AWS Key Management Service (AWS KMS).

Porque o CMM atua como uma ligação entre oAWS Encryption SDKE um tokens de autenticação (ou um 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 AWS Encryption SDK fornece um CMM de armazenamento em cache para oferecer suporte ao armazenamento em cache de chaves de dados.

Criptografia simétrica e assimétrica

Criptografia simétricaO usa a mesma chave para criptografar e descriptografar dados.

Criptografia assimétricausa um key pair de dados matematicamente relacionado. Uma chave no par criptografa os dados; somente a outra chave no par pode descriptografar os dados. Para obter mais detalhes, consulte .Algoritmos criptográficosnoAWSGuia de ferramentas e serviços criptográficos.

OAWS Encryption SDKusacriptografia de envelope. Ele criptografa seus 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 retorna umMensagem criptografadaIsso inclui os dados criptografados e pelo menos uma cópia criptografada da chave de dados.

Criptografando seus dados (criptografia simétrica)

Para criptografar seus dados, oAWS Encryption SDKO usa simétricaChave de dadose umPacote de algoritmosque inclui um algoritmo de criptografia simétrica. Para descriptografar os dados, oAWS Encryption SDKO usa a mesma chave de dados e o mesmo pacote de algoritmos.

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

OToken de autenticação doouProvedor de chaves mestras doque 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 ou provedor de chave mestra que use criptografia simétrica, como umAWS KMSchaveiro, ou um que usa criptografia assimétrica, como um chaveiro RSA bruto ouJceMasterKey.

Compromissos

OAWS Encryption SDKaguentaCompromissos(às vezes conhecido comorobustez), uma propriedade de segurança que garante que cada texto cifrado possa ser descriptografado apenas para um único texto simples. Para fazer isso, o compromisso da chave garante que somente a chave de dados que criptografou sua mensagem será usada para descriptografá-la. Criptografar e descriptografar com compromisso chave é umAWS Encryption SDKprática recomendada.

A maioria das cifras simétricas modernas (incluindo AES) criptografa um texto simples sob uma única chave secreta, como oChave de dados exclusivaque oAWS Encryption SDKusa para criptografar cada mensagem de texto simples. Descriptografar esses dados com a mesma chave de dados retorna um texto sem formatação idêntico ao original. A descriptografia com uma chave diferente geralmente falhará. No entanto, é possível descriptografar um texto cifrado sob duas chaves diferentes. Em casos raros, é viável encontrar uma chave que possa descriptografar alguns bytes de texto cifrado em um texto simples diferente, mas ainda assim inteligível.

OAWS Encryption SDKsempre criptografa cada mensagem de texto simples em uma chave de dados exclusiva. Ele pode criptografar essa chave de dados em várias chaves de empacotamento (ou chaves mestras), mas as chaves de empacotamento sempre criptografam a mesma chave de dados. No entanto, um sofisticado, feito manualmenteMensagem criptografadapode realmente conter chaves de dados diferentes, cada uma criptografada por uma chave de empacotamento diferente. Por exemplo, se um usuário descriptografar a mensagem criptografada, ele retornará 0x0 (false) enquanto outro usuário descriptografando a mesma mensagem criptografada obtém 0x1 (true).

Para evitar esse cenário, oAWS Encryption SDKsuporta comprometimento chave ao criptografar e descriptografar. Quando oAWS Encryption SDKcriptografa uma mensagem com compromisso de chave, ela vincula criptograficamente a chave de dados exclusiva que produziu o texto cifrado aostring de compromisso de chave, um identificador de chave de dados não secreto. Depois, ele armazena a string de compromisso de chave nos metadados da mensagem criptografada. Quando ele descriptografa uma mensagem com compromisso chave, oAWS Encryption SDKverifica se a chave de dados é a única chave dessa mensagem criptografada. Se a verificação da chave de dados falhar, a operação de descriptografia falhará.

O Support para o compromisso de chave é introduzido na versão 1.7.x, que pode descriptografar mensagens com compromisso chave, mas não criptografa com compromisso chave. Você pode usar esta versão para implantar totalmente a capacidade de descriptografar texto cifrado com compromisso chave. Versão 2.0.xinclui suporte total para comprometimento chave. Por padrão, ele criptografa e descriptografa somente com comprometimento chave. Esta é uma configuração ideal para aplicativos que não precisam descriptografar texto cifrado criptografado por versões anteriores doAWS Encryption SDK.

Embora criptografar e descriptografar com comprometimento-chave seja uma prática recomendada, permitimos que você decida quando ele é usado e permitimos que você ajuste o ritmo em que você a adota. Começando na versão 1.7.x,AWS Encryption SDKoferece suporte a umPolítica de compromissoque define oPacote de algoritmos padrãoe limita os conjuntos de algoritmos que podem ser usados. Essa política determina se seus dados são criptografados e descriptografados com compromisso chave.

O principal compromisso resulta em ummensagem criptografada um pouco maior (+ 30 bytes)E leva mais tempo para processar. Se seu aplicativo for muito sensível ao tamanho ou ao desempenho, você pode optar por não participar do compromisso principal. Mas faça isso somente se você precisar.

Para obter mais informações sobre como migrar para as versões 1.7.xe 2.0.x, incluindo seus principais recursos de compromisso, consulteMigração para as versões 2.0.xe posterior. Para obter informações técnicas sobre o principal compromisso, consulteReferência de algoritmos do AWS Encryption SDKeReferência do formato de mensagens do AWS Encryption SDK.

Política de compromisso

UMAPolítica de compromissoé uma configuração que determina se seu aplicativo criptografa e descriptografa comCompromissos. Criptografar e descriptografar com compromisso chave é umAWS Encryption SDKprática recomendada.

A política de compromisso tem três valores.

nota

Talvez seja necessário rolar horizontalmente ou verticalmente para ver a tabela inteira.

Valores da política de compromisso
Valor Criptografa com comprometimento chave Criptografa sem compromisso de chave Descriptografa com compromisso chave Descriptografa sem compromisso chave
ForbidEncryptallowDecrypt
RequireEncryptallowDecrypt
RequireEncryptrequireDecrypt

A configuração da política de compromisso é introduzida emAWS Encryption SDKVersão 1.7.x. É válido em todos os suportadosLinguagens de programação do.

  • ForbidEncryptAllowDecryptdescriptografa com ou sem compromisso chave, mas não criptografa com compromisso chave. Esse é o único valor válido para a política de compromisso na versão 1.7.xe é usado para todas as operações de criptografia e descriptografia. Ele foi projetado para preparar todos os hosts que executam seu aplicativo para descriptografar com comprometimento chave antes que eles encontrem um texto cifrado criptografado com compromisso de chave.

  • RequireEncryptAllowDecryptsempre criptografa com comprometimento chave. Ele pode descriptografar com ou sem compromisso chave. Esse valor, introduzido na versão 2.0.x, permite que você comece a criptografar com comprometimento chave, mas ainda descriptografar textos cifrados legados sem compromisso de chave.

  • RequireEncryptRequireDecryptcriptografa e descriptografa somente com comprometimento chave. Esse valor é o padrão para a versão 2.0.x. Use esse valor quando tiver certeza de que todos os seus textos cifrados estão criptografados com compromisso chave.

A configuração da política de compromisso determina quais conjuntos de algoritmos você pode usar. Começando na versão 1.7.x, oAWS Encryption SDKaguentaPacotes de algoritmos dopara compromisso chave; com e sem assinatura. Se você especificar um conjunto de algoritmos que entra em conflito com sua política de compromisso, oAWS Encryption SDKO retorna um erro.

Para obter ajuda para definir sua política de compromisso, consulteDefinindo sua política de compromisso.

Assinaturas digitais

Para garantir a integridade de uma mensagem digital à medida que ela passa entre os sistemas, você pode aplicar uma assinatura digital à mensagem. As assinaturas digitais são sempre assimétricas. Você usa sua chave privada para criar a assinatura e anexá-la à mensagem original. Seu destinatário usa uma chave pública para verificar se a mensagem não foi modificada desde que você a assinou.

OAWS Encryption SDKcriptografa seus dados usando um algoritmo de criptografia autenticado, AES-GCM, e o processo de descriptografia verifica a integridade e a autenticidade de uma mensagem criptografada sem usar uma assinatura digital. 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 criptografado, causando uma possível preocupação de segurança. Por exemplo, se você usar umAWS KMSchave como chave de empacotamento, isso significa que é possível para um usuário com permissões Decrypt do KMS criar textos cifrados criptografados sem chamar KMS Encrypt.

Para evitar esse problema, oAWS Encryption SDKO suporta a adição de uma assinatura ECDSA (Elliptic Curve Digital Signature Algorithm) ao final das mensagens criptografadas. Quando um conjunto de algoritmos de assinatura é usado, oAWS Encryption SDKgera um par temporário de chave privada e chave pública para cada mensagem criptografada. OAWS Encryption SDKarmazena a chave pública no contexto de criptografia da chave de dados 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 no cabeçalho da mensagem, um usuário que só pode descriptografar mensagens não pode alterar a chave pública.

A verificação de assinatura adiciona um custo de desempenho significativo na descriptografia. Se os usuários que criptografam dados e os usuários descriptografando dados forem igualmente confiáveis, considere usar um conjunto de algoritmos que não inclua assinatura.