

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

# O que é o AWS Encryption SDK?
<a name="introduction"></a>

 AWS Encryption SDK É uma biblioteca de criptografia do lado do cliente projetada para facilitar que todos criptografem e descriptografem dados usando os padrões e as melhores práticas do setor. Ele permite que você se concentre na funcionalidade principal do aplicativo, em vez de sobre como melhor criptografar e descriptografar os dados. AWS Encryption SDK É fornecido gratuitamente sob a licença Apache 2.0.

As AWS Encryption SDK respostas a perguntas como as seguintes para você:
+ Qual algoritmo de criptografia devo usar?
+ Como, ou em qual modo, devo usar esse algoritmo?
+ Como faço para gerar a chave de criptografia?
+ Como faço para proteger a chave de criptografia e onde devo armazená-la?
+ Como posso tornar meus dados criptografados portáteis?
+ Como faço para garantir que o destinatário pretendido possa ler meus dados criptografados?
+ Como posso garantir que meus dados criptografados não sejam modificados entre o momento em que são gravados e o momento em que são lidos?
+ Como faço para usar as chaves de dados que AWS KMS retornam?

Com o AWS Encryption SDK, você define um [provedor de chave mestra](concepts.md#master-key-provider) ou um [chaveiro](concepts.md#keyring) que determina quais chaves de agrupamento você usa para proteger seus dados. Em seguida, você criptografa e descriptografa seus dados usando métodos simples fornecidos pelo. AWS Encryption SDK O AWS Encryption SDK faz o resto.

Sem isso AWS Encryption SDK, você pode se esforçar mais na criação de uma solução de criptografia do que na funcionalidade principal do seu aplicativo. Ele AWS Encryption SDK responde a essas perguntas fornecendo as seguintes coisas.

**Uma implementação padrão que segue as melhores práticas de criptografia**  
Por padrão, o AWS Encryption SDK gera uma chave de dados exclusiva para cada objeto de dados que ele criptografa. Isso segue a melhor prática de criptografia de usar chaves de dados exclusivas para cada operação de criptografia.  
Ele AWS Encryption SDK criptografa seus dados usando um algoritmo de chave simétrica, autenticado e seguro. Para obter mais informações, consulte [Suítes de algoritmos compatíveis no AWS Encryption SDK](supported-algorithms.md).

**Uma estrutura para proteção de chaves de dados com chaves de encapsulamento**  
O AWS Encryption SDK protege as chaves de dados que criptografam seus dados, criptografando-as sob uma ou mais chaves de encapsulamento. Ao fornecer uma estrutura para criptografar chaves de dados com mais de uma chave de empacotamento, isso AWS Encryption SDK ajuda a tornar seus dados criptografados portáteis.   
Por exemplo, criptografe dados com uma entrada AWS KMS key AWS KMS e uma chave do seu HSM local. É possível usar qualquer uma das duas chaves de encapsulamento para descriptografar os dados, caso alguma não esteja disponível ou o chamador não tenha permissão para usar as duas chaves.

**Uma mensagem formatada que armazena chaves de dados criptografadas com os dados criptografados**  
Ele AWS Encryption SDK armazena os dados criptografados e a chave de dados criptografados juntos em uma [mensagem criptografada](concepts.md#message) que usa um formato de dados definido. Isso significa que você não precisa acompanhar ou proteger as chaves de dados que criptografam seus dados, pois elas AWS Encryption SDK fazem isso por você.

Algumas implementações de linguagem do AWS Encryption SDK exigem um AWS SDK, mas AWS Encryption SDK não exigem um Conta da AWS e não dependem de nenhum AWS serviço. Você Conta da AWS só precisa de um se optar por usar [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#kms-keys)para proteger seus dados.

## Desenvolvido em repositórios de código aberto
<a name="esdk-repos"></a>

O AWS Encryption SDK é desenvolvido em repositórios de código aberto em. GitHub É possível usar esses repositórios para visualizar o código, ler e enviar problemas e encontrar informações específicas para sua implementação de linguagem.
+ AWS Encryption SDK for C — [aws-encryption-sdk-c](https://github.com/aws/aws-encryption-sdk-c/)
+ AWS Encryption SDK para [o.NET — diretório.NET](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/) do `aws-encryption-sdk` repositório.
+ AWS CLI de criptografia — [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)
+ AWS Encryption SDK for Java — [aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/)
+ AWS Encryption SDK para JavaScript — [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)
+ AWS Encryption SDK for Python — [aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/)
+ AWS Encryption SDK para Rust — diretório [Rust](https://github.com/aws/aws-encryption-sdk-dafny/tree/mainline/AwsEncryptionSDK/runtimes/rust/) do repositório. `aws-encryption-sdk`
+ AWS Encryption SDK para Go — diretório [Go](https://github.com/aws/aws-encryption-sdk/tree/mainline/releases/go/encryption-sdk/) do `aws-encryption-sdk` repositório

## Compatibilidade com bibliotecas e serviços de criptografia
<a name="intro-compatibility"></a>

O AWS Encryption SDK é suportado em várias [linguagens de programação](programming-languages.md). As implementações de linguagem são interoperáveis É possível criptografar com uma implementação de linguagem e descriptografar com outra. A interoperabilidade pode estar sujeita às restrições de linguagem. Em caso afirmativo, essas restrições estarão descritas no tópico sobre a implementação de linguagem. Além disso, ao criptografar e descriptografar, é necessário usar tokens de autenticação compatíveis ou chaves mestras e provedores de chaves mestras. Para obter detalhes, consulte [Compatibilidade dos tokens de autenticação](choose-keyring.md#keyring-compatibility).

No entanto, eles AWS Encryption SDK não podem interoperar com outras bibliotecas. Como cada biblioteca retorna dados criptografados em um formato diferente, você não pode criptografar com uma biblioteca e descriptografar com outra.

**DynamoDB Encryption Client e criptografia do lado do cliente do Amazon S3**  <a name="ESDK-DDBEC"></a>
 AWS Encryption SDK [Não é possível descriptografar dados criptografados pelo DynamoDB [Encryption Client ou pela criptografia do lado do cliente do Amazon](https://docs.aws.amazon.com/dynamodb-encryption-client/latest/devguide/) S3.](https://docs.aws.amazon.com/AmazonS3/latest/userguide/UsingClientSideEncryption.html) Essas bibliotecas não conseguem decifrar a [mensagem criptografada que retornam](concepts.md#message). AWS Encryption SDK  

**AWS Key Management Service (AWS KMS)**  <a name="ESDK-KMS"></a>
Eles AWS Encryption SDK podem usar [chaves [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)de dados](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#data-keys) para proteger seus dados, incluindo chaves KMS multirregionais. Por exemplo, você pode configurar o AWS Encryption SDK para criptografar seus dados em um ou mais AWS KMS keys em seu Conta da AWS. No entanto, você deve usar o AWS Encryption SDK para descriptografar esses dados.   
 AWS Encryption SDK [Não é possível descriptografar o texto cifrado que as operações Encrypt ou retornam. AWS KMS[ReEncrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_ReEncrypt.html)](https://docs.aws.amazon.com/kms/latest/APIReference/API_Encrypt.html) [Da mesma forma, a operação AWS KMS[Decrypt](https://docs.aws.amazon.com/kms/latest/APIReference/API_Decrypt.html) não pode descriptografar a mensagem criptografada que ela retorna.](concepts.md#message) AWS Encryption SDK   
O AWS Encryption SDK suporta somente [chaves KMS de criptografia simétrica](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html#symmetric-cmks). Não é possível usar uma [chave assimétrica do KMS](https://docs.aws.amazon.com/kms/latest/developerguide/symm-asymm-concepts.html#asymmetric-cmks) para criptografia ou assinatura no AWS Encryption SDK. O AWS Encryption SDK gera suas próprias chaves de assinatura ECDSA para [pacotes de algoritmos](supported-algorithms.md) que assinam mensagens.

## Suporte e manutenção
<a name="support"></a>

O AWS Encryption SDK usa a mesma [política de manutenção](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) que o AWS SDK e as ferramentas usam, incluindo suas fases de controle de versão e ciclo de vida. Como [prática recomendada](best-practices.md), recomendamos que você use a versão mais recente disponível do AWS Encryption SDK para sua linguagem de programação e atualize à medida que novas versões forem lançadas. Quando uma versão exige alterações significativas, como a atualização de AWS Encryption SDK versões anteriores à 1.7. *x* para as versões 2.0. *x* e posteriormente, fornecemos [instruções detalhadas](migration.md) para ajudá-lo.

Cada implementação de linguagem de programação do AWS Encryption SDK é desenvolvida em um GitHub repositório de código aberto separado. É provável que o ciclo de vida e a fase do suporte de cada versão variem entre os repositórios. Por exemplo, uma determinada versão do AWS Encryption SDK pode estar na fase de disponibilidade geral (suporte total) em uma linguagem de programação, mas a end-of-support fase em uma linguagem de programação diferente. Recomendamos que você use uma versão totalmente compatível sempre que possível e evite versões que já não sejam compatíveis.

Para encontrar a fase do ciclo de vida das AWS Encryption SDK versões da sua linguagem de programação, consulte o `SUPPORT_POLICY.rst` arquivo em cada AWS Encryption SDK repositório.
+ AWS Encryption SDK for C — [Support\$1policy.rst](https://github.com/aws/aws-encryption-sdk-c/blob/master/SUPPORT_POLICY.rst)
+ AWS Encryption SDK para o.NET — [Support\$1policy.rst](https://github.com/aws/aws-encryption-sdk-dafny/blob/mainline/SUPPORT_POLICY.rst)
+ AWS [CLI de criptografia — Support\$1policy.rst](https://github.com/aws/aws-encryption-sdk-cli/blob/master/SUPPORT_POLICY.rst)
+ AWS Encryption SDK for Java — [Support\$1policy.rst](https://github.com/aws/aws-encryption-sdk-java/blob/master/SUPPORT_POLICY.rst)
+ AWS Encryption SDK para JavaScript — [Support\$1policy.rst](https://github.com/aws/aws-encryption-sdk-javascript/blob/master/SUPPORT_POLICY.rst)
+ AWS Encryption SDK for Python — [Support\$1policy.rst](https://github.com/aws/aws-encryption-sdk-python/blob/master/SUPPORT_POLICY.rst)

Para obter mais informações, consulte [Versões do AWS Encryption SDK](about-versions.md) e [AWS SDKs e a política de manutenção de ferramentas](https://docs.aws.amazon.com/sdkref/latest/guide/maint-policy.html) no Guia de referência de ferramentas AWS SDKs e ferramentas.

## Saiba mais
<a name="intro-see-also"></a>

Para obter mais informações sobre a AWS Encryption SDK criptografia do lado do cliente, experimente essas fontes.
+ Para obter ajuda com os termos e conceitos usados neste SDK, consulte [Conceitos no AWS Encryption SDK](concepts.md).
+ Para obter as diretrizes de práticas recomendadas, consulte [Melhores práticas para o AWS Encryption SDK](best-practices.md).
+ Para obter informações sobre como o SDK funciona, consulte [Saiba como o SDK funciona](how-it-works.md).
+ Para obter exemplos que mostram como configurar opções no AWS Encryption SDK, consulte[Configurando o AWS Encryption SDK](configure.md).
+ Para obter informações técnicas, consulte a [AWS Encryption SDK referência](reference.md).
+ Para obter as especificações técnicas do AWS Encryption SDK, consulte a [AWS Encryption SDK Especificação](https://github.com/awslabs/aws-encryption-sdk-specification/) em GitHub.
+ Para obter respostas às suas perguntas sobre o uso do AWS Encryption SDK, leia e publique no [Fórum de discussão sobre ferramentas AWS criptográficas](https://forums.aws.amazon.com/forum.jspa?forumID=302).

Para obter informações sobre implementações do AWS Encryption SDK em diferentes linguagens de programação.
+ **C**: Veja [AWS Encryption SDK for C](c-language.md) a [documentação em AWS Encryption SDK C](https://aws.github.io/aws-encryption-sdk-c/html/) e o [aws-encryption-sdk-c](https://github.com/aws/aws-encryption-sdk-c/)repositório ativado GitHub.
+ **C\$1/.NET**: Consulte [AWS Encryption SDK para o.NET](dot-net.md) e ative o [aws-encryption-sdk-net](https://github.com/aws/aws-encryption-sdk/tree/mainline/AwsEncryptionSDK/runtimes/net/)diretório do `aws-encryption-sdk` repositório. GitHub
+ **Interface de linha de comando**: consulte[AWS Encryption SDK interface de linha de comando](crypto-cli.md), [leia os documentos](https://aws-encryption-sdk-cli.readthedocs.io/en/latest/) da CLI de AWS criptografia e [aws-encryption-sdk-cli](https://github.com/aws/aws-encryption-sdk-cli/)do repositório em. GitHub
+ **Java**: veja[AWS Encryption SDK for Java](java.md), o AWS Encryption SDK [Javadoc](https://aws.github.io/aws-encryption-sdk-java/) e o [aws-encryption-sdk-java](https://github.com/aws/aws-encryption-sdk-java/)repositório ativado. GitHub

  **JavaScript**: Veja [AWS Encryption SDK para JavaScript](javascript.md) e ative o [aws-encryption-sdk-javascript](https://github.com/aws/aws-encryption-sdk-javascript/)repositório. GitHub 
+ **Python**: veja [AWS Encryption SDK for Python](python.md) a [documentação do AWS Encryption SDK Python](https://aws-encryption-sdk-python.readthedocs.io/en/latest/) e o repositório em. [aws-encryption-sdk-python](https://github.com/aws/aws-encryption-sdk-python/) GitHub

## Enviar comentários
<a name="report-issues"></a>

Os seus comentários são bem-vindos. Se você tiver uma pergunta ou comentário, ou um problema a relatar, use os seguintes recursos.
+ Se você descobrir uma possível vulnerabilidade de segurança no AWS Encryption SDK, [notifique a AWS segurança](https://aws.amazon.com/security/vulnerability-reporting/). Não crie um GitHub problema público.
+ Para fornecer feedback sobre o AWS Encryption SDK, registre um problema no GitHub repositório da linguagem de programação que você está usando. 
+ Para fornecer comentários sobre esta documentação, use os links **Feedback** nesta página. Você também pode registrar um problema ou contribuir para [aws-encryption-sdk-docs](https://github.com/awsdocs/aws-encryption-sdk-docs)o repositório de código aberto desta documentação em. GitHub

# Conceitos no AWS Encryption SDK
<a name="concepts"></a>

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 AWS Encryption SDK funciona e os termos que usamos para descrevê-lo.

Precisa de ajuda? 
+ Saiba como ele AWS Encryption SDK usa [criptografia de envelope](#envelope-encryption) para proteger seus dados.
+ Saiba mais sobre os elementos da criptografia envelopada: as [chaves de dados](#DEK) que protegem seus registros e as [chaves de encapsulamento](#master-key) que protegem suas chaves de dados. 
+ Saiba mais sobre os [tokens de autenticação](#keyring) e os[provedores de chaves mestras](#master-key-provider) que determinam quais chaves de encapsulamento você usa.
+ Saiba mais sobre o [contexto de criptografia](#encryption-context) que adiciona integridade ao seu processo de criptografia. É opcional, mas é uma prática recomendada que incentivamos.
+ Saiba mais sobre a [mensagem criptografada](#message) que os métodos de criptografia retornam. 
+ Então você está pronto para usar o AWS Encryption SDK em sua [linguagem de programação](programming-languages.md) preferida.

**Topics**
+ [

## criptografia envelopada
](#envelope-encryption)
+ [

## Chave de dados
](#DEK)
+ [

## Chave de encapsulamento
](#master-key)
+ [

## Tokens de autenticação e provedores de chaves mestras
](#keyring)
+ [

## Contexto de criptografia
](#encryption-context)
+ [

## Mensagem criptografada
](#message)
+ [

## Pacote de algoritmos
](#crypto-algorithm)
+ [

## Gerenciador de material de criptografia
](#crypt-materials-manager)
+ [

## Criptografia simétrica e assimétrica
](#symmetric-key-encryption)
+ [

## Confirmação de chave
](#key-commitment)
+ [

## Política de compromisso
](#commitment-policy)
+ [

## Assinaturas digitais
](#digital-sigs)

## criptografia envelopada
<a name="envelope-encryption"></a>

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](#master-key). 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 AWS Encryption SDK criptografa cada mensagem com uma chave de dados exclusiva. Em seguida, ele criptografa cada chave de dados sob a chave de encapsulamento especificada. Ele armazena as chaves de dados criptografadas junto com os dados criptografados na mensagem criptografada que as operações de criptografia retornam.  
Para especificar sua chave de encapsulamento, use um [token de autenticação](#keyring) ou um[provedor de chave mestra](#master-key-provider).  

![\[Criptografia de envelope com o AWS Encryption SDK\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/envelope-encryption-70.png)


**Criptografar os mesmos dados com várias chaves de encapsulamento**  
É possível criptografar a chave de dados sob várias chaves de encapsulamento. Talvez você queira fornecer chaves de encapsulamento distintas para usuários diferentes ou chaves de encapsulamento de tipos variados ou em locais diferentes. Cada uma das chaves de encapsulamento criptografa a mesma chave de dados. Ele AWS Encryption SDK armazena todas as chaves de dados criptografadas com os dados criptografados na mensagem criptografada.   
Para descriptografar os dados, você precisa fornecer pelo menos uma chave de encapsulamento que possa descriptografar uma das chaves de dados criptografadas.  

![\[Cada chave de encapsulamento criptografa a mesma chave de dados, o que resulta em uma chave de dados criptografada para cada chave de encapsulamento\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/multiple-wrapping-keys-70.png)


**Combinação de pontos fortes de vários algoritmos**  
Para criptografar seus dados, por padrão, o AWS Encryption SDK usa um sofisticado [conjunto de algoritmos](supported-algorithms.md) com 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 um [algoritmo de criptografia simétrico ou assimétrico](#symmetric-key-encryption) 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 e gerenciamento de chaves mais fácil. Para combinar as forças de cada um, você pode criptografar dados brutos com criptografia de chave simétrica e, em seguida, criptografar a chave de dados com criptografia de chave pública.

## Chave de dados
<a name="DEK"></a>

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 o [cache de chaves de dados](data-key-caching.md), ele AWS Encryption SDK usa uma chave de dados exclusiva para criptografar cada mensagem.

Você não precisa especificar, gerar, implementar, estender, proteger ou 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, eles as AWS Encryption SDK criptografam sob uma ou mais chaves de *criptografia de chave conhecidas como chaves de empacotamento ou chaves* [mestras](#master-key). Depois de AWS Encryption SDK usar suas chaves de dados em texto simples para criptografar seus dados, ele os remove da memória o mais rápido possível. Depois, ele armazena as chaves de dados criptografadas junto com os dados criptografados na [mensagem criptografada](#message) que as operações de criptografia retornam. Para obter detalhes, consulte [Como AWS Encryption SDK funciona](how-it-works.md).

**dica**  
No AWS Encryption SDK, distinguimos *as chaves de dados das chaves* de *criptografia de dados*. Vários dos [pacotes de algoritmos](#crypto-algorithm), incluindo o pacote padrão, usam uma [função de derivação de chaves](https://en.wikipedia.org/wiki/Key_derivation_function) 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 encapsulamento que a criptografou. Esses metadados facilitam a identificação de chaves de empacotamento válidas durante a descriptografia. AWS Encryption SDK 

## Chave de encapsulamento
<a name="master-key"></a>

Uma *chave de encapsulamento* é uma chave de criptografia que o AWS Encryption SDK usa para criptografar a [chave de dados](#DEK) 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 encapsulamento serão usadas para proteger seus dados ao configurar um [token de autenticação](#keyring) ou um [provedor de chave mestra](#master-key-provider).

**nota**  
A *chave de encapsulamento* refere-se às chaves em um token de autenticação ou provedor de chave mestra. A *chave mestra* geralmente está associada à classe `MasterKey` que você instancia ao usar um provedor de chave mestra.

O AWS Encryption SDK suporta várias chaves de agrupamento comumente usadas, como AWS Key Management Service (AWS KMS) simétricas [AWS KMS keys](https://docs.aws.amazon.com/kms/latest/developerguide/concepts.html#master_keys)(incluindo chaves [KMS multirregionais), chaves](configure.md#config-mrks) brutas AES-GCM (Advanced Encryption Standard/Galois Counter Mode) e chaves RSA brutas. Você também pode estender ou implementar suas próprias chaves de encapsulamento. 

Quando você usa a criptografia envelopada, precisa proteger suas chaves de encapsulamento contra acesso não autorizado. É possível fazer isso de uma das seguintes maneiras:
+ Use um serviço web projetado para essa finalidade, como o [AWS Key Management Service (AWS KMS)](https://aws.amazon.com/kms/).
+ Use um [hardware security module (HSM - módulo de segurança de hardware)](https://en.wikipedia.org/wiki/Hardware_security_module), como os oferecidos pelo [AWS CloudHSM](https://aws.amazon.com/cloudhsm/).
+ Use outras ferramentas e serviços de gerenciamento de chaves.

Se você não tem um sistema de gerenciamento de chaves, recomendamos AWS KMS. Ele AWS Encryption SDK se integra AWS KMS para ajudar você a proteger e usar suas chaves de embalagem. No entanto, AWS Encryption SDK não requer AWS nenhum AWS serviço.

## Tokens de autenticação e provedores de chaves mestras
<a name="keyring"></a>

Para especificar as chaves de agrupamento que você usa para criptografia e decodificação, use um chaveiro ou um provedor de chave mestra. Você pode usar os chaveiros e os provedores de chaves mestras que eles AWS Encryption SDK fornecem ou criar suas próprias implementações. O AWS Encryption SDK fornece tokens de autenticação e provedores de chaves mestras compatíveis entre si, sujeitos a restrições de linguagem. Para obter detalhes, consulte [Compatibilidade dos tokens de autenticação](choose-keyring.md#keyring-compatibility). 

Um *token de autenticação* gera, criptografa e descriptografa chaves de dados. Ao definir um token de autenticação, você pode especificar as [chaves de encapsulamento](#master-key) 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. Você também pode definir um token de autenticação sem chaves de encapsulamento ou um token de autenticação mais complexo com opções de configuração adicionais. Para obter ajuda para escolher e usar os chaveiros que AWS Encryption SDK definem, consulte[Tokens de autenticação](choose-keyring.md). 

Os chaveiros são compatíveis com as seguintes linguagens de programação:
+ AWS Encryption SDK for C
+ AWS Encryption SDK para JavaScript
+ AWS Encryption SDK para o.NET
+ Versão 3. *x* do AWS Encryption SDK for Java
+ Versão 4. *x* do AWS Encryption SDK for Python, quando usado com a dependência opcional da [Biblioteca de Provedores de Material Criptográfico](https://github.com/aws/aws-cryptographic-material-providers-library) (MPL).
+ Versão 1. *x* do AWS Encryption SDK para Rust
+ Versão 0.1. *x* ou posterior do AWS Encryption SDK for Go

Um *provedor de chave mestra* é uma alternativa a um token de autenticação. O provedor de chave mestra retorna as chaves de encapsulamento (ou chaves mestras) que você especificar. Cada chave mestra é associada a um provedor de chaves mestras, mas um provedor de chaves mestras normalmente fornece várias chaves mestras. Os provedores de chaves mestras são compatíveis com Java, Python e a AWS CLI de criptografia. 

Você deve especificar um token de autenticação (ou provedor de chave mestra) para criptografia. Você pode especificar o mesmo token de autenticação (ou provedor de chave mestra), ou um diferente, para descriptografia. Ao criptografar, ele AWS Encryption SDK usa todas as chaves de empacotamento que você especificar para criptografar a chave de dados. Ao descriptografar, o AWS Encryption SDK usa somente as chaves de encapsulamento que você especificar para descriptografar uma chave de dados criptografada. [Especificar chaves de encapsulamento para decodificação é opcional, mas é uma prática recomendada. AWS Encryption SDK](best-practices.md) 

Para obter detalhes sobre como especificar chaves de encapsulamento, consulte. [Seleção de chaves de encapsulamento](configure.md#config-keys) 

## Contexto de criptografia
<a name="encryption-context"></a>

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](#message) retornada por ele.

O contexto de criptografia AWS Encryption SDK usado consiste no contexto de criptografia que você especifica e em um par de chaves públicas que o [gerenciador de materiais criptográficos](#crypt-materials-manager) (CMM) adiciona. Especificamente, sempre que você usar um [algoritmo de criptografia com assinatura](algorithms-reference.md), 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 `aws-crypto-public-key` nome no contexto de criptografia é reservado pelo AWS Encryption SDK e não pode ser usado como nome em nenhum outro par no contexto de criptografia. Para obter detalhes, consulte [AAD](message-format.md#header-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, você não precisa fornecer o contexto de criptografia 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](crypto-cli.md) (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 linguagens 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.

**nota**  
As versões a seguir oferecem suporte ao [contexto de criptografia necessário CMM](configure.md#config-required-encryption-context-cmm), que você pode usar para exigir um contexto de criptografia em todas as solicitações de criptografia.  
Versão 3. *x* do AWS Encryption SDK for Java
Versão 4. *x* e versões posteriores do AWS Encryption SDK para o.NET
Versão 4. *x* do AWS Encryption SDK for Python, quando usado com a dependência opcional da [Biblioteca de Provedores de Material Criptográfico](https://github.com/aws/aws-cryptographic-material-providers-library) (MPL).
Versão 1. *x* do AWS Encryption SDK para Rust
Versão 0.1. *x* ou posterior do AWS Encryption SDK for Go

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](#message) retornada pelo AWS Encryption SDK . Se você estiver usando AWS Key Management Service, o contexto de criptografia também poderá aparecer em texto simples em registros e registros de auditoria, como. AWS CloudTrail

Para obter exemplos de envio e verificação de um contexto de criptografia no seu código, consulte os exemplos da [linguagem de programação](programming-languages.md) de sua preferência.

## Mensagem criptografada
<a name="message"></a>

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

Uma *mensagem criptografada* é uma [estrutura de dados formatados](message-format.md) 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](#encryption-context) e [uma assinatura digital](#digital-sigs). 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](message-format.md).

## Pacote de algoritmos
<a name="crypto-algorithm"></a>

O AWS Encryption SDK usa um conjunto de algoritmos para criptografar e assinar os dados na [mensagem criptografada](#message) que as operações de criptografia e descriptografia retornam. O AWS Encryption SDK é compatível com vários [pacotes de algoritmos](supported-algorithms.md). 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 conjunto de algoritmos recomendado como 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](#crypt-materials-manager)), 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 [função de derivação de extract-and-expand chave](https://en.wikipedia.org/wiki/HKDF) ([HKDF) baseada em HMAC](https://en.wikipedia.org/wiki/HKDF), [compromisso de chave](#key-commitment), uma assinatura de [algoritmo de assinatura digital de curva elíptica (](#digital-sigs)ECDSA) e uma chave de criptografia de 256 bits. 

Se sua aplicação exigir alta performance e os usuários que criptografam dados e aqueles que os descriptografam forem igualmente confiáveis, considere especificar um pacote de algoritmos sem uma assinatura digital. No entanto, recomendamos fortemente um pacote de algoritmos que inclua confirmação de chave e uma função de derivação de chave. Os pacotes de algoritmos que não têm esses atributos são compatíveis apenas para compatibilidade com versões anteriores.

## Gerenciador de material de criptografia
<a name="crypt-materials-manager"></a>

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

Você pode usar o CMM padrão ou o [CMM de cache que ele AWS Encryption SDK fornece, ou escrever um CMM](data-key-caching.md) personalizado. E é possível especificar explicitamente um CMM, mas isso não é obrigatório. Quando você especifica um provedor de chaveiro ou chave mestra, AWS Encryption SDK ele 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 ou do provedor de chave mestra que você especificar. Isso pode envolver uma chamada a um serviço criptográfico, como o [AWS Key Management Service](https://docs.aws.amazon.com/kms/latest/developerguide/) (AWS KMS).

Como o CMM atua como uma ligação entre o AWS Encryption SDK e um chaveiro (ou provedor de chave mestra), é um ponto ideal para personalização e extensão, como suporte para aplicação de políticas e armazenamento em cache. O AWS Encryption SDK fornece um CMM de cache para suportar o cache de [chaves de dados](data-key-caching.md). 

## Criptografia simétrica e assimétrica
<a name="symmetric-key-encryption"></a>

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.

O AWS Encryption SDK usa [criptografia de envelope](#envelope-encryption). 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 encapsulamento simétricas ou assimétricas. Ele retorna uma [mensagem criptografada](#message) que inclui os dados criptografados e pelo menos uma cópia criptografada da chave de dados. 

**Criptografar dados (criptografia simétrica)**  
Para criptografar seus dados, o AWS Encryption SDK usa uma [chave de dados](#DEK) simétrica e um [conjunto de algoritmos que inclui um algoritmo](#crypto-algorithm) de criptografia simétrica. Para descriptografar os dados, o AWS Encryption SDK 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](#keyring) ou o [provedor de chave mestra](#master-key-provider) que você fornece para uma operação de criptografia e descriptografia determina como a chave de dados simétrica será criptografada e descriptografada. Você pode escolher um provedor de chaveiro ou chave mestra que use criptografia simétrica, como um AWS KMS chaveiro, ou um que use criptografia assimétrica, como um chaveiro RSA bruto ou. `JceMasterKey`

## Confirmação de chave
<a name="key-commitment"></a>

O AWS Encryption SDK suporta o *comprometimento da chave* (à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, a confirmação de chave garante que somente a chave de dados que criptografou sua mensagem seja usada para descriptografá-la. Criptografar e descriptografar com o confirmação de chave é uma [prática recomendada do AWS Encryption SDK](best-practices.md).

A maioria das cifras simétricas modernas (incluindo AES) criptografa um texto simples com uma única chave secreta, como a [chave de dados exclusiva](#DEK) que o AWS Encryption SDK usa 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 decodificação com uma chave diferente geralmente falhará. No entanto, é possível decifrar um texto cifrado com duas chaves diferentes. Em casos raros, é possível encontrar uma chave que possa descriptografar alguns bytes do o texto cifrado em um texto simples diferente, mas ainda inteligível. 

 AWS Encryption SDK Sempre criptografa cada mensagem de texto simples em uma chave de dados exclusiva. Ele pode criptografar essa chave de dados em várias chaves de encapsulamento, mas as chaves de encapsulamento (ou chaves mestras) sempre criptografam a mesma chave de dados. No entanto, uma [mensagem criptografada](#message) sofisticada e criada manualmente pode, na verdade, conter chaves de dados diferentes, cada uma criptografada por uma chave de encapsulamento diferente. Por exemplo, se um usuário descriptografar a mensagem criptografada, ela retornará 0x0 (falso), enquanto outro usuário descriptografando a mesma mensagem criptografada obterá 0x1 (verdadeiro).

Para evitar esse cenário, o AWS Encryption SDK suporta o comprometimento da chave ao criptografar e descriptografar. Quando AWS Encryption SDK criptografa uma mensagem com comprometimento de chave, ele vincula criptograficamente a chave de dados exclusiva que produziu o texto cifrado à cadeia de *caracteres de confirmação da chave, um identificador de chave* de dados não secreto. Em seguida, ele armazena o string de compromisso chave nos metadados da mensagem criptografada. Ao decifrar uma mensagem com comprometimento de chave, AWS Encryption SDK verifica se a chave de dados é a única chave para essa mensagem criptografada. Se a verificação da chave de dados falhar, a operação de descriptografia falhará. 

O suporte para confirmação de chaves foi apresentado na versão 1.7. *x*, que pode descriptografar mensagens com confirmação de chave, mas não pode criptografar com confirmação de chave. Você pode usar essa versão para implantar totalmente a capacidade de descriptografar texto cifrado com confirmação de chave. A versão 2.0.*x* inclui suporte total para os compromissos de chave. Por padrão, ela criptografa e descriptografa somente com confirmação de chave. Essa é uma configuração ideal para aplicativos que não precisam decifrar texto cifrado criptografado por versões anteriores do. AWS Encryption SDK

Embora criptografar e descriptografar com confirmação de chave seja uma prática recomendada, deixamos que você decida quando ela será usada e ajustamos o ritmo em que você a adota. A partir da versão 1.7. *x*, AWS Encryption SDK suporta uma [política de compromisso](#commitment-policy) que define o [conjunto de algoritmos padrão](supported-algorithms.md) e limita os conjuntos de algoritmos que podem ser usados. Essa política determina se seus dados são criptografados e descriptografados com confirmação de chave. 

A confirmação de chave resulta em uma [mensagem criptografada um pouco maior (\$1 30 bytes)](message-format.md) e que leva mais tempo para ser processada. Se sua aplicação for muito sensível ao tamanho ou à performance, você poderá optar por não aceitar a confirmação de chave. Mas faça isso somente se for necessário. 

Para obter mais informações sobre a migração para as versões 1.7.*x* e 2.0.*x*, incluindo seus atributos de confirmação de chave, consulte [Migrando seu AWS Encryption SDK](migration.md). Para obter informações técnicas sobre confirmação de chave, consulte [AWS Encryption SDK referência de algoritmos](algorithms-reference.md) e[AWS Encryption SDK referência de formato de mensagem](message-format.md).

## Política de compromisso
<a name="commitment-policy"></a>

Uma *política de compromisso* é uma definição de configuração que determina se a aplicação criptografa e descriptografa com [confirmação de chave](#key-commitment). Criptografar e descriptografar com o confirmação de chave é uma [prática recomendada do AWS Encryption SDK](best-practices.md). 

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 confirmação de chave | Criptografa sem confirmação de chave | Descriptografa com confirmação de chave | Descriptografa sem confirmação de chave | 
| --- | --- | --- | --- | --- | 
| ForbidEncryptAllowDecrypt | ![\[Red circle with white X inside, indicating prohibition or cancellation.\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/icon-no.png)  | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/icon-yes.png)  | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/icon-yes.png) | 
| RequireEncryptAllowDecrypt | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Red circle with white X inside, indicating prohibition or cancellation.\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/icon-no.png) | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/icon-yes.png) | 
| RequireEncryptRequireDecrypt | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Red circle with white X inside, indicating prohibition or cancellation.\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/icon-no.png) | ![\[Green checkmark icon indicating approval or confirmation.\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/icon-yes.png) | ![\[Red circle with white X inside, indicating prohibition or cancellation.\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/images/icon-no.png) | 

A configuração da política de compromisso foi introduzida na AWS Encryption SDK versão 1.7. *x.* Ela é válida em todas as [linguagens de programação](programming-languages.md) suportadas.
+ O `ForbidEncryptAllowDecrypt` descriptografa com ou sem confirmação de chave, mas não criptografa com confirmação de chave. Esse valor, introduzido na versão 1.7. *x*, foi projetado para preparar todos os hosts que executam seu aplicativo para decifrar com comprometimento de chave antes mesmo de encontrarem um texto cifrado criptografado com comprometimento de chave. 
+ O `RequireEncryptAllowDecrypt` sempre criptografa com confirmação de chave. Ele pode descriptografar textos cifrados criptografados com ou sem confirmação de chave. Este valor, introduzido na versão 2.0.*x*, permite que você comece a criptografar com confirmação de chave, mas ainda descriptografe textos cifrados herdados sem confirmação de chave.
+ `RequireEncryptRequireDecrypt`: criptografa e descriptografa somente com confirmação de chave. Esse valor é o padrão para a versão 2.0*x*. Use-o valor quando tiver certeza de que todos os seus textos cifrados estão criptografados com a confirmação de chave.

A configuração da política de compromisso determina quais pacotes de algoritmos você pode usar. A partir da versão 1.7. *x*, o pacote de [algoritmos de AWS Encryption SDK](supported-algorithms.md) suporte para comprometimento de chaves; com e sem assinatura. Se você especificar um pacote de algoritmos que entre em conflito com sua política de compromisso, o AWS Encryption SDK retornará um erro. 

Para obter ajuda para definir sua política de compromisso, consulte [Como definir sua política de compromisso](migrate-commitment-policy.md).

## Assinaturas digitais
<a name="digital-sigs"></a>

Ele AWS Encryption SDK criptografa seus dados usando um algoritmo de criptografia autenticado, o AES-GCM, e o processo de decodificação 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, causando uma possível preocupação de segurança. Por exemplo, se você usar um AWS KMS key como chave de encapsulamento, um usuário com `kms:Decrypt` permissões poderá criar textos cifrados criptografados sem ligar. `kms:Encrypt`

Para evitar esse problema, o AWS Encryption SDK suporta a adição de uma assinatura do Algoritmo de Assinatura Digital de Curva Elíptica (ECDSA) ao final das mensagens criptografadas. Quando um conjunto de algoritmos de assinatura é usado, AWS Encryption SDK ele gera uma chave privada temporária e um par de chaves públicas para cada mensagem criptografada. O AWS Encryption SDK armazena a chave pública no contexto de criptografia da chave de dados e descarta a chave privada. Isso garante que ninguém possa criar outra assinatura que seja verificada com a chave pública. O algoritmo vincula a chave pública à chave de dados criptografada como dados adicionais autenticados no cabeçalho da mensagem, impedindo que usuários que só podem descriptografar mensagens alterem a chave pública ou afetem a verificação da assinatura.

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

**nota**  
Se o chaveiro ou o acesso ao material criptográfico da embalagem não delimitarem entre criptografadores e decodificadores, as assinaturas digitais não fornecerão valor criptográfico.

[AWS KMS os chaveiros](use-kms-keyring.md), incluindo o AWS KMS chaveiro RSA assimétrico, podem delinear entre criptografadores e decodificadores com base nas políticas de chaves e nas políticas do IAM. AWS KMS 

Devido à sua natureza criptográfica, os seguintes chaveiros não podem delimitar entre criptografadores e decodificadores:
+ AWS KMS Chaveiro hierárquico
+ AWS KMS Chaveiro ECDH
+ Token de autenticação bruto do AES
+ Token de autenticação bruto do RSA
+ Chaveiro ECDH bruto

# Como AWS Encryption SDK funciona
<a name="how-it-works"></a>

[Os fluxos de trabalho desta seção explicam como AWS Encryption SDK criptografa dados e descriptografa mensagens criptografadas.](concepts.md#message) Esses fluxos de trabalho descrevem o processo básico usando os atributos padrão. Para obter detalhes sobre como definir e usar componentes personalizados, consulte o GitHub repositório de cada [implementação de linguagem](programming-languages.md) compatível.

O AWS Encryption SDK usa criptografia de envelope para proteger seus dados. Cada mensagem é criptografada em uma chave de dados exclusiva. Em seguida, a chave de dados é criptografada pelas chaves de encapsulamento que você especificar. Para descriptografar a mensagem criptografada, ele AWS Encryption SDK usa as chaves de encapsulamento que você especifica para descriptografar pelo menos uma chave de dados criptografada. Em seguida, ele pode descriptografar o texto cifrado e retornar uma mensagem de texto simples.

Precisa de ajuda com a terminologia que usamos no AWS Encryption SDK? Consulte [Conceitos no AWS Encryption SDK](concepts.md).

## Como o AWS Encryption SDK criptografa os dados
<a name="encrypt-workflow"></a>

 AWS Encryption SDK Ele fornece métodos que criptografam cadeias de caracteres, matrizes de bytes e fluxos de bytes. Para obter exemplos de código, consulte o tópico Exemplos em cada seção de [Linguagens de programação](programming-languages.md).

1. Crie um [token de autenticação](choose-keyring.md) (ou um [provedor de chave mestra](concepts.md#master-key-provider)) que especifique as chaves de agrupamento que protegem seus dados.

1. Transmita o chaveiro e os dados do texto simples para um método de criptografia. Recomendamos transmitir um [contexto de criptografia](concepts.md#encryption-context) opcional, não secreto.

1. O método de criptografia solicita materiais de criptografia ao token de autenticação. O chaveiro retorna chaves de criptografia de dados exclusivas para a mensagem: uma chave de dados em texto simples e uma cópia dessa chave de dados criptografada por cada uma das chaves de encapsulamento especificadas.

1. O método de criptografia usa a chave de dados de texto não criptografado para criptografar os dados e, em seguida, descarta a chave de dados de texto não criptografado. Se você fornecer um contexto de criptografia (uma [prática recomendada](best-practices.md) do AWS Encryption SDK ), o método de criptografia também vinculará de forma criptográfica o contexto de criptografia aos dados criptografados.

1. O método de criptografia retorna uma [mensagem criptografada](concepts.md#message) que contém os dados criptografados, as chaves de dados criptografadas e outros metadados, incluindo o contexto de criptografia, se você o usou.

## Como o AWS Encryption SDK decifra uma mensagem criptografada
<a name="decrypt-workflow"></a>

 AWS Encryption SDK Fornece métodos que decifram a [mensagem criptografada](concepts.md#message) e retornam texto sem formatação. Para obter exemplos de código, consulte o tópico Exemplos em cada seção de [Linguagens de programação](programming-languages.md).

O [token de autenticação](choose-keyring.md) (ou o [provedor de chave mestra](concepts.md#master-key-provider)) que descriptografará a mensagem criptografada deve ser compatível com aquele usado para criptografar a mensagem. Uma das chaves de encapsulamento dele deve ser capaz descriptografar uma chave de dados criptografada na mensagem criptografada. Para obter informações sobre compatibilidade com tokens de autenticação e provedores de chaves mestra, consulte [Compatibilidade dos tokens de autenticação](choose-keyring.md#keyring-compatibility).

1. Crie um token de autenticação ou provedor de chave mestra com chaves de encapsulamento que possam descriptografar seus dados. É possível usar o mesmo token de autenticação fornecido para o método de criptografia ou um token diferente.

1. Transmita a [mensagem criptografada](concepts.md#message) e o token de autenticação para um método de descriptografia.

1. O método de descriptografia solicita que o token de autenticação ou o provedor de chave mestra descriptografe uma das chaves de dados criptografadas na mensagem criptografada. Ele passa informações da mensagem criptografada, incluindo as chaves de dados criptografadas.

1. O token de autenticação usa suas chaves de empacotamento para descriptografar uma das chaves de dados criptografadas. A resposta incluirá a chave de dados em texto simples, se for bem-sucedida. Caso nenhuma das chaves de encapsulamento especificadas pelo token de autenticação ou provedor da chave mestra possa descriptografar uma chave de dados criptografada, a chamada de descriptografia falhará.

1. O método de descriptografia usa a chave de dados de texto simples para descriptografar os dados, descarta a chave de dados de texto simples e retorna os dados de texto simples.

# Suítes de algoritmos compatíveis no AWS Encryption SDK
<a name="supported-algorithms"></a>

Um *pacote de algoritmos* é uma coleção de algoritmos criptográficos e de valores relacionados. Os sistemas de criptografia usam a implementação do algoritmo para gerar a mensagem de texto cifrado.

O conjunto de algoritmos usa o AWS Encryption SDK algoritmo Advanced Encryption Standard (AES) em Galois/Counter Modo (GCM), conhecido como AES-GCM, para criptografar dados brutos. O AWS Encryption SDK suporta chaves de criptografia de 256 bits, 192 bits e 128 bits. O tamanho do vetor de inicialização (IV) é sempre 12 bytes. O tamanho da tag de autenticação é sempre 16 bytes.

Por padrão, o AWS Encryption SDK usa um conjunto de algoritmos com AES-GCM com uma função de derivação de extract-and-expand chave ([HKDF) baseada em HMAC](https://en.wikipedia.org/wiki/HKDF), assinatura e uma chave de criptografia de 256 bits. Se a [política de compromisso](concepts.md#commitment-policy) exigir [comprometimento de chave](concepts.md#key-commitment), ela AWS Encryption SDK seleciona um conjunto de algoritmos que também oferece suporte ao comprometimento de chave; caso contrário, seleciona um conjunto de algoritmos com derivação e assinatura de chaves, mas não com compromisso de chave.

## Recomendado: AES-GCM com derivação de chave, assinatura e confirmação de chave
<a name="recommended-algorithms"></a>

Ele AWS Encryption SDK recomenda um conjunto de algoritmos que deriva uma chave de criptografia AES-GCM fornecendo uma chave de criptografia de dados de 256 bits para a função de derivação de chave (HKDF) baseada em HMAC. extract-and-expand AWS Encryption SDK Isso adiciona uma assinatura do Algoritmo de Assinatura Digital de Curva Elíptica (ECDSA). Para oferecer suporte ao [comprometimento da chave](concepts.md#key-commitment), esse pacote de algoritmos também deriva uma sequência de *caracteres de comprometimento da chave*, um identificador de chave de dados não secreto, que é armazenado nos metadados da mensagem criptografada. Essa sequência de comprometimento da chave também é derivada por meio do HKDF usando um procedimento semelhante à derivação da chave de criptografia de dados.


**AWS Encryption SDK Suíte de algoritmos**  

| Algoritmo de criptografia | Tamanho da chave de criptografia de dados (em bits) | Algoritmo de derivação de chave | Algoritmo de assinatura | Confirmação de chave | 
| --- | --- | --- | --- | --- | 
| AES-GCM | 256 | HKDF com SHA-384 | ECDSA com P-384 e SHA-384 | HKDF com SHA-512 | 

A HKDF ajuda a evitar a reutilização acidental de uma chave de criptografia de dados e reduz o risco de sobreuso de chaves de dados. 

Para assinatura, esse pacote de algoritmos usa ECDSA com um algoritmo de função hash criptográfica (SHA-384). O ECDSA é usado por padrão, mesmo quando ele não é especificado pela política da chave mestra subjacente. A [assinatura da mensagem](concepts.md#digital-sigs) verifica se o remetente foi autorizado a criptografar mensagens e fornece o não repúdio. Isso é especialmente útil quando a política de autorização de uma chave mestra permite que um conjunto de usuários criptografe dados e outro conjunto de usuários descriptografe os dados. 

Conuuntos de algoritmos com confirmação de chave garantem que cada texto cifrado seja descriptografado em apenas um texto simples. Eles fazem isso validando a chave de dados usada como entrada para o algoritmo de criptografia. Ao criptografar, esses conjuntos de algoritmos derivam um HMAC de comprometimento fundamental. Antes de descriptografar, eles validam que a chave de dados corresponde à sequência de conformação da chave. Caso contrário, a chamada de descriptografia falhará.

## Outros pacotes de algoritmos compatíveis
<a name="other-algorithms"></a>

O AWS Encryption SDK suporta os seguintes conjuntos de algoritmos alternativos para compatibilidade com versões anteriores. Em geral, não recomendamos esses pacotes de algoritmos. No entanto, reconhecemos que a assinatura pode prejudicar significativamente a performance, por isso oferecemos um pacote de confirmação de chaves com derivação de chaves para esses casos. Para aplicações que precisam fazer concessões de performance mais significativas, continuamos oferecendo pacotes que não possuem assinatura, confirmação de chaves e derivação de chaves.

**AES-GCM sem confirmação de chave**  
Os conjuntos de algoritmos sem confirmação de chave não validam a chave de dados antes da descriptografia. Como resultado, esses conjuntos de algoritmos podem descriptografar um único texto cifrado em diferentes mensagens de texto simples. No entanto, como os pacotes de algoritmos com confirmação de chave produzem uma [mensagem criptografada um pouco maior (\$130 bytes)](message-format.md) e demoram mais para serem processados, eles podem não ser a melhor opção para cada aplicação.   
O AWS Encryption SDK suporta um conjunto de algoritmos com derivação de chave, compromisso de chave, assinatura e outro com derivação de chave e compromisso de chave, mas não assinatura. Não recomendamos usar um pacote de algoritmos sem confirmação de chave. Se necessário, recomendamos um pacote de algoritmos com derivação e confirmação de chaves, mas sem assinatura. No entanto, se o perfil de performance da aplicação for compatível com o uso de um pacote de algoritmos, usar um pacote de algoritmos com confirmação de chaves, derivação de chaves e assinatura é uma prática recomendada.

**AES-GCM sem assinatura**  
Os conjuntos de algoritmos sem assinatura carecem da assinatura ECDSA, que fornece autenticidade e não repúdio. Use esse conjunto apenas quando os usuários que criptografam dados e os que os descriptografam são igualmente confiáveis.   
Ao usar um pacote de algoritmos sem assinatura, recomendamos escolher um com derivação e confirmação de chave. 

**AES-GCM sem derivação de chaves**  
Pacotes de algoritmos sem derivação usam a criptografia de dados como a chave de criptografia do AES-GCM, em vez de usar uma função de derivação de chaves para derivar uma chave exclusiva. Nós desencorajamos o uso dessa suíte para gerar texto cifrado, mas ela é AWS Encryption SDK compatível por motivos de compatibilidade.

Para obter mais informações sobre como esses pacotes são representados e usados na biblioteca, consulte [AWS Encryption SDK referência de algoritmos](algorithms-reference.md).