

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 Encryption SDK referência
<a name="reference"></a>


|  | 
| --- |
|  As informações nesta página são uma referência para criar sua própria biblioteca de criptografia compatível com o AWS Encryption SDK. Se você não estiver criando sua própria biblioteca de criptografia compatível, provavelmente não precisará dessas informações. Para usar o AWS Encryption SDK em uma das linguagens de programação suportadas, consulte[Linguagens de programação](programming-languages.md). Para a especificação que define os elementos de uma AWS Encryption SDK implementação adequada, consulte a [AWS Encryption SDK Especificação](https://github.com/awslabs/aws-encryption-sdk-specification/) em GitHub.  | 

O AWS Encryption SDK usa os [algoritmos compatíveis](supported-algorithms.md) para retornar uma única estrutura de dados ou *mensagem* que contém dados criptografados e as chaves de dados criptografadas correspondentes. Os tópicos a seguir explicam os algoritmos e a estrutura de dados. Use essas informações para criar bibliotecas que podem ler e gravar textos cifrados compatíveis com este SDK.

**Topics**
+ [Referência do formato de mensagens](message-format.md)
+ [Exemplos de formatos de mensagens](message-format-examples.md)
+ [Referência de AAD de corpo](body-aad-reference.md)
+ [Referência de algoritmos](algorithms-reference.md)
+ [Referência do vetor de inicialização](IV-reference.md)
+ [

# AWS KMS Detalhes técnicos do chaveiro hierárquico
](hierarchical-keyring-details.md)

# AWS Encryption SDK referência de formato de mensagem
<a name="message-format"></a>


|  | 
| --- |
|  As informações nesta página são uma referência para criar sua própria biblioteca de criptografia compatível com o AWS Encryption SDK. Se você não estiver criando sua própria biblioteca de criptografia compatível, provavelmente não precisará dessas informações. Para usar o AWS Encryption SDK em uma das linguagens de programação suportadas, consulte[Linguagens de programação](programming-languages.md). Para a especificação que define os elementos de uma AWS Encryption SDK implementação adequada, consulte a [AWS Encryption SDK Especificação](https://github.com/awslabs/aws-encryption-sdk-specification/) em GitHub.  | 

As operações de criptografia AWS Encryption SDK retornam uma única estrutura de dados ou [mensagem criptografada](concepts.md#message) que contém os dados criptografados (texto cifrado) e todas as chaves de dados criptografadas. Para compreender essa estrutura de dados ou para criar bibliotecas que a leem ou gravam nela, você precisa compreender o formato da mensagem.

O formato da mensagem consiste em pelo menos duas partes: um *cabeçalho* e um *corpo*. Em alguns casos, o formato da mensagem consiste em uma terceira parte, um *rodapé*. O formato da mensagem define uma sequência ordenada de bytes em ordem de bytes de rede, também chamado de formato big-endian. O formato da mensagem começa com o cabeçalho, seguido pelo corpo, seguido pelo rodapé (se houver).

Os [pacotes de algoritmos](algorithms-reference.md) suportados pelo AWS Encryption SDK usam uma das duas versões de formato de mensagem. Os pacotes de algoritmos sem [confirmação de chave](concepts.md#key-commitment) usam formato de mensagem versão 1. Os pacotes de algoritmos com confirmação de chave usam formato de mensagem versão 2. 

**Topics**
+ [

## Estrutura do cabeçalho
](#header-structure)
+ [

## Estrutura do corpo
](#body-structure)
+ [

## Estrutura do rodapé
](#footer-structure)

## Estrutura do cabeçalho
<a name="header-structure"></a>

O cabeçalho da mensagem contém a chave de dados criptografada e informações sobre como o corpo da mensagem é formado. A tabela a seguir descreve os campos que formam o cabeçalho nas versões 1 e 2 do formato de mensagem. Os bytes são anexados na ordem mostrada. 

O valor **Não presente** indica que o campo não existe nessa versão do formato de mensagem. O **texto em negrito** indica valores que são diferentes em cada versão.

**nota**  
Talvez seja necessário rolar horizontalmente ou verticalmente para ver todos os dados nessa tabela.


**Estrutura do cabeçalho**  

| Campo | Formato da mensagem versão 1Tamanho (bytes) | Formato da mensagem versão 2Tamanho (bytes) | 
| --- | --- | --- | 
| [Version](#header-version) | 1 | 1 | 
| [Type](#header-type) | 1 | Não está presente | 
| [Algorithm ID](#header-algorithm-id) | 2 | 2 | 
| [Message ID](#header-message-id) | 16 | 32 | 
| [AAD Length](#header-aad-length) | 2Quando o [contexto de criptografia](concepts.md#encryption-context) está vazio, o valor do tamanho do AAD de 2 bytes é 0. | 2Quando o [contexto de criptografia](concepts.md#encryption-context) está vazio, o valor do tamanho do AAD de 2 bytes é 0. | 
| [AAD](#header-aad) | Variável. O tamanho desse campo aparece nos 2 bytes anteriores (campo Tamanho do AAD). Quando o [contexto de criptografia](concepts.md#encryption-context) está vazio, não há um campo AAD no cabeçalho. |  Variável. O tamanho desse campo aparece nos 2 bytes anteriores (campo Tamanho do AAD). Quando o [contexto de criptografia](concepts.md#encryption-context) está vazio, não há um campo AAD no cabeçalho.  | 
| [Encrypted Data Key Count](#header-data-key-count) | 2 | 2 | 
| [Encrypted Data Key(s)](#header-data-keys) | Variável. Determinado pelo número de chaves de dados criptografadas e pelo tamanho de cada uma delas. | Variável. Determinado pelo número de chaves de dados criptografadas e pelo tamanho de cada uma delas. | 
| [Content Type](#header-content-type) | 1 | 1 | 
| [Reserved](#header-reserved) | 4 | Não está presente | 
| [IV Length](#header-iv-length) | 1 | Não está presente | 
| [Frame Length](#header-frame-length) | 4 | 4 | 
| [Algorithm Suite Data](#algorithm-suite-data) | Não está presente | Variável. Determinado pelo [algoritmo](algorithms-reference.md) que gerou a mensagem. | 
| [Header Authentication](#header-authentication) | Variável. Determinado pelo [algoritmo](algorithms-reference.md) que gerou a mensagem. | Variável. Determinado pelo [algoritmo](algorithms-reference.md) que gerou a mensagem. | 

**Versão**  
A versão do formato desta mensagem. A versão é 1 ou 2 codificado como o byte `01` ou `02` em notação hexadecimal

**Tipo**  
O tipo deste formato de mensagem. O tipo indica o tipo da estrutura. O único tipo suportado é descrito como *dados criptografados e autenticados pelo cliente*. Seu valor de tipo é 128 bytes, codificado como byte `80` em notação hexadecimal.  
Esse campo não está presente na versão 2 do formato de mensagem.

**ID do algoritmo**  
Um identificador para o algoritmo usado. É um valor de 2 bytes interpretado como um inteiro não assinado de 16 bits. Para obter mais informações sobre os algoritmos, consulte [AWS Encryption SDK referência de algoritmos](algorithms-reference.md).

**ID da mensagem**  
Um valor gerado aleatoriamente que identifica a mensagem. O ID da mensagem:  
+ Identifica exclusivamente a mensagem criptografada.
+ Associa levemente o cabeçalho da mensagem ao corpo da mensagem.
+ Fornece um mecanismo para reutilizar uma chave de dados com segurança com várias mensagens criptografadas.
+ Protege contra a reutilização acidental de uma chave de dados ou contra o desgaste de chaves no AWS Encryption SDK.
Esse valor é de 128 bits no formato de mensagem versão 1 e 256 bits na versão 2.

**Comprimento do AAD**  
O tamanho dos dados autenticados adicionais (AAD). É um valor de 2 bytes interpretado como um número inteiro não assinado de 16 bits que especifica o número de bytes que contém o AAD.  
Quando o [contexto de criptografia](concepts.md#encryption-context) está vazio, o valor do campo de tamanho do AAD é 0.

**AAD**  
Os dados autenticados adicionais. O AAD é uma codificação do [contexto de criptografia](concepts.md#encryption-context), uma matriz de pares de chave-valor onde cada chave e o valor é uma string de caracteres codificados em UTF-8. O contexto de criptografia é convertido em uma sequência de bytes e usado para o valor do AAD. Quando o contexto de criptografia está vazio, não há um campo AAD no cabeçalho.  
Quando os [algoritmos com assinatura](algorithms-reference.md) são usados, o contexto de criptografia deve conter o par de chave-valor `{'aws-crypto-public-key', Qtxt}`. Qtxt representa o ponto Q compactado da curva elíptica de acordo com o [SEC 1 versão 2.0](http://www.secg.org/sec1-v2.pdf) e, em seguida, codificado em base64. O contexto de criptografia pode conter valores adicionais, mas o tamanho máximo do construído AAD é 2^16 - 1 bytes.  
A tabela a seguir descreve os campos que formam o AAD. Os pares de chave-valor são classificados, por chave, em ordem crescente de acordo com o código de caracteres UTF-8. Os bytes são anexados na ordem mostrada.    
**Estrutura do AAD**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/message-format.html)  
**Contagem de pares de valores-chave**  
O número de pares chave-valor no AAD. É um valor de 2 bytes interpretado como um número inteiro não assinado de 16 bits que especifica o número de pares de chave-valor no AAD. O número máximo de pares chave-valor no AAD é 2^16 - 1.  
Quando não houver um contexto de criptografia ou o contexto de criptografia estiver vazio, esse campo não estará presente na estrutura do AAD.  
**Comprimento da chave**  
O tamanho da chave do par de chave-valor. É um valor de 2 bytes interpretado como um número inteiro não assinado de 16 bits que especifica o número de bytes que contém a chave.  
**Chave**  
A chave do par de chave-valor. É uma sequência de bytes codificados em UTF-8.  
**Comprimento do valor**  
O tamanho do valor do par de chave-valor. É um valor de 2 bytes interpretado como um número inteiro não assinado de 16 bits que especifica o número de bytes que contém o valor.  
**Valor**  
O valor do par de chave-valor. É uma sequência de bytes codificados em UTF-8.

**Contagem de chaves de dados criptografados**  
O número de chaves de dados criptografadas. É um valor de 2 bytes interpretado como um número inteiro não assinado de 16 bits que especifica o número de chaves de dados criptografadas. O número máximo de chaves de dados criptografadas em cada registro é 65.535 (2^16 - 1).

**Chave (s) de dados criptografada**  
Uma sequência de chaves de dados criptografadas. O tamanho da sequência é determinado pelo número de chaves de dados criptografadas e pelo tamanho de cada uma delas. A sequência contém pelo menos uma chave de dados criptografada.  
A tabela a seguir descreve os campos que formam cada chave de dados criptografada. Os bytes são anexados na ordem mostrada.    
**Estrutura da chave de dados criptografada**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/message-format.html)  
**Tamanho do ID do provedor de chaves**  
O tamanho do identificador do provedor de chave. É um valor de 2 bytes interpretado como um número inteiro não assinado de 16 bits que especifica o número de bytes que contém o ID do provedor de chave.  
**ID do provedor de chave**  
O identificador do provedor de chave. É usado para indicar o provedor da chave de dados criptografada e deve ser extensível.  
**Tamanho das informações do principal provedor**  
O tamanho das informações do provedor de chave. É um valor de 2 bytes interpretado como um número inteiro não assinado de 16 bits que especifica o número de bytes que contém as informações do provedor de chave.  
**Informações sobre os principais fornecedores**  
As informações do provedor de chave. São determinadas pelo provedor de chaves.  
Quando AWS KMS é o provedor da chave mestra ou você está usando um AWS KMS chaveiro, esse valor contém o Amazon Resource Name (ARN) do. AWS KMS key  
**Comprimento da chave de dados criptografados**  
O tamanho da chave de dados criptografada. É um valor de 2 bytes interpretado como um número inteiro não assinado de 16 bits que especifica o número de bytes que contém a chave de dados criptografada.  
**Chave de dados criptografada**  
A chave de dados criptografada. É a chave de criptografia dos dados criptografada pelo provedor de chaves.

**Tipo de conteúdo**  
O tipo de conteúdo criptografado, com moldura ou sem moldura.  
Sempre que possível, use dados com moldura. O AWS Encryption SDK suporta dados não emoldurados somente para uso antigo. Algumas implementações de linguagem do ainda AWS Encryption SDK podem gerar texto cifrado sem moldura. Todas as implementações de linguagem compatíveis podem descriptografar texto cifrado e não emoldurado.
Os dados com moldura são divididos em partes de tamanho igual; cada parte é criptografada separadamente. O conteúdo com moldura é do tipo 2, codificado como o byte `02` em notação hexadecimal.  
Os dados não emoldurados não são divididos; são um único blob criptografado. O conteúdo sem moldura é do tipo 1, codificado como o byte `01` em notação hexadecimal.

**Reservado**  
Uma sequência reservada de 4 bytes. Esse valor deve ser 0. Ele é codificado como os bytes `00 00 00 00` em notação hexadecimal (ou seja, uma sequência de 4 bytes de um valor inteiro de 32 bits igual a 0).  
Esse campo não está presente na versão 2 do formato de mensagem.

**Comprimento IV**  
O tamanho do IV (initialization vector - vetor de inicialização). É um valor de 1 byte interpretado como um número inteiro não assinado de 8 bits que especifica o número de bytes que contém o IV. Esse valor é determinado pelo valor de bytes do IV do [algoritmo](algorithms-reference.md) que gerou a mensagem.  
Este campo não está presente no formato de mensagem versão 2, que somente é compatível com pacotes de algoritmos que usam valores IV determinísticos no cabeçalho da mensagem.

**Comprimento do quadro**  
O tamanho de cada moldura do dado com moldura. É um valor de 4 bytes interpretado como um número inteiro não assinado de 32 bits que especifica o número de bytes que forma cada estrutura. Quando o dado não for com moldura, isto é, quando o valor do campo do `Content Type` campo for 1, esse valor deve ser 0.  
Sempre que possível, use dados com moldura. O AWS Encryption SDK suporta dados não emoldurados somente para uso antigo. Algumas implementações de linguagem do ainda AWS Encryption SDK podem gerar texto cifrado sem moldura. Todas as implementações de linguagem compatíveis podem descriptografar texto cifrado e não emoldurado.

**Dados do pacote de algoritmos**  
Dados suplementares necessários pelo [algoritmo](algorithms-reference.md) que gerou a mensagem. O tamanho e o conteúdo são determinados pelo algoritmo. Seu tamanho pode ser 0.  
Este campo não está presente na versão 1 do formato de mensagem.

**Autenticação de**  
A autenticação do cabeçalho é determinada pelo [algoritmo](algorithms-reference.md) que gerou a mensagem. A autenticação do cabeçalho é calculada sobre o cabeçalho inteiro. Consiste em um IV e uma tag de autenticação. Os bytes são anexados na ordem mostrada.    
**Estrutura da autenticação do cabeçalho**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/message-format.html)  
**IV**  
O vetor de inicialização (IV) usado para calcular a tag de autenticação do cabeçalho.  
Este campo não está presente na versão 2 do formato de mensagem. Este campo não está presente na versão 2 do formato de mensagem, que somente é compatível com pacotes de algoritmos que usam valores IV determinísticos no cabeçalho da mensagem.  
**Tag de autenticação**  
O valor da autenticação do cabeçalho. É usado para autenticar todo o conteúdo do cabeçalho.

## Estrutura do corpo
<a name="body-structure"></a>

O corpo da mensagem contém os dados criptografados, chamados de *texto cifrado*. A estrutura do corpo depende do tipo de conteúdo (sem moldura ou com moldura). As seções a seguir descrevem o formato do corpo da mensagem para cada tipo de conteúdo. A estrutura do corpo da mensagem é a mesma nas versões 1 e 2 do formato de mensagem.

**Topics**
+ [

### Dados sem moldura
](#body-no-framing)
+ [

### Dados com moldura
](#body-framing)

### Dados sem moldura
<a name="body-no-framing"></a>

Os dados sem moldura são criptografados em um único blob com um IV exclusivo e [AAD do corpo](body-aad-reference.md).

**nota**  
Sempre que possível, use dados com moldura. O AWS Encryption SDK suporta dados não emoldurados somente para uso antigo. Algumas implementações de linguagem do ainda AWS Encryption SDK podem gerar texto cifrado sem moldura. Todas as implementações de linguagem compatíveis podem descriptografar texto cifrado e não emoldurado.

A tabela a seguir descreve os campos que formam os dados sem moldura. Os bytes são anexados na ordem mostrada.


**Estrutura de corpo sem moldura**  

| Campo | Tamanho, em bytes | 
| --- | --- | 
| [IV](#body-unframed-iv) | Variável. Igual ao valor especificado no byte do [IV Length](#header-iv-length) do cabeçalho. | 
| [Encrypted Content Length](#body-unframed-content-length) | 8 | 
| [Encrypted Content](#body-unframed-content) | Variável. Igual ao valor especificado nos 8 bytes anteriores (tamanho do conteúdo criptografado). | 
| [Authentication Tag](#body-unframed-tag) | Variável. Determinado pela [implementação do algoritmo](algorithms-reference.md) usado. | 

**IV**  
O vetor de inicialização (IV) para uso com o [algoritmo de criptografia](algorithms-reference.md).

**Tamanho do conteúdo criptografado**  
O tamanho do conteúdo criptografado ou do *texto cifrado*. É um valor de 8 bytes interpretado como um número inteiro não assinado de 64 bits que especifica o número de bytes que contém o conteúdo criptografado.  
Tecnicamente, o valor máximo permitido é 2^63 - 1 ou 8 exbibytes (8 EiB). No entanto, na prática, o valor máximo é 2^36 - 32 ou 64 gibibytes (64 GiB), devido às restrições impostas pelos [algoritmos implementados](algorithms-reference.md).  
A implementação Java deste SDK restringe ainda mais esse valor para 2^31 - 1 ou 2 gibibytes (2 GiB), devido às restrições da linguagem.

**Conteúdo criptografado**  
O conteúdo criptografado (texto cifrado) como retornado pelo [algoritmo de criptografia](algorithms-reference.md).

**Tag de autenticação**  
O valor da autenticação do corpo. É usado para autenticar o corpo da mensagem.

### Dados com moldura
<a name="body-framing"></a>

Em dados com moldura, os dados de texto simples são divididos em partes iguais chamadas *molduras*. O AWS Encryption SDK criptografa cada quadro separadamente com um IV e um [corpo AAD](body-aad-reference.md) exclusivos.

**nota**  
Sempre que possível, use dados com moldura. O AWS Encryption SDK suporta dados não emoldurados somente para uso antigo. Algumas implementações de linguagem do ainda AWS Encryption SDK podem gerar texto cifrado sem moldura. Todas as implementações de linguagem compatíveis podem descriptografar texto cifrado e não emoldurado.

 

O [tamanho da moldura](#header-frame-length), que é o tamanho do [conteúdo criptografado](#body-framed-regular-content) na moldura, pode ser diferente para cada mensagem. O número máximo de bytes em uma moldura é 2^32 - 1. O número máximo de molduras em uma mensagem é 2^32 - 1.

Há dois tipos de moldura: *normal* e *final*. Cada mensagem deve consistir ou incluir uma moldura final. 

Todas as molduras normais em uma mensagem têm o mesmo tamanho de moldura. A moldura final pode ter um tamanho de moldura diferente. 

A composição das molduras em dados com molduras varia de acordo com o tamanho do conteúdo criptografado.
+ **Igual ao tamanho do quadro**: quando o tamanho do conteúdo criptografado é igual ao tamanho do quadro das molduras regulares, a mensagem pode consistir em um quadro normal que contém os dados, seguido por um quadro final de tamanho zero (0). Ou, a mensagem pode consistir apenas em um a moldura que contém os dados. Nesse caso, a moldura final tem o mesmo tamanho de moldura que as molduras normais.
+ **Múltiplo do tamanho do quadro**: quando o tamanho do conteúdo criptografado é um múltiplo exato do tamanho do quadro das molduras regulares, a mensagem pode terminar em um quadro regular que contém os dados, seguido por um quadro final de tamanho zero (0). Ou, a mensagem pode terminar em uma moldura final que contém os dados. Nesse caso, a moldura final tem o mesmo tamanho de moldura que as molduras normais.
+ **Não é múltiplo do tamanho do quadro**: quando o tamanho do conteúdo criptografado não é um múltiplo exato do comprimento do quadro das molduras regulares, o quadro final contém os dados restantes. O tamanho da moldura final é menor que o tamanho das molduras normais. 
+ **Menor que o tamanho do quadro**: quando o tamanho do conteúdo criptografado é menor que o tamanho do quadro das molduras regulares, a mensagem consiste em um quadro final que contém todos os dados. O tamanho da moldura final é menor que o tamanho das molduras normais.

As tabelas a seguir descrevem os campos que formam as molduras. Os bytes são anexados na ordem mostrada.


**Estrutura de corpo com moldura, moldura normal**  

| Campo | Tamanho, em bytes | 
| --- | --- | 
| [Sequence Number](#body-framed-regular-sequence-number) | 4 | 
| [IV](#body-framed-regular-iv) | Variável. Igual ao valor especificado no byte do [IV Length](#header-iv-length) do cabeçalho. | 
| [Encrypted Content](#body-framed-regular-content) | Variável. Igual ao valor especificado no [Frame Length](#header-frame-length) do cabeçalho. | 
| [Authentication Tag](#body-framed-regular-tag) | Variável. Determinada pelo algoritmo usado, conforme especificado no [Algorithm ID](#header-algorithm-id) do cabeçalho. | 

**Número de sequência**  
O número sequencial da moldura. É um número do contador incremental da moldura. É um valor de 4 bytes interpretado como um inteiro não assinado de 32 bits.  
Os dados com moldura devem começar no número sequencial 1. As molduras subsequentes devem estar em ordem e devem conter um incremento de 1 da moldura anterior. Caso contrário, o processo de descriptografia será interrompido e relatará um erro.

**IV**  
O vetor de inicialização (IV) da moldura. O SDK usa um método determinístico para construir um IV diferente para cada moldura na mensagem. O tamanho é especificado pelo [pacote de algoritmos](algorithms-reference.md) usado.

**Conteúdo criptografado**  
O conteúdo criptografado (texto cifrado) da moldura, conforme retornado pelo [algoritmo de criptografia](algorithms-reference.md).

**Tag de autenticação**  
O valor da autenticação da moldura. É usado para autenticar a moldura inteira.


**Estrutura de corpo com moldura, moldura final**  

| Campo | Tamanho, em bytes | 
| --- | --- | 
| [Sequence Number End](#body-framed-final-sequence-number-end) | 4 | 
| [Sequence Number](#body-framed-final-sequence-number) | 4 | 
| [IV](#body-framed-final-iv) | Variável. Igual ao valor especificado no byte do [IV Length](#header-iv-length) do cabeçalho. | 
| [Encrypted Content Length](#body-framed-final-content-length) | 4 | 
| [Encrypted Content](#body-framed-final-content) | Variável. Igual ao valor especificado nos 4 bytes anteriores (tamanho do conteúdo criptografado). | 
| [Authentication Tag](#body-framed-final-tag) | Variável. Determinada pelo algoritmo usado, conforme especificado no [Algorithm ID](#header-algorithm-id) do cabeçalho. | 

**Fim do número de sequência**  
Um indicador para a moldura final. O valor é codificado como 4 bytes `FF FF FF FF` em notação hexadecimal.

**Número de sequência**  
O número sequencial da moldura. É um número do contador incremental da moldura. É um valor de 4 bytes interpretado como um inteiro não assinado de 32 bits.  
Os dados com moldura devem começar no número sequencial 1. As molduras subsequentes devem estar em ordem e devem conter um incremento de 1 da moldura anterior. Caso contrário, o processo de descriptografia será interrompido e relatará um erro.

**IV**  
O vetor de inicialização (IV) da moldura. O SDK usa um método determinístico para construir um IV diferente para cada moldura na mensagem. O tamanho do IV é especificado pelo [pacote de algoritmos](algorithms-reference.md).

**Tamanho do conteúdo criptografado**  
O tamanho do conteúdo criptografado. É um valor de 4 bytes interpretado como um número inteiro não assinado de 32 bits que especifica o número de bytes que contém o conteúdo criptografado da moldura.

**Conteúdo criptografado**  
O conteúdo criptografado (texto cifrado) da moldura, conforme retornado pelo [algoritmo de criptografia](algorithms-reference.md).

**Tag de autenticação**  
O valor da autenticação da moldura. É usado para autenticar a moldura inteira.

## Estrutura do rodapé
<a name="footer-structure"></a>

Quando os [algoritmos com assinatura](algorithms-reference.md) são usados, o formato da mensagem contém um rodapé. O rodapé da mensagem contém uma [assinatura digital](concepts.md#digital-sigs) calculada sobre o cabeçalho e o corpo da mensagem. A tabela a seguir descreve os campos que formam o rodapé. Os bytes são anexados na ordem mostrada. A estrutura do rodapé da mensagem é a mesma nas versões 1 e 2 do formato de mensagem.


**Estrutura do rodapé**  

| Campo | Tamanho, em bytes | 
| --- | --- | 
| [Signature Length](#footer-signature-length) | 2 | 
| [Signature](#footer-signature) | Variável. Igual ao valor especificado nos 2 bytes anteriores (tamanho da assinatura). | 

**Comprimento da assinatura**  
O tamanho da assinatura. É um valor de 2 bytes interpretado como um número inteiro não assinado de 16 bits que especifica o número de bytes que contém a assinatura.

**Assinatura**  
A assinatura.

# AWS Encryption SDK exemplos de formato de mensagem
<a name="message-format-examples"></a>


|  | 
| --- |
|  As informações nesta página são uma referência para criar sua própria biblioteca de criptografia compatível com o AWS Encryption SDK. Se você não estiver criando sua própria biblioteca de criptografia compatível, provavelmente não precisará dessas informações. Para usar o AWS Encryption SDK em uma das linguagens de programação suportadas, consulte[Linguagens de programação](programming-languages.md). Para a especificação que define os elementos de uma AWS Encryption SDK implementação adequada, consulte a [AWS Encryption SDK Especificação](https://github.com/awslabs/aws-encryption-sdk-specification/) em GitHub.  | 

Os tópicos a seguir mostram exemplos do formato da AWS Encryption SDK mensagem. Cada exemplo mostra os bytes brutos, em notação hexadecimal, seguidos por uma descrição do que os bytes representam.

**Topics**
+ [

## Dados emoldurados (formato de mensagem versão 1)
](#example-framed)
+ [

## Dados emoldurados (formato de mensagem versão 2)
](#example-framed-2)
+ [

## Dados não emoldurados (formato de mensagem versão 1)
](#example-nonframed)

## Dados emoldurados (formato de mensagem versão 1)
<a name="example-framed"></a>

O exemplo a seguir mostra o formato da mensagem para dados com moldura na [vesão 1 do formato de mansagem](message-format.md).

```
+--------+
| Header |
+--------+
01                                         Version (1.0)
80                                         Type (128, customer authenticated encrypted data)
0378                                       Algorithm ID (see Referência de algoritmos)
6E7C0FBD 4DF4A999 717C22A2 DDFE1A27        Message ID (random 128-bit value)
008E                                       AAD Length (142)
0004                                       AAD Key-Value Pair Count (4)
0005                                       AAD Key-Value Pair 1, Key Length (5)
30746869 73                                AAD Key-Value Pair 1, Key ("0This")
0002                                       AAD Key-Value Pair 1, Value Length (2)
6973                                       AAD Key-Value Pair 1, Value ("is")
0003                                       AAD Key-Value Pair 2, Key Length (3)
31616E                                     AAD Key-Value Pair 2, Key ("1an")
000A                                       AAD Key-Value Pair 2, Value Length (10)
656E6372 79774690 6F6E                     AAD Key-Value Pair 2, Value ("encryption")
0008                                       AAD Key-Value Pair 3, Key Length (8)
32636F6E 74657874                          AAD Key-Value Pair 3, Key ("2context")
0007                                       AAD Key-Value Pair 3, Value Length (7)
6578616D 706C65                            AAD Key-Value Pair 3, Value ("example")
0015                                       AAD Key-Value Pair 4, Key Length (21)
6177732D 63727970 746F2D70 75626C69        AAD Key-Value Pair 4, Key ("aws-crypto-public-key")
632D6B65 79
0044                                       AAD Key-Value Pair 4, Value Length (68)
416A4173 7569326F 7430364C 4B77715A        AAD Key-Value Pair 4, Value ("AjAsui2ot06LKwqZXDJnU/Aqc2vD+0OkpOZ1cc8Tg2qd7rs5aLTg7lvfUEW/86+/5w==")
58444A6E 552F4171 63327644 2B304F6B
704F5A31 63633854 67327164 37727335
614C5467 376C7666 5545572F 38362B2F
35773D3D
0002                                       EncryptedDataKeyCount (2)
0007                                       Encrypted Data Key 1, Key Provider ID Length (7)
6177732D 6B6D73                            Encrypted Data Key 1, Key Provider ID ("aws-kms")
004B                                       Encrypted Data Key 1, Key Provider Information Length (75)
61726E3A 6177733A 6B6D733A 75732D77        Encrypted Data Key 1, Key Provider Information ("arn:aws:kms:us-west-2:111122223333:key/715c0818-5825-4245-a755-138a6d9a11e6")
6573742D 323A3131 31313232 32323333
33333A6B 65792F37 31356330 3831382D
35383235 2D343234 352D6137 35352D31
33386136 64396131 316536
00A7                                       Encrypted Data Key 1, Encrypted Data Key Length (167)
01010200 7857A1C1 F7370545 4ECA7C83        Encrypted Data Key 1, Encrypted Data Key
956C4702 23DCE8D7 16C59679 973E3CED
02A4EF29 7F000000 7E307C06 092A8648
86F70D01 0706A06F 306D0201 00306806
092A8648 86F70D01 0701301E 06096086
48016503 04012E30 11040C3F F02C897B
7A12EB19 8BF2D802 0110803B 24003D1F
A5474FBC 392360B5 CB9997E0 6A17DE4C
A6BD7332 6BF86DAB 60D8CCB8 8295DBE9
4707E356 ADA3735A 7C52D778 B3135A47
9F224BF9 E67E87
0007                                       Encrypted Data Key 2, Key Provider ID Length (7)
6177732D 6B6D73                            Encrypted Data Key 2, Key Provider ID ("aws-kms")
004E                                       Encrypted Data Key 2, Key Provider Information Length (78)
61726E3A 6177733A 6B6D733A 63612D63        Encrypted Data Key 2, Key Provider Information ("arn:aws:kms:ca-central-1:111122223333:key/9b13ca4b-afcc-46a8-aa47-be3435b423ff")
656E7472 616C2D31 3A313131 31323232
32333333 333A6B65 792F3962 31336361
34622D61 6663632D 34366138 2D616134
372D6265 33343335 62343233 6666
00A7                                       Encrypted Data Key 2, Encrypted Data Key Length (167)
01010200 78FAFFFB D6DE06AF AC72F79B        Encrypted Data Key 2, Encrypted Data Key
0E57BD87 3F60F4E6 FD196144 5A002C94
AF787150 69000000 7E307C06 092A8648
86F70D01 0706A06F 306D0201 00306806
092A8648 86F70D01 0701301E 06096086
48016503 04012E30 11040C36 CD985E12
D218B674 5BBC6102 0110803B 0320E3CD
E470AA27 DEAB660B 3E0CE8E0 8B1A89E4
57DCC69B AAB1294F 21202C01 9A50D323
72EBAAFD E24E3ED8 7168E0FA DB40508F
556FBD58 9E621C
02                                         Content Type (2, framed data)
00000000                                   Reserved
0C                                         IV Length (12)
00000100                                   Frame Length (256)
4ECBD5C0 9899CA65 923D2347                 IV
0B896144 0CA27950 CA571201 4DA58029        Authentication Tag
+------+
| Body |
+------+
00000001                                   Frame 1, Sequence Number (1)
6BD3FE9C ADBCB213 5B89E8F1                 Frame 1, IV
1F6471E0 A51AF310 10FA9EF6 F0C76EDF        Frame 1, Encrypted Content
F5AFA33C 7D2E8C6C 9C5D5175 A212AF8E
FBD9A0C3 C6E3FB59 C125DBF2 89AC7939
BDEE43A8 0F00F49E ACBBD8B2 1C785089
A90DB923 699A1495 C3B31B50 0A48A830
201E3AD9 1EA6DA14 7F6496DB 6BC104A4
DEB7F372 375ECB28 9BF84B6D 2863889F
CB80A167 9C361C4B 5EC07438 7A4822B4
A7D9D2CC 5150D414 AF75F509 FCE118BD
6D1E798B AEBA4CDB AD009E5F 1A571B77
0041BC78 3E5F2F41 8AF157FD 461E959A
BB732F27 D83DC36D CC9EBC05 00D87803
57F2BB80 066971C2 DEEA062F 4F36255D
E866C042 E1382369 12E9926B BA40E2FC
A820055F FB47E428 41876F14 3B6261D9
5262DB34 59F5D37E 76E46522 E8213640
04EE3CC5 379732B5 F56751FA 8E5F26AD        Frame 1, Authentication Tag
00000002                                   Frame 2, Sequence Number (2)
F1140984 FF25F943 959BE514                 Frame 2, IV
216C7C6A 2234F395 F0D2D9B9 304670BF        Frame 2, Encrypted Content
A1042608 8A8BCB3F B58CF384 D72EC004
A41455B4 9A78BAC9 36E54E68 2709B7BD
A884C1E1 705FF696 E540D297 446A8285
23DFEE28 E74B225A 732F2C0C 27C6BDA2
7597C901 65EF3502 546575D4 6D5EBF22
1FF787AB 2E38FD77 125D129C 43D44B96
778D7CEE 3C36625F FF3A985C 76F7D320
ED70B1F3 79729B47 E7D9B5FC 02FCE9F5
C8760D55 7779520A 81D54F9B EC45219D
95941F7E 5CBAEAC8 CEC13B62 1464757D
AC65B6EF 08262D74 44670624 A3657F7F
2A57F1FD E7060503 AC37E197 2F297A84
DF1172C2 FA63CF54 E6E2B9B6 A86F582B
3B16F868 1BBC5E4D 0B6919B3 08D5ABCF
FECDC4A4 8577F08B 99D766A1 E5545670
A61F0A3B A3E45A84 4D151493 63ECA38F        Frame 2, Authentication Tag
FFFFFFFF                                   Final Frame, Sequence Number End
00000003                                   Final Frame, Sequence Number (3)
35F74F11 25410F01 DD9E04BF                 Final Frame, IV
0000008E                                   Final Frame, Encrypted Content Length (142)
F7A53D37 2F467237 6FBD0B57 D1DFE830        Final Frame, Encrypted Content
B965AD1F A910AA5F 5EFFFFF4 BC7D431C
BA9FA7C4 B25AF82E 64A04E3A A0915526
88859500 7096FABB 3ACAD32A 75CFED0C
4A4E52A3 8E41484D 270B7A0F ED61810C
3A043180 DF25E5C5 3676E449 0986557F
C051AD55 A437F6BC 139E9E55 6199FD60
6ADC017D BA41CDA4 C9F17A83 3823F9EC
B66B6A5A 80FDB433 8A48D6A4 21CB
811234FD 8D589683 51F6F39A 040B3E3B        Final Frame, Authentication Tag
+--------+
| Footer |
+--------+
0066                                       Signature Length (102)
30640230 085C1D3C 63424E15 B2244448        Signature
639AED00 F7624854 F8CF2203 D7198A28
758B309F 5EFD9D5D 2E07AD0B 467B8317
5208B133 02301DF7 2DFC877A 66838028
3C6A7D5E 4F8B894E 83D98E7C E350F424
7E06808D 0FE79002 E24422B9 98A0D130
A13762FF 844D
```

## Dados emoldurados (formato de mensagem versão 2)
<a name="example-framed-2"></a>

O exemplo a seguir mostra o formato da mensagem para dados com moldura na [versão 2 do formato de mensagem](message-format.md).

```
+--------+
| Header |
+--------+
02                                         Version (2.0)
0578                                       Algorithm ID (see Algorithms reference)
122747eb 21dfe39b 38631c61 7fad7340
cc621a30 32a11cc3 216d0204 fd148459        Message ID (random 256-bit value)
008e                                       AAD Length (142)
0004                                       AAD Key-Value Pair Count (4)
0005                                       AAD Key-Value Pair 1, Key Length (5)
30546869 73                                AAD Key-Value Pair 1, Key ("0This")
0002                                       AAD Key-Value Pair 1, Value Length (2)
6973                                       AAD Key-Value Pair 1, Value ("is")
0003                                       AAD Key-Value Pair 2, Key Length (3)
31616e                                     AAD Key-Value Pair 2, Key ("1an")
000a                                       AAD Key-Value Pair 2, Value Length (10)
656e6372 79707469 6f6e                     AAD Key-Value Pair 2, Value ("encryption")
0008                                       AAD Key-Value Pair 3, Key Length (8)
32636f6e 74657874                          AAD Key-Value Pair 3, Key ("2context")
0007                                       AAD Key-Value Pair 3, Value Length (7)
6578616d 706c65                            AAD Key-Value Pair 3, Value ("example")
0015                                       AAD Key-Value Pair 4, Key Length (21)
6177732d 63727970 746f2d70 75626c69        AAD Key-Value Pair 4, Key ("aws-crypto-public-key")
632d6b65 79
0044                                       AAD Key-Value Pair 4, Value Length (68)
41746733 72703845 41345161 36706669        AAD Key-Value Pair 4, Value ("QXRnM3JwOEVBNFFhNnBmaTk3MUlTNTk3NHpOMnlZWE5vSmtwRHFPc0dIYkVaVDRqME5OMlFkRStmbTFVY01WdThnPT0=")
39373149 53353937 347a4e32 7959584e
6f4a6b70 44714f73 47486245 5a54346a
304e4e32 5164452b 666d3155 634d5675
38673d3d
0001                                       Encrypted Data Key Count (1)
0007                                       Encrypted Data Key 1, Key Provider ID Length (7)
6177732d 6b6d73                            Encrypted Data Key 1, Key Provider ID ("aws-kms")
004b                                       Encrypted Data Key 1, Key Provider Information Length (75)
61726e3a 6177733a 6b6d733a 75732d77        Encrypted Data Key 1, Key Provider Information ("arn:aws:kms:us-west-2:658956600833:key/b3537ef1-d8dc-4780-9f5a-55776cbb2f7f")
6573742d 323a3635 38393536 36303038
33333a6b 65792f62 33353337 6566312d
64386463 2d343738 302d3966 35612d35
35373736 63626232 663766
00a7                                       Encrypted Data Key 1, Encrypted Data Key Length (167)
01010100 7840f38c 275e3109 7416c107        Encrypted Data Key 1, Encrypted Data Key
29515057 1964ada3 ef1c21e9 4c8ba0bd
bc9d0fb4 14000000 7e307c06 092a8648
86f70d01 0706a06f 306d0201 00306806
092a8648 86f70d01 0701301e 06096086
48016503 04012e30 11040c39 32d75294
06063803 f8460802 0110803b 2a46bc23
413196d2 903bf1d7 3ed98fc8 a94ac6ed
e00ee216 74ec1349 12777577 7fa052a5
ba62e9e4 f2ac8df6 bcb1758f 2ce0fb21
cc9ee5c9 7203bb
02                                         Content Type (2, framed data)
00001000                                   Frame Length (4096)
05cd035b 29d5499d 4587570b 87502afe        Algorithm Suite Data (key commitment)
634f7b2c c3df2aa9 88a10105 4a2c7687 
76cb339f 2536741f 59a1c202 4f2594ab        Authentication Tag
+------+
| Body |
+------+
ffffffff                                   Final Frame, Sequence Number End
00000001                                   Final Frame, Sequence Number (1)
00000000 00000000 00000001                 Final Frame, IV
00000009                                   Final Frame, Encrypted Content Length (9)
fa6e39c6 02927399 3e                       Final Frame, Encrypted Content
f683a564 405d68db eeb0656c d57c9eb0        Final Frame, Authentication Tag
+--------+
| Footer |
+--------+
0067                                       Signature Length (103)
30650230 2a1647ad 98867925 c1712e8f        Signature 
ade70b3f 2a2bc3b8 50eb91ef 56cfdd18 
967d91d8 42d92baf 357bba48 f636c7a0
869cade2 023100aa ae12d08f 8a0afe85
e5054803 110c9ed8 11b2e08a c4a052a9
074217ea 3b01b660 534ac921 bf091d12
3657e2b0 9368bd
```

## Dados não emoldurados (formato de mensagem versão 1)
<a name="example-nonframed"></a>

O exemplo a seguir mostra o formato da mensagem para dados sem moldura.

**nota**  
Sempre que possível, use dados com moldura. O AWS Encryption SDK suporta dados não emoldurados somente para uso antigo. Algumas implementações de linguagem do ainda AWS Encryption SDK podem gerar texto cifrado sem moldura. Todas as implementações de linguagem compatíveis podem descriptografar texto cifrado e não emoldurado.

```
+--------+
| Header |
+--------+
01                                         Version (1.0)
80                                         Type (128, customer authenticated encrypted data)
0378                                       Algorithm ID (see Referência de algoritmos)
B8929B01 753D4A45 C0217F39 404F70FF        Message ID (random 128-bit value)
008E                                       AAD Length (142)
0004                                       AAD Key-Value Pair Count (4)
0005                                       AAD Key-Value Pair 1, Key Length (5)
30746869 73                                AAD Key-Value Pair 1, Key ("0This")
0002                                       AAD Key-Value Pair 1, Value Length (2)
6973                                       AAD Key-Value Pair 1, Value ("is")
0003                                       AAD Key-Value Pair 2, Key Length (3)
31616E                                     AAD Key-Value Pair 2, Key ("1an")
000A                                       AAD Key-Value Pair 2, Value Length (10)
656E6372 79774690 6F6E                     AAD Key-Value Pair 2, Value ("encryption")
0008                                       AAD Key-Value Pair 3, Key Length (8)
32636F6E 74657874                          AAD Key-Value Pair 3, Key ("2context")
0007                                       AAD Key-Value Pair 3, Value Length (7)
6578616D 706C65                            AAD Key-Value Pair 3, Value ("example")
0015                                       AAD Key-Value Pair 4, Key Length (21)
6177732D 63727970 746F2D70 75626C69        AAD Key-Value Pair 4, Key ("aws-crypto-public-key")
632D6B65 79
0044                                       AAD Key-Value Pair 4, Value Length (68)
41734738 67473949 6E4C5075 3136594B        AAD Key-Value Pair 4, Value ("AsG8gG9InLPu16YKlqXTOD+nykG8YqHAhqecj8aXfD2e5B4gtVE73dZkyClA+rAMOQ==")
6C715854 4F442B6E 796B4738 59714841
68716563 6A386158 66443265 35423467
74564537 33645A6B 79436C41 2B72414D
4F513D3D
0002                                       Encrypted Data Key Count (2)
0007                                       Encrypted Data Key 1, Key Provider ID Length (7)
6177732D 6B6D73                            Encrypted Data Key 1, Key Provider ID ("aws-kms")
004B                                       Encrypted Data Key 1, Key Provider Information Length (75)
61726E3A 6177733A 6B6D733A 75732D77        Encrypted Data Key 1, Key Provider Information ("arn:aws:kms:us-west-2:111122223333:key/715c0818-5825-4245-a755-138a6d9a11e6")
6573742D 323A3131 31313232 32323333
33333A6B 65792F37 31356330 3831382D
35383235 2D343234 352D6137 35352D31
33386136 64396131 316536
00A7                                       Encrypted Data Key 1, Encrypted Data Key Length (167)
01010200 7857A1C1 F7370545 4ECA7C83        Encrypted Data Key 1, Encrypted Data Key
956C4702 23DCE8D7 16C59679 973E3CED
02A4EF29 7F000000 7E307C06 092A8648
86F70D01 0706A06F 306D0201 00306806
092A8648 86F70D01 0701301E 06096086
48016503 04012E30 11040C28 4116449A
0F2A0383 659EF802 0110803B B23A8133
3A33605C 48840656 C38BCB1F 9CCE7369
E9A33EBE 33F46461 0591FECA 947262F3
418E1151 21311A75 E575ECC5 61A286E0
3E2DEBD5 CB005D
0007                                       Encrypted Data Key 2, Key Provider ID Length (7)
6177732D 6B6D73                            Encrypted Data Key 2, Key Provider ID ("aws-kms")
004E                                       Encrypted Data Key 2, Key Provider Information Length (78)
61726E3A 6177733A 6B6D733A 63612D63        Encrypted Data Key 2, Key Provider Information ("arn:aws:kms:ca-central-1:111122223333:key/9b13ca4b-afcc-46a8-aa47-be3435b423ff")
656E7472 616C2D31 3A313131 31323232
32333333 333A6B65 792F3962 31336361
34622D61 6663632D 34366138 2D616134
372D6265 33343335 62343233 6666
00A7                                       Encrypted Data Key 2, Encrypted Data Key Length (167)
01010200 78FAFFFB D6DE06AF AC72F79B        Encrypted Data Key 2, Encrypted Data Key
0E57BD87 3F60F4E6 FD196144 5A002C94
AF787150 69000000 7E307C06 092A8648
86F70D01 0706A06F 306D0201 00306806
092A8648 86F70D01 0701301E 06096086
48016503 04012E30 11040CB2 A820D0CC
76616EF2 A6B30D02 0110803B 8073D0F1
FDD01BD9 B0979082 099FDBFC F7B13548
3CC686D7 F3CF7C7A CCC52639 122A1495
71F18A46 80E2C43F A34C0E58 11D05114
2A363C2A E11397
01                                         Content Type (1, nonframed data)
00000000                                   Reserved
0C                                         IV Length (12)
00000000                                   Frame Length (0, nonframed data)
734C1BBE 032F7025 84CDA9D0                 IV
2C82BB23 4CBF4AAB 8F5C6002 622E886C        Authentication Tag
+------+
| Body |
+------+
D39DD3E5 915E0201 77A4AB11                 IV
00000000 0000028E                          Encrypted Content Length (654)
E8B6F955 B5F22FE4 FD890224 4E1D5155        Encrypted Content
5871BA4C 93F78436 1085E4F8 D61ECE28
59455BD8 D76479DF C28D2E0B BDB3D5D3
E4159DFE C8A944B6 685643FC EA24122B
6766ECD5 E3F54653 DF205D30 0081D2D8
55FCDA5B 9F5318BC F4265B06 2FE7C741
C7D75BCC 10F05EA5 0E2F2F40 47A60344
ECE10AA7 559AF633 9DE2C21B 12AC8087
95FE9C58 C65329D1 377C4CD7 EA103EC1
31E4F48A 9B1CC047 EE5A0719 704211E5
B48A2068 8060DF60 B492A737 21B0DB21
C9B21A10 371E6179 78FAFB0B BAAEC3F4
9D86E334 701E1442 EA5DA288 64485077
54C0C231 AD43571A B9071925 609A4E59
B8178484 7EB73A4F AAE46B26 F5B374B8
12B0000C 8429F504 936B2492 AAF47E94
A5BA804F 7F190927 5D2DF651 B59D4C2F
A15D0551 DAEBA4AF 2060D0D5 CB1DA4E6
5E2034DB 4D19E7CD EEA6CF7E 549C86AC
46B2C979 AB84EE12 202FD6DF E7E3C09F
C2394012 AF20A97E 369BCBDA 62459D3E
C6FFB914 FEFD4DE5 88F5AFE1 98488557
1BABBAE4 BE55325E 4FB7E602 C1C04BEE
F3CB6B86 71666C06 6BF74E1B 0F881F31
B731839B CF711F6A 84CA95F5 958D3B44
E3862DF6 338E02B5 C345CFF8 A31D54F3
6920AA76 0BF8E903 552C5A04 917CCD11
D4E5DF5C 491EE86B 20C33FE1 5D21F0AD
6932E67C C64B3A26 B8988B25 CFA33E2B
63490741 3AB79D60 D8AEFBE9 2F48E25A
978A019C FE49EE0A 0E96BF0D D6074DDB
66DFF333 0E10226F 0A1B219C BE54E4C2
2C15100C 6A2AA3F1 88251874 FDC94F6B
9247EF61 3E7B7E0D 29F3AD89 FA14A29C
76E08E9B 9ADCDF8C C886D4FD A69F6CB4
E24FDE26 3044C856 BF08F051 1ADAD329
C4A46A1E B5AB72FE 096041F1 F3F3571B
2EAFD9CB B9EB8B83 AE05885A 8F2D2793
1E3305D9 0C9E2294 E8AD7E3B 8E4DEC96
6276C5F1 A3B7E51E 422D365D E4C0259C
50715406 822D1682 80B0F2E5 5C94
65B2E942 24BEEA6E A513F918 CCEC1DE3      Authentication Tag
+--------+
| Footer |
+--------+
0067                                     Signature Length (103)
30650230 7229DDF5 B86A5B64 54E4D627      Signature
CBE194F1 1CC0F8CF D27B7F8B F50658C0
BE84B355 3CED1721 A0BE2A1B 8E3F449E
1BEB8281 023100B2 0CB323EF 58A4ACE3
1559963B 889F72C3 B15D1700 5FB26E61
331F3614 BC407CEE B86A66FA CBF74D9E
34CB7E4B 363A38
```

# Referência de dados autenticados adicionais (AAD) do corpo para o AWS Encryption SDK
<a name="body-aad-reference"></a>


|  | 
| --- |
|  As informações nesta página são uma referência para criar sua própria biblioteca de criptografia compatível com o AWS Encryption SDK. Se você não estiver criando sua própria biblioteca de criptografia compatível, provavelmente não precisará dessas informações. Para usar o AWS Encryption SDK em uma das linguagens de programação suportadas, consulte[Linguagens de programação](programming-languages.md). Para a especificação que define os elementos de uma AWS Encryption SDK implementação adequada, consulte a [AWS Encryption SDK Especificação](https://github.com/awslabs/aws-encryption-sdk-specification/) em GitHub.  | 

Você deve fornecer dados autenticados adicionais (AAD) para o [algoritmo AES-GCM](algorithms-reference.md) para cada operação de criptografia. Isso é verdadeiro para [dados de corpo](message-format.md#body-structure) com e sem moldura. Para obter mais informações sobre o AAD e como ele é usado no Galois/Counter Modo (GCM), consulte [Recomendações para modos de operação com cifra de bloco: Galois/Counter Modo (GCM) e GMAC](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf).

A tabela a seguir descreve os campos que formam o AAD do corpo. Os bytes são anexados na ordem mostrada.


**Estrutura do AAD do corpo**  

| Campo | Tamanho, em bytes | 
| --- | --- | 
| [Message ID](#body-aad-message-id) | 16 | 
| [Body AAD Content](#body-aad-content) | Variável. Consulte Conteúdo do AAD do copo na lista a seguir. | 
| [Sequence Number](#body-aad-sequence-number) | 4 | 
| [Content Length](#body-aad-content-length) | 8 | 

**ID da mensagem**  
O mesmo valor de [Message ID](message-format.md#header-message-id) definido no cabeçalho da mensagem.

**Conteúdo corporal do AAD**  
Um valor codificado em UTF-8 determinado pelo tipo de dados de corpo usado.  
Para [dados sem moldura](message-format.md#body-no-framing), use o valor `AWSKMSEncryptionClient Single Block`.  
Para molduras normais em [dados com moldura](message-format.md#body-framing), use o valor `AWSKMSEncryptionClient Frame`.  
Para a moldura final nos [dados com moldura](message-format.md#body-framing), use o valor `AWSKMSEncryptionClient Final Frame`.

**Número de sequência**  
Um valor de 4 bytes interpretado como um inteiro não assinado de 32 bits.  
Para [dados com moldura](message-format.md#body-framing), esse é o número sequencial da moldura.  
Para [dados sem moldura](message-format.md#body-no-framing), use o valor 1, codificado como os 4 bytes `00 00 00 01` em notação hexadecimal.

**Comprimento do conteúdo**  
O tamanho, em bytes, do texto não criptografado fornecido ao algoritmo para criptografia. É um valor de 8 bytes interpretado como um inteiro não assinado de 64 bits.

# AWS Encryption SDK referência de algoritmos
<a name="algorithms-reference"></a>


|  | 
| --- |
|  As informações nesta página são uma referência para criar sua própria biblioteca de criptografia compatível com o AWS Encryption SDK. Se você não estiver criando sua própria biblioteca de criptografia compatível, provavelmente não precisará dessas informações. Para usar o AWS Encryption SDK em uma das linguagens de programação suportadas, consulte[Linguagens de programação](programming-languages.md). Para a especificação que define os elementos de uma AWS Encryption SDK implementação adequada, consulte a [AWS Encryption SDK Especificação](https://github.com/awslabs/aws-encryption-sdk-specification/) em GitHub.  | 

Se você estiver criando sua própria biblioteca que pode ler e escrever textos cifrados compatíveis com o. AWS Encryption SDK, você precisará entender como ela AWS Encryption SDK implementa os conjuntos de algoritmos compatíveis para criptografar dados brutos. 

O AWS Encryption SDK suporta os seguintes conjuntos de algoritmos. Todos os pacotes de algoritmos AES-GCM têm um [vetor de inicialização](IV-reference.md) de 12 bytes e uma tag de autenticação AES-GCM de 16 bytes. O conjunto de algoritmos padrão varia de acordo com a AWS Encryption SDK versão e a política de comprometimento de chave selecionada. Para obter detalhes, consulte [Política de compromisso e pacote de algoritmos](troubleshooting-migration.md#configuration-conflict_1).


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

| ID do algoritmo | Versão do formato de mensagem | Algoritmo de criptografia | Tamanho da chave de dados (bits) | Algoritmo de derivação de chave | Algoritmo de assinatura | Algoritmo de confirmação de chave | Tamanho dos dados do pacote de algoritmos (bytes) | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| 05 78 | 0x02 | AES-GCM | 256 | HKDF com SHA-512 | ECDSA com P-384 e SHA-384 | HKDF com SHA-512 | 32 (confirmação de chave) | 
| 04 78 | 0x02 | AES-GCM | 256 | HKDF com SHA-512 | Nenhum | HKDF com SHA-512 | 32 (confirmação de chave) | 
| 03 78 | 0x01 | AES-GCM | 256 | HKDF com SHA-384 | ECDSA com P-384 e SHA-384 | Nenhum | N/D | 
| 03 46 | 0x01 | AES-GCM | 192 | HKDF com SHA-384 | ECDSA com P-384 e SHA-384 | Nenhum | N/D | 
| 02 14 | 0x01 | AES-GCM | 128 | HKDF com SHA-256 | ECDSA com P-256 e SHA-256 | Nenhum | N/D | 
| 01 78 | 0x01 | AES-GCM | 256 | HKDF com SHA-256 | Nenhum | Nenhum | N/D | 
| 01 46 | 0x01 | AES-GCM | 192 | HKDF com SHA-256 | Nenhum | Nenhum | N/D | 
| 01 14 | 0x01 | AES-GCM | 128 | HKDF com SHA-256 | Nenhum | Nenhum | N/D | 
| 00 78 | 0x01 | AES-GCM | 256 | Nenhum | Nenhum | Nenhum | N/D | 
| 00 46 | 0x01 | AES-GCM | 192 | Nenhum | Nenhum | Nenhum | N/D | 
| 00 14 | 0x01 | AES-GCM | 128 | Nenhum | Nenhum | Nenhum | N/D | 

**ID do algoritmo**  
Um valor de 2 bytes hexadecimal que identifica exclusivamente a implementação de um algoritmo. Esse valor é armazenado no [cabeçalho da mensagem](message-format.md#header-structure) do texto cifrado.

**Versão do formato de mensagem**  
A versão do formato desta mensagem. Os pacotes de algoritmos com confirmação de chave usam formato de mensagem versão 2 (0x02). Os pacotes de algoritmos sem confirmação de chave usam formato de mensagem versão 1 (0x01). 

**Tamanho dos dados do pacote de algoritmos**  
O tamanho em bytes dos dados específicos do pacote de algoritmos. Esse campo é suportado somente no formato de mensagem versão 2 (0x02). No formato de mensagem versão 2 (0x02), esses dados aparecem no campo `Algorithm suite data` do cabeçalho da mensagem. Os conjuntos de algoritmos que compatíveis com o [confirmação de chave](concepts.md#key-commitment) usam 32 bytes para a cadeia de caracteres de confirmação de chave. Para obter mais informações, consulte **Algoritmo de confirmação de chaves** nesta lista.

**Tamanho da chave de dados**  
O tamanho da [chave de dados](concepts.md#DEK) em bits. O AWS Encryption SDK é compatível com chaves de 256, 192 e 128 bits. A chave de dados é gerada por um [token de autenticação](concepts.md#keyring) ou chave mestra.   
Em algumas implementações, essa chave de dados é usada como entrada para uma função de derivação de extract-and-expand chave baseada em HMAC (HKDF). A saída da HKDF é usada como a chave de criptografia de dados no algoritmo de criptografia. Para obter mais informações, consulte **Algoritmo de derivação de chaves** nessa lista.

**Algoritmo de criptografia**  
O nome e o modo do algoritmo de criptografia utilizado. Os pacotes de algoritmos AWS Encryption SDK usam o algoritmo de criptografia Advanced Encryption Standard (AES) com Galois/Counter Modo (GCM).

**Algoritmo de confirmação de chave**  
O algoritmo usado para calcular a string de confirmação de chave. A saída é armazenada no campo `Algorithm suite data` do cabeçalho da mensagem e é usada para validar a chave de dados para o confirmação de chave.  
Para obter uma explicação técnica sobre como adicionar comprometimento de chave a um conjunto de algoritmos, consulte [Key Committing AEADs](https://eprint.iacr.org/2020/1153) in Cryptology ePrint Archive. 

**Algoritmo de derivação de chave**  
A função de derivação de extract-and-expand chave baseada em HMAC (HKDF) usada para derivar a chave de criptografia de dados. O AWS Encryption SDK usa o HKDF definido na [RFC](https://tools.ietf.org/html/rfc5869) 5869.   
**Pacotes de algoritmos sem confirmação de chave** (ID do algoritmo `01xx` – `03xx`)  
+ A função de hash usada é SHA-384 ou SHA-256, dependendo do pacote de algoritmos.
+ Para a etapa de extração:
  + Nenhum sal é usado. De acordo com a RFC, o sal é definido como uma string de zeros. O tamanho da string é igual ao tamanho da saída da função de hash, que é 48 bytes para SHA-384 e 32 bytes para SHA-256.
  + O material de chaveamento de entrada é a chave de dados recebida do provedor de tokens de autenticação ou de chaves mestras.
+ Para a etapa de expansão:
  + A chave pseudoaleatória de entrada é a saída da etapa de extração.
  + As informações da entrada são uma concatenação do ID do algoritmo seguido pelo ID da mensagem (nessa ordem).
  + O comprimento do material de chaveamento de saída é o **Tamanho da chave de dados**. Essa saída é usada como a chave de criptografia de dados no algoritmo de criptografia.
**Pacotes de algoritmos com confirmação de chave** (ID do algoritmo `04xx` e `05xx`)  
+ A função hash usada é SHA-512.
+ Para a etapa de extração:
  + O sal é um valor aleatório criptográfico de 256 bits. No [formato de mensagem versão 2](message-format.md) (0x02), esse valor é armazenado no campo `MessageID`.
  + O material de chaveamento inicial é a chave de dados recebida do provedor de tokens de autenticação ou de chaves mestras.
+ Para a etapa de expansão:
  + A chave pseudoaleatória de entrada é a saída da etapa de extração.
  + O rótulo da chave são os bytes codificados em UTF-8 da string `DERIVEKEY` na ordem de bytes big endian.
  + As informações da entrada são uma concatenação do ID do algoritmo seguido pelo rótulo de chave (nessa ordem).
  + O comprimento do material de chaveamento de saída é o **Tamanho da chave de dados**. Essa saída é usada como a chave de criptografia de dados no algoritmo de criptografia.

**Versão do formato de mensagem**  
A versão do formato de mensagem usado com o conjunto de algoritmos. Para obter detalhes, consulte [Referência do formato de mensagens](message-format.md).

**Algoritmo de assinatura**  
O algoritmo de assinatura usado para gerar uma[assinatura digital](concepts.md#digital-sigs) sobre o cabeçalho e o corpo do texto cifrado. O AWS Encryption SDK usa o Algoritmo de Assinatura Digital de Curva Elíptica (ECDSA) com as seguintes especificações:  
+ A curva elíptica usada é a curva P-384 ou P-256, conforme especificado pelo ID do algoritmo. Essas curvas são definidas no [Digital Signature Standard (DSS) (FIPS PUB 186-4)](http://doi.org/10.6028/NIST.FIPS.186-4).
+ A função de hash usada é SHA-384 (com a curva P-384) ou SHA-256 (com a curva P-256).

# AWS Encryption SDK referência vetorial de inicialização
<a name="IV-reference"></a>


|  | 
| --- |
|  As informações nesta página são uma referência para criar sua própria biblioteca de criptografia compatível com o AWS Encryption SDK. Se você não estiver criando sua própria biblioteca de criptografia compatível, provavelmente não precisará dessas informações. Para usar o AWS Encryption SDK em uma das linguagens de programação suportadas, consulte[Linguagens de programação](programming-languages.md). Para a especificação que define os elementos de uma AWS Encryption SDK implementação adequada, consulte a [AWS Encryption SDK Especificação](https://github.com/awslabs/aws-encryption-sdk-specification/) em GitHub.  | 

O AWS Encryption SDK fornece os [vetores de inicialização](https://en.wikipedia.org/wiki/Initialization_vector) (IVs) que são exigidos por todos os conjuntos de [algoritmos](algorithms-reference.md) compatíveis. O SDK usa números sequenciais de molduras para construir um IV, de forma que duas molduras na mesma mensagem não podem ter o mesmo IV. 

Cada IV de 96 bits (12 bytes) é construído a partir de duas matrizes de bytes big-endian concatenadas na seguinte ordem:
+ 64 bits: 0 (reservado para uso futuro)
+ 32 bits: o número sequencial da moldura. Para a tag de autenticação de cabeçalho, esse valor é todo de zeros.

Antes da introdução do armazenamento em [cache de chaves de dados](data-key-caching.md), AWS Encryption SDK sempre usavam uma nova chave de dados para criptografar cada mensagem e ela gerava tudo IVs aleatoriamente. Gerados aleatoriamente IVs eram criptograficamente seguros porque as chaves de dados nunca eram reutilizadas. Quando o SDK introduziu o armazenamento em cache de chaves de dados, que reutiliza intencionalmente as chaves de dados, mudamos a forma como o SDK é gerado. IVs 

Usar determinística IVs que não pode ser repetida em uma mensagem aumenta significativamente o número de invocações que podem ser executadas com segurança em uma única chave de dados. Além disso, as chaves de dados que são armazenadas em cache sempre usam um pacote de algoritmos com uma [função de derivação de chaves](https://en.wikipedia.org/wiki/Key_derivation_function). Usar um IV determinístico com uma função de derivação de chave pseudo-aleatória para derivar chaves de criptografia de uma chave de dados permite AWS Encryption SDK criptografar 2^32 mensagens sem exceder os limites criptográficos. 

# AWS KMS Detalhes técnicos do chaveiro hierárquico
<a name="hierarchical-keyring-details"></a>

O [AWS KMS chaveiro hierárquico](use-hierarchical-keyring.md) usa uma chave de dados exclusiva para criptografar cada mensagem e criptografa cada chave de dados com uma chave de empacotamento exclusiva derivada de uma chave de ramificação ativa. Ele usa uma [derivação de chave](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-108r1.pdf) no modo contador com uma função pseudoaleatória com HMAC SHA-256 para derivar a chave de empacotamento de 32 bytes com as seguintes entradas.
+ Um sal aleatório de 16 bytes
+ A chave de ramificação ativa
+ O valor [codificado em UTF-8](https://en.wikipedia.org/wiki/UTF-8) para o identificador do provedor de chaves "” aws-kms-hierarchy

O token de autenticação hierárquico usa a chave de empacotamento derivada para criptografar uma cópia da chave de dados em texto simples usando o AES-GCM-256 com uma tag de autenticação de 16 bytes e as seguintes entradas.
+ A chave de empacotamento derivada é usada como a chave de cifra AES-GCM
+ A chave de dados é usada como mensagem AES-GCM
+ Um vetor de inicialização aleatória (IV) de 12 bytes é usado como o AES-GCM IV
+ Dados autenticados adicionais (AAD) contendo os seguintes valores serializados.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/encryption-sdk/latest/developer-guide/hierarchical-keyring-details.html)