AWS Encryption SDK referencia de formato de mensaje - AWS Encryption SDK

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 de formato de mensaje

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, consulteLenguajes de programación.

Para ver la especificación que define los elementos de una AWS Encryption SDK implementación adecuada, consulte la AWS Encryption SDK especificación en GitHub.

Las operaciones de cifrado AWS Encryption SDK devuelven una estructura de datos única o un mensaje cifrado 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 que admite el AWS Encryption SDK utilizan una de las dos versiones de formato de mensaje. Los conjuntos de algoritmos sin compromiso clave 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.

Estructura del encabezado

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 1

Longitud (bytes)

Formato de mensaje versión 2

Longitud (bytes)

Version 1 1
Type 1 No presente
Algorithm ID 2 2.
Message ID 16 32
AAD Length

2

Cuando el contexto de cifrado está vacío, el valor del campo de AAD longitud de 2 bytes es 0.

2

Cuando el contexto de cifrado está vacío, el valor del campo de AAD longitud de 2 bytes es 0.

AAD

Variable. La longitud de este campo aparece en los 2 bytes anteriores (campo AAD Longitud).

Cuando el contexto de cifrado está vacío, no hay ningún AAD campo en el encabezado.

Variable. La longitud de este campo aparece en los 2 bytes anteriores (campo AAD Longitud).

Cuando el contexto de cifrado está vacío, no hay ningún AAD campo en el encabezado.

Encrypted Data Key Count 2 2.
Encrypted Data Key(s) 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 1 1
Reserved 4 No presente
IV Length 1 No presente
Frame Length 4 4
Algorithm Suite Data No presente Variable. Se determina mediante el algoritmo que generó el mensaje.
Header Authentication Variable. Se determina mediante el algoritmo que generó el mensaje. Variable. Se determina mediante el algoritmo 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.

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.

AADLongitud

La longitud de los datos autenticados adicionales (AAD). Es un valor de 2 bytes interpretado como un entero sin signo de 16 bits que especifica el número de bytes que contienen el. AAD

Cuando el contexto de cifrado está vacío, el valor del campo AAD Longitud es 0.

AAD

La información autenticada adicional. AADSe trata de una codificación del contexto de cifrado, una matriz de pares clave-valor en la que cada clave y cada valor es una cadena de UTF 8 caracteres codificados. El contexto de cifrado se convierte en una secuencia de bytes y se utiliza como valor. AAD Cuando el contexto de cifrado está vacío, no hay ningún AAD campo en el encabezado.

Cuando se utilizan algoritmos con firma, 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 la versión SEC 1 2.0 y, a continuación, codificado en base64. El contexto de cifrado puede contener valores adicionales, pero la longitud máxima del construido AAD es de 2^16 - 1 bytes.

En la siguiente tabla se describen los campos que forman el. AAD Los pares clave-valor se ordenan, por clave, en orden ascendente según un código de UTF -8 caracteres. Los bytes se anexan en el orden mostrado

AADEstructura
Campo Longitud (bytes)
Key-Value Pair Count 2
Key Length 2.
Key Variable. Equivalente al valor especificado en los últimos 2 bytes (Key Length).
Value Length 2
Value Variable. Equivalente al valor especificado en los últimos 2 bytes (Value Length).
Recuento de pares clave-valor

El número de pares clave-valor en. AAD Es un valor de 2 bytes interpretado como un entero sin signo de 16 bits que especifica el número de pares clave-valor en. AAD El número máximo de pares clave-valor en el es 2^16 - 1. AAD

Si no hay ningún contexto de cifrado o el contexto de cifrado está vacío, este campo no está presente en la estructura. AAD

Longitud de la 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. Es una secuencia de UTF -8 bytes codificados.

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. Es una secuencia de UTF -8 bytes codificados.

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
Campo Longitud (bytes)
Key Provider ID Length 2
Key Provider ID Variable. Equivalente al valor especificado en los últimos 2 bytes (Key Provider ID Length).
Key Provider Information Length 2
Key Provider Information Variable. Equivalente al valor especificado en los últimos 2 bytes (Key Provider Information Length).
Encrypted Data Key Length 2
Encrypted Data Key Variable. Equivalente al valor especificado en los últimos 2 bytes (Encrypted Data Key Length).
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.

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.

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

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.

Conjunto de datos de algoritmos

Datos complementarios que necesita el algoritmo 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 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
Campo Longitud en la versión 1.0 (bytes) Longitud en la versión 2.0 (bytes)
IV Variable. Se determina en función del valor en bytes del IV del algoritmo que generó el mensaje. N/A
Authentication Tag Variable. Se determina en función del valor en bytes de la etiqueta de autenticación del algoritmo que generó el mensaje. Variable. Se determina en función del valor en bytes de la etiqueta de autenticación del algoritmo que generó el mensaje.
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

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.

Datos sin trama

Los datos no enmarcados se cifran en un único blob con un IV y un cuerpo únicos. AAD

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.

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 Variable. Equivalente al valor especificado en el byte de IV Length del encabezado.
Encrypted Content Length 8
Encrypted Content Variable. Equivalente al valor especificado en los últimos 8 bytes (Encrypted Content Length).
Authentication Tag Variable. Su valor lo determina la implementación del algoritmo utilizada.
IV

El vector de inicialización (IV) que se va a utilizar con el algoritmo de cifrado.

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.

nota

La implementación en Java de esto restringe SDK 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.

Etiqueta de autenticación

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

Datos con trama

En los datos con trama, los datos en texto no cifrado se dividen en partes de igual longitud denominadas tramas. AWS Encryption SDK Cifra cada fotograma por separado con una IV y un cuerpo AAD únicos.

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.

La longitud de la trama, que es la longitud del contenido cifrado 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 4
IV Variable. Equivalente al valor especificado en el byte de IV Length del encabezado.
Encrypted Content Variable. Equivalente al valor especificado en el Frame Length del encabezado.
Authentication Tag Variable. Se determina mediante el algoritmo utilizado, según lo especificado en el 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. SDKUtiliza un método determinista para construir un IV diferente para cada cuadro del mensaje. Su longitud se especifica mediante el conjunto de algoritmos utilizado.

Contenido cifrado

El contenido cifrado (texto cifrado) de la trama, devuelto por el algoritmo de cifrado.

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 4
Sequence Number 4
IV Variable. Equivalente al valor especificado en el byte de IV Length del encabezado.
Encrypted Content Length 4
Encrypted Content Variable. Equivalente al valor especificado en los últimos 4 bytes (Encrypted Content Length).
Authentication Tag Variable. Se determina mediante el algoritmo utilizado, según lo especificado en el 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. SDKUtiliza un método determinista para construir un IV diferente para cada cuadro del mensaje. La longitud del IV se especifica mediante el conjunto de algoritmos.

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.

Etiqueta de autenticación

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

Cuando se utilizan algoritmos con firma, el formato de mensaje contiene un pie de página. El pie de página del mensaje contiene una firma digital 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 2
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.