

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# AWS Encryption SDK referencia
<a name="reference"></a>


|  | 
| --- |
|  La información de esta página le servirá de referencia para crear su propia biblioteca de cifrado compatible con el AWS Encryption SDK. Si no está creando su propia biblioteca de cifrado compatible, es probable que no necesite esta información. Para utilizarla AWS Encryption SDK en uno de los lenguajes de programación compatibles, consulte[Lenguajes de programación](programming-languages.md). Para ver la especificación que define los elementos de una AWS Encryption SDK implementación adecuada, consulte la [AWS Encryption SDK especificación](https://github.com/awslabs/aws-encryption-sdk-specification/) en GitHub.  | 

 AWS Encryption SDK Utiliza los [algoritmos compatibles](supported-algorithms.md) para devolver una única estructura de datos o *mensaje* que contiene datos cifrados y las claves de datos cifrados correspondientes. En los siguientes temas se explican los algoritmos y la estructura de datos. Utilice esta información para crear bibliotecas que puedan leer y escribir textos cifrados que sean compatibles con este SDK.

**Topics**
+ [Referencia de formato de mensajes](message-format.md)
+ [Ejemplos de formato de mensajes](message-format-examples.md)
+ [Referencia de AAD del cuerpo](body-aad-reference.md)
+ [Referencia de algoritmos](algorithms-reference.md)
+ [Referencia de vectores de inicialización](IV-reference.md)
+ [

# AWS KMS Detalles técnicos del llavero jerárquico
](hierarchical-keyring-details.md)

# AWS Encryption SDK referencia de formato de mensaje
<a name="message-format"></a>


|  | 
| --- |
|  La información de esta página le servirá de referencia para crear su propia biblioteca de cifrado compatible con el AWS Encryption SDK. Si no está creando su propia biblioteca de cifrado compatible, es probable que no necesite esta información. Para utilizarla AWS Encryption SDK en uno de los lenguajes de programación compatibles, consulte[Lenguajes de programación](programming-languages.md). Para ver la especificación que define los elementos de una AWS Encryption SDK implementación adecuada, consulte la [AWS Encryption SDK especificación](https://github.com/awslabs/aws-encryption-sdk-specification/) en GitHub.  | 

Las operaciones de cifrado AWS Encryption SDK devuelven una estructura de datos única o un [mensaje cifrado](concepts.md#message) que contiene los datos cifrados (texto cifrado) y todas las claves de datos cifrados. Para comprender esta estructura de datos o crear bibliotecas que la lean y escriban, es preciso comprender el formato del mensaje.

El formato del mensaje consta de al menos dos partes: un *encabezado* y un *cuerpo*. En algunos casos, el formato del mensaje incluye una tercera parte, un *pie de página*. El formato del mensaje define una secuencia ordenada de bytes en orden de bytes de red, también denominado formato big-endian. El formato del mensaje comienza con el encabezado, que va seguido del cuerpo y, a continuación, del pie de página (cuando lo hay).

Los [conjuntos de algoritmos](algorithms-reference.md) que admite el AWS Encryption SDK utilizan una de las dos versiones de formato de mensaje. Los conjuntos de algoritmos sin [compromiso clave](concepts.md#key-commitment) utilizan el formato de mensaje de la versión 1. Los conjuntos de algoritmos sin compromiso clave utilizan el formato de mensaje de la versión 2. 

**Topics**
+ [

## Estructura del encabezado
](#header-structure)
+ [

## Estructura del cuerpo
](#body-structure)
+ [

## Estructura del pie de página
](#footer-structure)

## Estructura del encabezado
<a name="header-structure"></a>

El encabezado del mensaje contiene la clave de datos cifrada e información sobre la composición del cuerpo del mensaje. En la siguiente tabla se describen los campos que forman el encabezado en las versiones 1 y 2 del formato de mensaje. Los bytes se anexan en el orden mostrado 

El valor **No presente** indica que el campo no existe en esa versión del formato del mensaje. El **texto en negrita** indica valores que son diferentes en cada versión.

**nota**  
Es posible que tenga que desplazarse horizontal o verticalmente para ver todos los datos de esta tabla.


**Estructura del encabezado**  

| Campo | Formato de mensaje versión 1Longitud (bytes) | Formato de mensaje versión 2Longitud (bytes) | 
| --- | --- | --- | 
| [Version](#header-version) | 1 | 1 | 
| [Type](#header-type) | 1 | No presente | 
| [Algorithm ID](#header-algorithm-id) | 2 | 2. | 
| [Message ID](#header-message-id) | 16 | 32 | 
| [AAD Length](#header-aad-length) | 2Cuando el [contexto de cifrado](concepts.md#encryption-context) está vacío, el valor del campo Longitud AAD de 2 bytes es 0. | 2Cuando el [contexto de cifrado](concepts.md#encryption-context) está vacío, el valor del campo Longitud AAD de 2 bytes es 0. | 
| [AAD](#header-aad) | Variable. La longitud de este campo aparece en los 2 bytes anteriores (campo de Longitud AAD). Cuando el [contexto de cifrado](concepts.md#encryption-context) está vacío, no hay ningún campo AAD en el encabezado. |  Variable. La longitud de este campo aparece en los 2 bytes anteriores (campo de Longitud AAD). Cuando el [contexto de cifrado](concepts.md#encryption-context) está vacío, no hay ningún campo AAD en el encabezado.  | 
| [Encrypted Data Key Count](#header-data-key-count) | 2 | 2. | 
| [Encrypted Data Key(s)](#header-data-keys) | Variable. Se determina según el número de claves de datos cifradas y la longitud de cada una de ellas. | Variable. Se determina según el número de claves de datos cifradas y la longitud de cada una de ellas. | 
| [Content Type](#header-content-type) | 1 | 1 | 
| [Reserved](#header-reserved) | 4 | No presente | 
| [IV Length](#header-iv-length) | 1 | No presente | 
| [Frame Length](#header-frame-length) | 4 | 4 | 
| [Algorithm Suite Data](#algorithm-suite-data) | No presente | Variable. Se determina mediante el [algoritmo](algorithms-reference.md) que generó el mensaje. | 
| [Header Authentication](#header-authentication) | Variable. Se determina mediante el [algoritmo](algorithms-reference.md) que generó el mensaje. | Variable. Se determina mediante el [algoritmo](algorithms-reference.md) que generó el mensaje. | 

**Versión**  
La versión de este formato de mensaje. La versión es de 1 o 2, que se codifica como el byte `01` o `02` en notación hexadecimal.

**Tipo**  
El tipo de este formato de mensaje. El tipo indica el tipo de estructura. El único tipo admitido es el de *datos cifrados autenticados por el cliente*. El valor del tipo es 128, codificado como el byte `80` en notación hexadecimal.  
Este campo no está presente en la versión 2 del formato de mensaje.

**ID de algoritmo**  
Un identificador del algoritmo utilizado. Se trata de un valor de 2 bytes interpretado como un entero sin signo de 16 bits. Para obtener más información sobre los algoritmos, consulte [AWS Encryption SDK referencia de algoritmos](algorithms-reference.md).

**ID del mensaje**  
Un valor generado de manera aleatoria que identifica el mensaje. El campo Message ID:  
+ identifica de forma exclusiva el mensaje cifrado;
+ establece un vínculo débil entre el encabezado del mensaje y el cuerpo del mensaje;
+ proporciona un mecanismo para reutilizar una clave de datos de forma segura con varios mensajes cifrados;
+ protege contra la reutilización accidental de una clave de datos o el desgaste de las claves en el AWS Encryption SDK.
Este valor es de 128 bits en la versión 1 del formato de mensaje y de 256 bits en la versión 2.

**Longitud del AAD**  
La longitud de la información autenticada adicional (AAD). Se trata de un valor de 2 bytes interpretado como un entero sin signo de 16 bits que especifica el número de bytes que contiene la AAD.  
Cuando el [contexto de cifrado](concepts.md#encryption-context) está vacío, el valor del campo Longitud AAD es 0.

**AAD**  
La información autenticada adicional. AAD es una codificación del [contexto de cifrado](concepts.md#encryption-context), una matriz de pares de clave-valor donde cada clave y valor es una cadena de caracteres con codificación UTF-8. El contexto de cifrado se convierte en una secuencia de bytes y se utiliza para el valor de AAD. Cuando el contexto de cifrado está vacío, no hay ningún campo AAD en el encabezado.  
Cuando se utilizan [algoritmos con firma](algorithms-reference.md), el contexto de cifrado debe contener el par de clave-valor `{'aws-crypto-public-key', Qtxt}`. Qtxt representa el punto Q de la curva elíptica comprimido según [SEC 1 versión 2.0](http://www.secg.org/sec1-v2.pdf) y, a continuación, codificado en base64. El contexto de cifrado puede contener valores adicionales, pero la longitud máxima de la AAD construida es de 2 ^ 16 - 1 bytes.  
En la siguiente tabla se describen los campos que componen la AAD. Los pares de clave-valor están ordenados, por clave, en orden ascendente de acuerdo con el código de caracteres UTF-8. Los bytes se anexan en el orden mostrado    
**Estructura de AAD**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/encryption-sdk/latest/developer-guide/message-format.html)  
**Recuento de pares clave-valor**  
El número de pares de clave-valor de la AAD. Se trata de un valor de 2 bytes interpretado como un entero sin signo de 16 bits que especifica el número de pares de clave-valor de la AAD. El número máximo de pares de clave-valor de la AAD es 2^16 - 1.  
Cuando no hay ningún contexto de cifrado o está vacío, este campo no está presente en la estructura de AAD.  
**Longitud de clave**  
La longitud de la clave para el par de clave-valor. Se trata de un valor de 2 bytes interpretado como un entero sin signo de 16 bits que especifica el número de bytes que contienen la clave.  
**Clave**  
La clave en el par de clave-valor. Se trata de una secuencia de bytes codificados con UTF-8.  
**Longitud del valor**  
La longitud del valor en el par de clave-valor. Se trata de un valor de 2 bytes interpretado como un entero sin signo de 16 bits que especifica el número de bytes que contienen el valor.  
**Valor**  
El valor en el par de clave-valor. Se trata de una secuencia de bytes codificados con UTF-8.

**Recuento de claves de datos cifrados**  
El número de claves de datos cifradas. Se trata de un valor de 2 bytes interpretado como un entero sin signo de 16 bits que especifica el número de claves de datos cifradas. El número máximo de claves de datos cifrados en cada mensaje es 65 535 (2^16 - 1).

**Clave (s) de datos cifrados**  
Una secuencia de claves de datos cifradas. La longitud de la secuencia se determina según el número de claves de datos cifradas y la longitud de cada una de ellas. La secuencia contiene al menos una clave de datos cifrada.  
En la siguiente tabla se describen los campos que componen cada clave de datos cifrada. Los bytes se anexan en el orden mostrado    
**Encrypted Data Key Structure**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/encryption-sdk/latest/developer-guide/message-format.html)  
**Longitud del identificador del proveedor de claves**  
La longitud del identificador del proveedor de claves. Se trata de un valor de 2 bytes interpretado como un entero sin signo de 16 bits que especifica el número de bytes que contienen el ID del proveedor de claves.  
**ID de proveedor clave**  
El identificador del proveedor de claves. Se utiliza para indicar el proveedor de la clave de datos cifrada y está previsto que sea extensible.  
**Longitud de la información clave del proveedor**  
La longitud de la información del proveedor de claves. Se trata de un valor de 2 bytes interpretado como un entero sin signo de 16 bits que especifica el número de bytes que contienen la información del proveedor de claves.  
**Información clave del proveedor**  
La información del proveedor de claves. Viene determinada por el proveedor de claves.  
Si AWS KMS es el proveedor de la clave maestra o utiliza un AWS KMS anillo de claves, este valor contiene el nombre de recurso de Amazon (ARN) del. AWS KMS key  
**Longitud de la clave de datos cifrados**  
La longitud de la clave de datos cifrada. Se trata de un valor de 2 bytes interpretado como un entero sin signo de 16 bits que especifica el número de bytes que contienen la clave de datos cifrada.  
**Clave de datos cifrados**  
La clave de datos cifrada. Se trata de la clave de cifrado de datos cifrada por el proveedor de claves.

**Tipo de contenido**  
El tipo de contenido cifrado, que puede ser con o sin trama.  
Siempre que sea posible, utilice datos con trama. AWS Encryption SDK Admite datos no enmarcados solo para uso heredado. Algunas implementaciones lingüísticas del aún AWS Encryption SDK pueden generar texto cifrado sin marcos. Todas las implementaciones de idiomas compatibles pueden descifrar texto cifrado con trama y sin trama.
Los datos con trama están divididos en partes con la misma longitud; cada una de ellas está cifrada por separado. El contenido con trama es de tipo 2, que se codifica como el byte `02` en notación hexadecimal.  
Los datos sin trama no se dividen; se trata de un único bloque cifrado. El contenido sin trama es de tipo 1, que se codifica como el byte `01` en notación hexadecimal.

**Reservado**  
Una secuencia reservada de 4 bytes. Este valor debe ser 0. Se codifica como los bytes `00 00 00 00` en notación hexadecimal (es decir, una secuencia de 4 bytes de un valor entero de 32 bits igual a 0).  
Este campo no está presente en la versión 2 del formato de mensaje.

**Longitud IV**  
La longitud del vector de inicialización (IV). Se trata de un valor de 1 byte interpretado como un entero sin signo de 8 bits que especifica el número de bytes que contienen el IV. Este valor se determina en función del valor en bytes del IV del [algoritmo](algorithms-reference.md) que generó el mensaje.  
Este campo no está presente en la versión 2 del formato de mensaje, que solo admite conjuntos de algoritmos que utilizan valores IV deterministas en el encabezado del mensaje.

**Longitud del marco**  
La longitud de cada trama de datos con trama. Se trata de un valor de 4 byte interpretado como un entero sin signo de 32 bits que especifica el número de bytes en cada trama. Cuando el contenido es sin trama, es decir, cuando el valor del campo de tipo de `Content Type` es 1 este valor debe ser 0.  
Siempre que sea posible, utilice datos con trama. AWS Encryption SDK Admite datos no enmarcados solo para uso heredado. Algunas implementaciones lingüísticas del aún AWS Encryption SDK pueden generar texto cifrado sin marcos. Todas las implementaciones de idiomas compatibles pueden descifrar texto cifrado con trama y sin trama.

**Conjunto de datos de algoritmos**  
Datos complementarios que necesita el [algoritmo](algorithms-reference.md) que generó el mensaje. El algoritmo determina la longitud y el contenido. Su longitud puede ser 0.  
Este campo no está presente en la versión 1 del formato de mensaje.

**Autenticación de**  
La autenticación del encabezado viene determinada por el [algoritmo](algorithms-reference.md) que generó el mensaje. La autenticación del encabezado se calcula para todo el encabezado. Se compone de un IV y una etiqueta de autenticación. Los bytes se anexan en el orden mostrado    
**Estructura de Header Authentication**    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/encryption-sdk/latest/developer-guide/message-format.html)  
**IV**  
El vector de inicialización (IV) utilizado para calcular la etiqueta de autenticación del encabezado.  
Este campo no está presente en la versión 2 del formato de encabezado del mensaje. La versión 2 del formato de mensaje solo admite conjuntos de algoritmos que utilizan valores IV deterministas en el encabezado del mensaje.  
**Etiqueta de autenticación**  
El valor de autenticación del encabezado. Se utiliza para autenticar todo el contenido del encabezado.

## Estructura del cuerpo
<a name="body-structure"></a>

El cuerpo del mensaje contiene los datos cifrados, denominados *texto cifrado*. La estructura del cuerpo depende del tipo de contenido (con o sin trama). En las secciones siguientes se describe el formato del cuerpo del mensaje para cada tipo de contenido. La estructura del cuerpo del mensaje es la misma en las versiones 1 y 2 del formato de mensaje.

**Topics**
+ [

### Datos sin trama
](#body-no-framing)
+ [

### Datos con trama
](#body-framing)

### Datos sin trama
<a name="body-no-framing"></a>

Los datos sin trama se cifran en un solo blob con un IV y un [AAD de cuerpo](body-aad-reference.md) únicos.

**nota**  
Siempre que sea posible, utilice datos con trama. AWS Encryption SDK Admite datos no enmarcados solo para uso heredado. Algunas implementaciones lingüísticas del aún AWS Encryption SDK pueden generar texto cifrado sin marcos. Todas las implementaciones de idiomas compatibles pueden descifrar texto cifrado con trama y sin trama.

En la siguiente tabla se describen los campos que componen los datos sin trama. Los bytes se anexan en el orden mostrado


**Estructura del cuerpo sin trama**  

| Campo | Longitud, en bytes | 
| --- | --- | 
| [IV](#body-unframed-iv) | Variable. Equivalente al valor especificado en el byte de [IV Length](#header-iv-length) del encabezado. | 
| [Encrypted Content Length](#body-unframed-content-length) | 8 | 
| [Encrypted Content](#body-unframed-content) | Variable. Equivalente al valor especificado en los últimos 8 bytes (Encrypted Content Length). | 
| [Authentication Tag](#body-unframed-tag) | Variable. Su valor lo determina la [implementación del algoritmo](algorithms-reference.md) utilizada. | 

**IV**  
El vector de inicialización (IV) que se va a utilizar con el [algoritmo de cifrado](algorithms-reference.md).

**Longitud del contenido cifrado**  
La longitud del contenido cifrado (o *texto cifrado*). Se trata de un valor de 8 bytes interpretado como un entero sin signo de 64 bits que especifica el número de bytes que incluyen el contenido cifrado.  
Técnicamente, el valor máximo permitido es 2^63 - 1, u 8 exbibytes (8 EiB). Sin embargo, en la práctica, el valor máximo es 2^36 - 32, o 64 gibibytes (64 GiB), debido a las restricciones impuestas por los [algoritmos implementados](algorithms-reference.md).  
La implementación para Java de este SDK restringe aún más este valor a 2^31 - 1, o 2 gibibytes (2 GiB), debido a las restricciones del lenguaje.

**Contenido cifrado**  
El contenido cifrado (texto cifrado) devuelto por el [algoritmo de cifrado](algorithms-reference.md).

**Etiqueta de autenticación**  
El valor de autenticación del cuerpo. Se utiliza para autenticar el cuerpo del mensaje.

### Datos con trama
<a name="body-framing"></a>

En los datos con trama, los datos en texto no cifrado se dividen en partes de igual longitud denominadas *tramas*. AWS Encryption SDK Encripta cada fotograma por separado con un [AAD único para el IV y el cuerpo](body-aad-reference.md).

**nota**  
Siempre que sea posible, utilice datos con trama. AWS Encryption SDK Admite datos no enmarcados solo para uso tradicional. Algunas implementaciones lingüísticas del aún AWS Encryption SDK pueden generar texto cifrado sin marcos. Todas las implementaciones de idiomas compatibles pueden descifrar texto cifrado con trama y sin trama.

 

La [longitud de la trama](#header-frame-length), que es la longitud del [contenido cifrado](#body-framed-regular-content) en la trama, puede ser diferente para cada mensaje. El número máximo de bytes en una trama es 2^32 - 1. El número máximo de tramas en un mensaje es 2^32 - 1.

Existen dos tipos de tramas: *normal* y *final*. Cada mensaje debe consistir o incluir una trama final. 

Todas las tramas normales de un mensaje tienen la misma longitud de trama. La trama final puede tener una longitud de trama diferente. 

La composición de las tramas en los datos con trama varía según la longitud del contenido cifrado.
+ **Igual a la longitud de la trama**: cuando la longitud del contenido cifrado es igual a la longitud de la trama de las tramas normales, el mensaje puede consistir en una trama normal que contenga los datos, seguido de una trama final de longitud cero (0). O bien, el mensaje puede consistir únicamente en una trama final que contenga los datos. En este caso, la trama final tiene la misma longitud que las tramas normales.
+ **Múltiplo de la longitud de la trama**: cuando la longitud del contenido cifrado es un múltiplo exacto de la longitud de la trama de las tramas normales, el mensaje puede consistir en una trama normal que contenga los datos, seguido de una trama final de longitud cero (0). O bien, el mensaje puede terminar en una trama final que contenga los datos. En este caso, la trama final tiene la misma longitud que las tramas normales.
+ **No es un múltiplo de la longitud de la trama**: cuando la longitud del contenido cifrado no es un múltiplo exacto de la longitud de la trama de las tramas normales, la trama final contiene los datos restantes. La longitud de la trama final es menor que la longitud de las tramas normales. 
+ **Menor que la longitud de la trama**: cuando la longitud del contenido cifrado es menor que la longitud de la trama de las tramas normales, el mensaje puede consistir en una trama final que contenga todos los datos. La longitud de la trama final es menor que la longitud de las tramas normales.

En la siguiente tabla se describen los campos que componen las tramas. Los bytes se anexan en el orden mostrado


**Estructura de cuerpo con trama, trama normal**  

| Campo | Longitud, en bytes | 
| --- | --- | 
| [Sequence Number](#body-framed-regular-sequence-number) | 4 | 
| [IV](#body-framed-regular-iv) | Variable. Equivalente al valor especificado en el byte de [IV Length](#header-iv-length) del encabezado. | 
| [Encrypted Content](#body-framed-regular-content) | Variable. Equivalente al valor especificado en el [Frame Length](#header-frame-length) del encabezado. | 
| [Authentication Tag](#body-framed-regular-tag) | Variable. Se determina mediante el algoritmo utilizado, según lo especificado en el [Algorithm ID](#header-algorithm-id) del encabezado. | 

**Número de secuencia**  
El número secuencial de la trama. Es un número de contador incremental para la trama. Se trata de un valor de 4 bytes interpretado como un entero sin signo de 32 bits.  
Los datos con trama deben comenzar en el número de secuencia 1. Las tramas posteriores deben estar en orden y contener un incremento de 1 respecto a la trama anterior. De lo contrario, el proceso de descifrado se detiene y registra un error.

**IV**  
El vector de inicialización (IV) de la trama. El SDK utiliza un método determinista para construir un IV diferente para cada trama del mensaje. Su longitud se especifica mediante el [conjunto de algoritmos](algorithms-reference.md) utilizado.

**Contenido cifrado**  
El contenido cifrado (texto cifrado) de la trama, devuelto por el [algoritmo de cifrado](algorithms-reference.md).

**Etiqueta de autenticación**  
El valor de autenticación de la trama. Se utiliza para autenticar la trama completa.


**Estructura de cuerpo con trama, trama final**  

| Campo | Longitud, en bytes | 
| --- | --- | 
| [Sequence Number End](#body-framed-final-sequence-number-end) | 4 | 
| [Sequence Number](#body-framed-final-sequence-number) | 4 | 
| [IV](#body-framed-final-iv) | Variable. Equivalente al valor especificado en el byte de [IV Length](#header-iv-length) del encabezado. | 
| [Encrypted Content Length](#body-framed-final-content-length) | 4 | 
| [Encrypted Content](#body-framed-final-content) | Variable. Equivalente al valor especificado en los últimos 4 bytes (Encrypted Content Length). | 
| [Authentication Tag](#body-framed-final-tag) | Variable. Se determina mediante el algoritmo utilizado, según lo especificado en el [Algorithm ID](#header-algorithm-id) del encabezado. | 

**Final del número de secuencia**  
Un indicador de la trama final. El valor se codifica como los 4 bytes `FF FF FF FF` en notación hexadecimal.

**Número de secuencia**  
El número secuencial de la trama. Es un número de contador incremental para la trama. Se trata de un valor de 4 bytes interpretado como un entero sin signo de 32 bits.  
Los datos con trama deben comenzar en el número de secuencia 1. Las tramas posteriores deben estar en orden y contener un incremento de 1 respecto a la trama anterior. De lo contrario, el proceso de descifrado se detiene y registra un error.

**IV**  
El vector de inicialización (IV) de la trama. El SDK utiliza un método determinista para construir un IV diferente para cada trama del mensaje. La longitud del IV se especifica mediante el [conjunto de algoritmos](algorithms-reference.md).

**Longitud del contenido cifrado**  
La longitud del contenido cifrado. Se trata de un valor de 4 bytes interpretado como un entero sin signo de 32 bits que especifica el número de bytes que incluyen el contenido cifrado para la trama.

**Contenido cifrado**  
El contenido cifrado (texto cifrado) de la trama, devuelto por el [algoritmo de cifrado](algorithms-reference.md).

**Etiqueta de autenticación**  
El valor de autenticación de la trama. Se utiliza para autenticar la trama completa.

## Estructura del pie de página
<a name="footer-structure"></a>

Cuando se utilizan [algoritmos con firma](algorithms-reference.md), el formato de mensaje contiene un pie de página. El pie de página del mensaje contiene una [firma digital](concepts.md#digital-sigs) calculada con el encabezado y el cuerpo del mensaje. En la siguiente tabla se describen los campos que componen el pie de página. Los bytes se anexan en el orden mostrado La estructura del pie de página del mensaje es la misma en las versiones 1 y 2 del formato de mensaje.


**Estructura del pie de página**  

| Campo | Longitud, en bytes | 
| --- | --- | 
| [Signature Length](#footer-signature-length) | 2 | 
| [Signature](#footer-signature) | Variable. Equivalente al valor especificado en los últimos 2 bytes (Signature Length). | 

**Longitud de la firma**  
La longitud de la firma. Se trata de un valor de 2 bytes interpretado como un entero sin signo de 16 bits que especifica el número de bytes que contienen la firma.

**Firma**  
La firma.

# AWS Encryption SDK ejemplos de formatos de mensajes
<a name="message-format-examples"></a>


|  | 
| --- |
|  La información de esta página le servirá de referencia para crear su propia biblioteca de cifrado compatible con el AWS Encryption SDK. Si no está creando su propia biblioteca de cifrado compatible, es probable que no necesite esta información. Para usarlo AWS Encryption SDK en uno de los lenguajes de programación compatibles, consulte[Lenguajes de programación](programming-languages.md). Para ver la especificación que define los elementos de una AWS Encryption SDK implementación adecuada, consulte la [AWS Encryption SDK especificación](https://github.com/awslabs/aws-encryption-sdk-specification/) en GitHub.  | 

En los temas siguientes se muestran ejemplos del formato de los AWS Encryption SDK mensajes. Cada ejemplo muestra los bytes sin procesar, en notación hexadecimal, seguidos de una descripción de lo que representan esos bytes.

**Topics**
+ [

## Datos con trama (formato de mensaje versión 1)
](#example-framed)
+ [

## Datos con trama (formato de mensaje versión 2)
](#example-framed-2)
+ [

## Datos sin trama (formato de mensaje versión 1)
](#example-nonframed)

## Datos con trama (formato de mensaje versión 1)
<a name="example-framed"></a>

En el siguiente ejemplo se muestra el formato del mensaje de los datos con trama en el [formato de mensaje versión 1](message-format.md).

```
+--------+
| Header |
+--------+
01                                         Version (1.0)
80                                         Type (128, customer authenticated encrypted data)
0378                                       Algorithm ID (see Referencia 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
```

## Datos con trama (formato de mensaje versión 2)
<a name="example-framed-2"></a>

En el siguiente ejemplo se muestra el formato del mensaje de los datos con trama en el [formato de mensaje versión 2](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
```

## Datos sin trama (formato de mensaje versión 1)
<a name="example-nonframed"></a>

En el siguiente ejemplo se muestra el formato de mensaje de los datos sin trama.

**nota**  
Siempre que sea posible, utilice datos con trama. Solo AWS Encryption SDK admite datos no enmarcados para uso tradicional. Algunas implementaciones lingüísticas del aún AWS Encryption SDK pueden generar texto cifrado sin marcos. Todas las implementaciones de idiomas compatibles pueden descifrar texto cifrado con trama y sin trama.

```
+--------+
| Header |
+--------+
01                                         Version (1.0)
80                                         Type (128, customer authenticated encrypted data)
0378                                       Algorithm ID (see Referencia 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
```

# Referencia de datos autenticados adicionales (AAD) del cuerpo para el AWS Encryption SDK
<a name="body-aad-reference"></a>


|  | 
| --- |
|  La información de esta página le servirá de referencia para crear su propia biblioteca de cifrado compatible con el AWS Encryption SDK. Si no está creando su propia biblioteca de cifrado compatible, es probable que no necesite esta información. Para usarlo AWS Encryption SDK en uno de los lenguajes de programación compatibles, consulte. [Lenguajes de programación](programming-languages.md) Para ver la especificación que define los elementos de una AWS Encryption SDK implementación adecuada, consulte la [AWS Encryption SDK especificación](https://github.com/awslabs/aws-encryption-sdk-specification/) en GitHub.  | 

Debe proporcionar información autenticada adicional (AAD) al [algoritmo AES-GCM](algorithms-reference.md) para cada operación criptográfica. Esto es válido para [datos del cuerpo con o sin trama](message-format.md#body-structure). Para obtener más información sobre el AAD y su uso en Galois/Counter modo (GCM), consulte [Recomendaciones para los modos de operación con cifrado por bloques: Galois/Counter modo (GCM) y GMAC](https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf).

En la siguiente tabla se describen los campos que componen la AAD del cuerpo. Los bytes se anexan en el orden mostrado


**Estructura de la AAD del cuerpo**  

| Campo | Longitud, en bytes | 
| --- | --- | 
| [Message ID](#body-aad-message-id) | 16 | 
| [Body AAD Content](#body-aad-content) | Variable. Consulte Body AAD Content en la siguiente lista. | 
| [Sequence Number](#body-aad-sequence-number) | 4 | 
| [Content Length](#body-aad-content-length) | 8 | 

**ID del mensaje**  
El mismo valor de [Message ID](message-format.md#header-message-id) establecido en el encabezado del mensaje.

**Cuerpo: contenido AAD**  
Un valor con codificación UTF-8 determinado por el tipo de datos del cuerpo utilizados.  
Para [datos sin trama](message-format.md#body-no-framing), utilice el valor `AWSKMSEncryptionClient Single Block`.  
Para las tramas normales en los [datos con trama](message-format.md#body-framing), utilice el valor `AWSKMSEncryptionClient Frame`.  
Para la trama final en los [datos con trama](message-format.md#body-framing), utilice el valor `AWSKMSEncryptionClient Final Frame`.

**Número de secuencia**  
Un valor de 4 bytes interpretado como un entero sin signo de 32 bits.  
Para los [datos con trama](message-format.md#body-framing), este es el número de secuencia de la trama.  
Para [datos sin trama](message-format.md#body-no-framing), utilice el valor 1, codificado como `00 00 00 01` de 4 bytes en notación hexadecimal.

**Longitud del contenido**  
La longitud, en bytes, de los datos en texto no cifrado proporcionados al algoritmo para el cifrado. Se trata de un valor de 8 bytes interpretado como un entero sin signo de 64 bits.

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


|  | 
| --- |
|  La información de esta página le servirá de referencia para crear su propia biblioteca de cifrado compatible con el AWS Encryption SDK. Si no está creando su propia biblioteca de cifrado compatible, es probable que no necesite esta información. Para utilizarla AWS Encryption SDK en uno de los lenguajes de programación compatibles, consulte[Lenguajes de programación](programming-languages.md). Para ver la especificación que define los elementos de una AWS Encryption SDK implementación adecuada, consulte la [AWS Encryption SDK especificación](https://github.com/awslabs/aws-encryption-sdk-specification/) en GitHub.  | 

Si va a crear su propia biblioteca que pueda leer y escribir textos cifrados que sean compatibles con ella AWS Encryption SDK, tendrá que entender cómo AWS Encryption SDK implementa los conjuntos de algoritmos compatibles para cifrar los datos sin procesar. 

 AWS Encryption SDK Es compatible con los siguientes conjuntos de algoritmos. Todos los conjuntos de algoritmos AES-GCM tienen un [vector de inicialización](IV-reference.md) de 12 bytes y una etiqueta de autenticación AES-GCM de 16 bytes. El conjunto de algoritmos predeterminado varía según la AWS Encryption SDK versión y la política de compromiso clave seleccionada. Para obtener más información, consulte [Política de compromiso y conjunto de algoritmos](troubleshooting-migration.md#configuration-conflict_1).


**AWS Encryption SDK Conjuntos de algoritmos**  

| Algorithm ID | Versión de formato de mensaje | Algoritmo de cifrado | Longitud de la clave de datos (bits) | Algoritmo de derivación de clave | Algoritmo de firma | Algoritmo de compromiso clave | Longitud de los datos del conjunto de algoritmos (bytes) | 
| --- | --- | --- | --- | --- | --- | --- | --- | 
| 05 78 | 0x02 | AES-GCM | 256 | HKDF con SHA-512 | ECDSA con P-384 y SHA-384 | HKDF con SHA-512 | 32 (compromiso clave) | 
| 04 78 | 0x02 | AES-GCM | 256 | HKDF con SHA-512 | Ninguno | HKDF con SHA-512 | 32 (compromiso clave) | 
| 03 78 | 0x01 | AES-GCM | 256 | HKDF con SHA-384 | ECDSA con P-384 y SHA-384 | Ninguno | N/A | 
| 03 46 | 0x01 | AES-GCM | 192 | HKDF con SHA-384 | ECDSA con P-384 y SHA-384 | Ninguno | N/A | 
| 02 14 | 0x01 | AES-GCM | 128 | HKDF con SHA-256 | ECDSA con P-256 y SHA-256 | Ninguno | N/A | 
| 01 78 | 0x01 | AES-GCM | 256 | HKDF con SHA-256 | Ninguno | Ninguno | N/A | 
| 01 46 | 0x01 | AES-GCM | 192 | HKDF con SHA-256 | Ninguno | Ninguno | N/A | 
| 01 14 | 0x01 | AES-GCM | 128 | HKDF con SHA-256 | Ninguno | Ninguno | N/A | 
| 00 78 | 0x01 | AES-GCM | 256 | Ninguno | Ninguna | Ninguno | N/A | 
| 00 46 | 0x01 | AES-GCM | 192 | Ninguno | Ninguna | Ninguno | N/A | 
| 00 14 | 0x01 | AES-GCM | 128 | Ninguno | Ninguna | Ninguno | N/A | 

**Algorithm ID**  
Un valor hexadecimal de 2 bytes que identifica de forma exclusiva una implementación del algoritmo. Este valor se almacena en el [encabezado del mensaje](message-format.md#header-structure) del texto cifrado.

**Versión de formato de mensaje**  
La versión del formato de mensaje. Los conjuntos de algoritmos con compromiso clave utilizan el formato de mensaje de la versión 2 (0x02). Los conjuntos de algoritmos sin compromiso clave utilizan el formato de mensaje de la versión 1 (0x01). 

**Longitud de los datos del conjunto de algoritmos**  
La longitud en bytes de los datos específicos del conjunto de algoritmos. Este campo solo se admite en la versión 2 del formato de mensaje (0x02). En la versión 2 del formato de mensaje (0x02), estos datos aparecen en el campo `Algorithm suite data` del encabezado del mensaje. Los conjuntos de algoritmos que admiten el [compromiso clave](concepts.md#key-commitment) utilizan 32 bytes para la cadena de compromiso clave. Para obtener más información, consulte **Algoritmo de compromiso clave** en esta lista.

**Longitud de la clave de datos**  
La longitud de la [clave de datos](concepts.md#DEK) en bits. El AWS Encryption SDK admite claves de 256, 192 y 128 bits. La clave de datos se genera mediante un [conjunto de claves](concepts.md#keyring) o una clave maestra.   
En algunas implementaciones, esta clave de datos se utiliza como entrada para una función de derivación de extract-and-expand claves (HKDF) basada en HMAC. El resultado de la HKDF se utiliza como clave de cifrado de datos en el algoritmo de cifrado. Para obtener más información, consulte **Algoritmo de derivación de clave** en esta lista.

**Algoritmo de cifrado**  
El nombre y el modo del algoritmo de cifrado que se utilizó. Los conjuntos de algoritmos AWS Encryption SDK utilizan el algoritmo de cifrado avanzado (AES) con Galois/Counter modo (GCM).

**Algoritmo de compromiso clave**  
El algoritmo utilizado para calcular la cadena de compromiso clave. El resultado se almacena en el campo `Algorithm suite data` del encabezado del mensaje y se utiliza para validar la clave de datos del compromiso clave.  
Para obtener una explicación técnica sobre cómo añadir un compromiso clave a un conjunto de algoritmos, consulte [Key](https://eprint.iacr.org/2020/1153) Committing AEADs in Cryptology ePrint Archive. 

**Algoritmo de derivación de clave**  
La función de derivación de extract-and-expand claves basada en HMAC (HKDF) utilizada para obtener la clave de cifrado de datos. AWS Encryption SDK [Utiliza la HKDF definida en el RFC 5869.](https://tools.ietf.org/html/rfc5869)   
**Conjuntos de algoritmos sin compromiso clave** (ID de algoritmo `01xx` – `03xx`)  
+ La función hash que se utiliza es SHA-384 o SHA-256, según el conjunto de algoritmos.
+ Para el paso de extracción:
  + No se utiliza sal. Según el RFC, la sal se establece en una cadena de ceros. La longitud de la cadena es igual a la longitud de la salida de la función hash, es decir, de 48 bytes para SHA-384 y de 32 bytes para SHA-256.
  + El material de entrada para las claves es la clave de datos del conjunto de claves o proveedor de claves maestras.
+ Para el paso de expansión:
  + La clave pseudoaleatoria de entrada es el resultado del paso de extracción.
  + La información de entrada es una concatenación del ID de algoritmo seguido del ID de mensaje (en ese orden).
  + La longitud del material de salida para las claves es la **Longitud de la clave de datos**. Este resultado se utiliza como clave de cifrado de datos en el algoritmo de cifrado.
**Conjuntos de algoritmos con compromiso clave** (ID de algoritmo `04xx` – `05xx`)  
+ La función hash que se utiliza es SHA-512.
+ Para el paso de extracción:
  + La sal es un valor aleatorio criptográfico de 256 bits. En la [versión 2 del formato de mensaje](message-format.md) (0x02), este valor se almacena en el campo `MessageID`.
  + El material inicial para las claves es la clave de datos del conjunto de claves o proveedor de claves maestras.
+ Para el paso de expansión:
  + La clave pseudoaleatoria de entrada es el resultado del paso de extracción.
  + La etiqueta de clave son los bytes codificados en UTF-8 de la cadena `DERIVEKEY` en el orden de bytes big endian.
  + La información de entrada es una concatenación del ID de algoritmo seguido de la etiqueta de clave (en ese orden).
  + La longitud del material de salida para las claves es la **Longitud de la clave de datos**. Este resultado se utiliza como clave de cifrado de datos en el algoritmo de cifrado.

**Versión de formato de mensaje**  
La versión del formato de mensaje utilizada con el conjunto de algoritmos. Para obtener más información, consulte [Referencia de formato de mensajes](message-format.md).

**Algoritmo de firma**  
El algoritmo de firma que se utiliza para generar una [firma digital](concepts.md#digital-sigs) sobre el encabezado y el cuerpo del texto cifrado. AWS Encryption SDK Utiliza el algoritmo de firma digital de curva elíptica (ECDSA) con las siguientes especificaciones:  
+ La curva elíptica utilizada es la curva P-384 o P-256, según lo especificado en el ID de algoritmo. Estas curvas se definen en [Digital Signature Standard (DSS) (FIPS PUB 186-4)](http://doi.org/10.6028/NIST.FIPS.186-4).
+ La función hash que se utiliza es SHA-384 (con la curva P-384) o SHA-256 (con la curva P-256).

# AWS Encryption SDK referencia vectorial de inicialización
<a name="IV-reference"></a>


|  | 
| --- |
|  La información de esta página le servirá de referencia para crear su propia biblioteca de cifrado compatible con el AWS Encryption SDK. Si no está creando su propia biblioteca de cifrado compatible, es probable que no necesite esta información. Para utilizarla AWS Encryption SDK en uno de los lenguajes de programación compatibles, consulte[Lenguajes de programación](programming-languages.md). Para ver la especificación que define los elementos de una AWS Encryption SDK implementación adecuada, consulte la [AWS Encryption SDK especificación](https://github.com/awslabs/aws-encryption-sdk-specification/) en GitHub.  | 

 AWS Encryption SDK Proporciona los [vectores de inicialización](https://en.wikipedia.org/wiki/Initialization_vector) (IVs) que requieren todos los [conjuntos de algoritmos](algorithms-reference.md) compatibles. El SDK utiliza números secuenciales con trama para construir un IV de tal forma que no puede haber dos tramas en el mismo mensaje que tengan el mismo IV. 

Cada IV de 96 bits (12 bytes) se crea a partir de dos matrices de bytes big-endian concatenadas en el orden que se indica a continuación:
+ 64 bits: 0 (reservado para uso futuro)
+ 32 bits: número secuencial de la trama. Para la etiqueta de autenticación del encabezado, este valor es todo ceros.

Antes de introducir el almacenamiento en [caché de claves de datos](data-key-caching.md), AWS Encryption SDK siempre utilizaban una nueva clave de datos para cifrar cada mensaje y se generaba todo de forma aleatoria. IVs Las claves de datos generadas aleatoriamente IVs eran criptográficamente seguras porque las claves de datos nunca se reutilizaban. Cuando el SDK introdujo el almacenamiento en caché de claves de datos, que reutiliza intencionadamente las claves de datos, cambiamos la forma en que el SDK genera las claves. IVs 

El uso del método determinista, IVs que no se puede repetir en un mensaje, aumenta considerablemente el número de invocaciones que se pueden ejecutar de forma segura con una única clave de datos. Además, las claves de datos que se almacenan en caché siempre utilizan un conjunto de algoritmos con una [función de derivación de clave](https://en.wikipedia.org/wiki/Key_derivation_function). El uso de una IV determinista con una función de derivación de claves pseudoaleatorias para obtener claves de cifrado a partir de una clave de datos permite cifrar 2^32 mensajes sin AWS Encryption SDK sobrepasar los límites criptográficos. 

# AWS KMS Detalles técnicos del llavero jerárquico
<a name="hierarchical-keyring-details"></a>

El conjunto de [claves AWS KMS jerárquico](use-hierarchical-keyring.md) utiliza una clave de datos única para cifrar cada mensaje y cifra cada clave de datos con una clave de empaquetado única derivada de una clave de rama activa. Utiliza una [derivación de claves](https://nvlpubs.nist.gov/nistpubs/SpecialPublications/NIST.SP.800-108r1.pdf) en modo contador con una función pseudoaleatoria con el HMAC SHA-256 para obtener la clave de encapsulamiento de 32 bytes con las siguientes entradas.
+ Una sal de asignación al azar de 16 bytes
+ La clave de rama activa
+ El valor [codificado en UTF-8](https://en.wikipedia.org/wiki/UTF-8) para el identificador del proveedor de claves "» aws-kms-hierarchy

El conjunto de claves jerárquico utiliza la clave de encapsulamiento derivada para cifrar una copia de la clave de datos de texto no cifrado mediante el AES-GCM-256 con una etiqueta de autenticación de 16 bytes y las siguientes entradas.
+ La clave de encapsulamiento derivada se utiliza como clave de cifrado AES-GCM
+ La clave de datos se utiliza como mensaje AES-GCM
+ Se utiliza un vector de inicialización aleatoria (IV) de 12 bytes como AES-GCM IV
+ Datos autenticados adicionales (AAD) que contienen los siguientes valores serializados.    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/es_es/encryption-sdk/latest/developer-guide/hierarchical-keyring-details.html)