Información detallada sobre el almacenamiento en caché de claves de datos - 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.

Información detallada sobre el almacenamiento en caché de claves de datos

La mayoría de las aplicaciones pueden utilizar la implementación predeterminada de almacenamiento en caché de claves de datos sin necesidad de escribir código personalizado. En esta sección se describen la implementación predeterminada y algunos detalles sobre las opciones.

Funcionamiento del almacenamiento en caché de claves de datos

Cuando se utiliza el almacenamiento en caché de claves de datos en una solicitud de cifrado o descifrado de datos, el AWS Encryption SDK busca primero en la caché si hay alguna clave de datos que coincida con la solicitud. Si encuentra una coincidencia válida, utiliza la clave de datos almacenada en caché para cifrar los datos. De lo contrario, genera una nueva clave de datos, tal y como lo haría sin la caché.

El almacenamiento en caché de claves de datos no se utiliza para datos de tamaño desconocido, como, por ejemplo, los datos transmitidos en streaming. Esto permite que el CMM de almacenamiento en caché aplique correctamente el umbral de bytes máximos. Para evitar este comportamiento, agregue el tamaño del mensaje a la solicitud de cifrado.

Además de una caché, el almacenamiento en caché de claves de datos utiliza un administrador de materiales criptográficos de almacenamiento (almacenamiento en caché CMM). El CMM de almacenamiento en caché es un administrador de materiales criptográficos (CMM) especializado que interactúa con una caché y con un CMM subyacente. (Cuando especifica un proveedor de claves maestras o un llavero, el AWS Encryption SDK le crea un CMM predeterminado). El CMM almacenamiento almacena en caché las claves de datos que el CMM subyacente devuelve. El CMM de almacenamiento en caché también aplica los umbrales de seguridad de caché establecidos.

Para impedir que se seleccione una clave de datos incorrecta en la caché, todos los CMM de almacenamiento en caché compatibles requieren que las siguientes propiedades de los materiales criptográficos almacenados en caché coincidan con la solicitud de materiales.

nota

El AWS Encryption SDK almacena en caché las claves de datos únicamente cuando el conjunto de algoritmos utiliza una función de derivación de clave.

Los siguientes flujos de trabajo muestran cómo se procesa una solicitud de cifrado de datos con y sin almacenamiento en caché de las claves de datos. Muestran cómo se utilizan en el proceso los componentes de almacenamiento en caché que crea, lo que incluye la caché y el CMM de almacenamiento en caché.

Cifrado de datos sin almacenamiento en caché

Para obtener materiales de cifrado sin almacenamiento en caché:

  1. Una aplicación pide al AWS Encryption SDK que cifre los datos.

    La solicitud especifica un proveedor de claves maestras o un llavero. El AWS Encryption SDK crea un CMM predeterminado que interactúa con el proveedor de claves maestras o el llavero.

  2. El AWS Encryption SDK pide al CMM los materiales de cifrado (obtener los materiales criptográficos).

  3. El CMM solicita a su keyring (C y JavaScript) o a su proveedor de claves maestras (Java y Python) los materiales criptográficos. Esto podría requerir una llamada a un servicio criptográfico como AWS Key Management Service (AWS KMS). El CMM devuelve los materiales de cifrado al AWS Encryption SDK.

  4. El AWS Encryption SDK usa la clave de datos de texto no cifrado para cifrar los datos. Almacena los datos cifrados y las claves de datos cifrados en un mensaje cifrado, que devuelve al usuario.

Cifrado de datos sin almacenamiento en caché

Cifrado de datos con almacenamiento en caché

Para obtener materiales de cifrado con almacenamiento en caché de clave de datos:

  1. Una aplicación pide al AWS Encryption SDK que cifre los datos.

    La solicitud especifica un administrador de materiales criptográficos de almacenamiento (CMM de almacenamiento en caché) que está asociado a un administrador de materiales criptográficos (CMM) subyacente. Cuando especifica un proveedor de claves maestras o un llavero, el AWS Encryption SDK le crea un CMM predeterminado.

  2. El SDK solicita los materiales de cifrado al CMM de almacenamiento en caché especificado.

  3. El CMM de almacenamiento en caché solicita materiales de cifrado de la caché.

    1. Si la caché encuentra una coincidencia, actualiza los valores de antigüedad y uso de la entrada de caché coincidente y devuelve los materiales de cifrado almacenados en caché al CMM de almacenamiento en caché.

      Si la entrada de caché se ajusta a sus umbrales de seguridad, el CMM de almacenamiento en caché se la devuelve al SDK. De lo contrario, indica a la caché que expulse la entrada de la caché y continúa como si no hubiese encontrado ninguna coincidencia.

    2. Si la caché no encuentra ninguna coincidencia válida, el CMM de almacenamiento en caché pide al CMM subyacente que genere una nueva clave de datos.

      El CMM subyacente obtiene los materiales criptográficos de su llavero (C y JavaScript) o proveedor de claves maestras (Java y Python). Esto podría requerir una llamada a un servicio como AWS Key Management Service. El CMM subyacente devuelve las copias de texto no cifrado y cifrado de la clave de datos al CMM de almacenamiento en caché.

      El CMM de almacenamiento en caché guarda los nuevos materiales de cifrado en la caché.

  4. El CMM de almacenamiento en caché devuelve los materiales de cifrado al AWS Encryption SDK.

  5. El AWS Encryption SDK usa la clave de datos de texto no cifrado para cifrar los datos. Almacena los datos cifrados y las claves de datos cifrados en un mensaje cifrado, que devuelve al usuario.

Cifrado de datos con almacenamiento en caché de claves de datos

Creación de una caché de materiales criptográficos

El AWS Encryption SDK define los requisitos de una caché de materiales criptográficos que se usan en el almacenamiento en caché de claves de datos. También proporciona una caché local, que es una caché configurable, en memoria y usada menos recientemente (LRU). Para crear una instancia de la caché local, utilice el constructor LocalCryptoMaterialsCache en Java y Python, la función getLocalCryptographicMaterialsCache en JavaScript o el constructor aws_cryptosdk_materials_cache_local_new en C.

La caché local incluye la lógica para la administración básica de la caché, lo que incluye la adición, expulsión y coincidencia de entradas almacenadas en la caché, así como para realizar el mantenimiento de la caché. No es necesario escribir ninguna lógica personalizada de administración de la caché. Puede utilizar la caché local tal cual, personalizarla o sustituirla por cualquier otra caché compatible.

Al crear una caché local, establece su capacidad, es decir, el número máximo de entradas que puede contener esa caché. Este ajuste ayuda a diseñar una caché eficiente con una reutilización limitada de las claves de datos.

El SDK de cifrado de AWS para Java y el SDK de cifrado de AWS para Python también proporcionan una caché de materiales criptográficos nula (NullCryptoMaterialsCache). La NullCryptoMaterialsCache devuelve un error para todas las operaciones de GET y no responde a las operaciones de PUT. Puede utilizar la NullCryptoMaterialsCache en las pruebas o para deshabilitar temporalmente el almacenamiento en caché en una aplicación que incluya código de almacenamiento en caché.

En el AWS Encryption SDK, cada caché de materiales criptográficos está asociada a un administrador de materiales criptográficos de almacenamiento en caché (CMM de almacenamiento en caché). El CMM de almacenamiento en caché obtiene las claves de datos de la memoria caché, coloca las claves de datos en la caché y aplica los umbrales de seguridad establecidos. Cuando se crea un CMM de almacenamiento en caché, especifica la caché que este utiliza, así como el CMM subyacente o proveedor de claves maestras que genera las claves de datos almacenadas en esa caché.

Creación de un administrador de materiales criptográficos de almacenamiento en caché

Para habilitar el almacenamiento en caché de claves de datos, cree una caché y un administrador de materiales criptográficos de almacenamiento en caché (CMM de almacenamiento en caché). A continuación, en las solicitudes de cifrado o descifrado de datos, especifique un CMM de almacenamiento en caché, en lugar de un administrador de materiales criptográficos (CMM) estándar o un proveedor de claves maestras o llavero.

Existen dos tipos de CMM. Ambos obtienen las claves de datos (y el material criptográfico relacionado) pero de maneras distintas, como se indica a continuación:

  • Un CMM está asociado a un llavero (C o JavaScript) o un proveedor de claves maestras (Java y Python). Cuando el SDK solicita al CMM materiales de cifrado o descifrado, el CMM obtiene los materiales de su llavero o proveedor de claves maestras. En Java y Python, el CMM utiliza estas claves maestras para generar, cifrar o descifrar las claves de datos. En C y JavaScript, el llavero genera, cifra y devuelve los materiales criptográficos.

  • Un CMM de almacenamiento en caché está asociado a una caché, como una caché local y un CMM subyacente. Cuando el SDK solicita materiales criptográficos al CMM, el CMM de almacenamiento en caché intenta obtenerlos en la caché. Si no encuentra ninguna coincidencia, el CMM de almacenamiento en caché pide los materiales al CMM subyacente. A continuación, almacena los nuevos materiales criptográficos antes de devolvérselos al intermediario.

El CMM de almacenamiento en caché también aplica los umbrales de seguridad que establece para cada entrada de la caché. Dado que el CMM de almacenamiento en caché establece y aplica los umbrales de seguridad, puede utilizar cualquier caché compatible, aunque no se haya diseñado para materiales confidenciales.

¿Qué es una entrada en la caché de claves de datos?

Con el almacenamiento en caché de claves de datos, estas y sus materiales criptográficos relacionados se almacenan en una caché. Cada entrada incluye los elementos que se indican a continuación. Esta información puede resultar útil al decidir si se va a utilizar la característica de almacenamiento en caché de claves de datos y al establecer los umbrales de seguridad en un administrador de materiales criptográficos de almacenamiento (CMM de almacenamiento en caché).

Entradas almacenadas en caché para solicitudes de cifrado

Las entradas que se agregan a una caché de claves de datos a consecuencia de una operación de cifrado incluyen los siguientes elementos:

  • Clave de datos en texto no cifrado

  • Claves de datos cifrados (una o más)

  • Contexto de cifrado

  • Clave de firma de mensaje (si procede)

  • Conjunto de algoritmos

  • Metadatos, incluidos los contadores de uso para aplicar los umbrales de seguridad

Entradas almacenadas en caché para solicitudes de descifrado

Las entradas que se agregan a una caché de claves de datos a consecuencia de una operación de descifrado incluyen los siguientes elementos:

  • Clave de datos en texto no cifrado

  • Clave de verificación de firma (si procede)

  • Metadatos, incluidos los contadores de uso para aplicar los umbrales de seguridad

Contexto de cifrado: cómo seleccionar las entradas de la caché

Puede especificar un contexto de cifrado en cualquier solicitud de cifrado de datos. Sin embargo, el contexto de cifrado desempeña una función especial en el almacenamiento en caché de claves de datos. Permite crear subgrupos de claves de datos en la caché, aunque las claves de datos se originen a partir del mismo CMM de almacenamiento en caché.

Un contexto de cifrado es un conjunto de pares de clave-valor que contienen datos no secretos arbitrarios. Durante el cifrado, el contexto de cifrado se vincula criptográficamente a los datos cifrados, de tal forma que se requiere el mismo contexto de cifrado para descifrar los datos. En el AWS Encryption SDK, el contexto de cifrado se almacena en el mensaje cifrado junto con los datos cifrados y las claves de datos.

Cuando se utiliza una caché de claves de datos, también se puede utilizar el contexto de cifrado para seleccionar claves de datos concretas almacenadas en la caché para las operaciones de cifrado. El contexto de cifrado se guarda en la entrada de la caché con la clave de datos (forma parte del ID de la entrada de la caché). Las claves de datos almacenadas en caché se reutilizan únicamente si contextos de cifrado coinciden. Si desea reutilizar determinadas claves de datos para una solicitud de cifrado, especifique el mismo contexto de cifrado. Si desea evitar estas claves de datos, especifique otro contexto de cifrado.

El contexto de cifrado siempre es opcional, pero se recomienda. Si no especifica un contexto de cifrado en la solicitud, se incluirá un contexto de cifrado vacío en el identificador de la entrada de la caché y se hará coincidir con cada solicitud.

¿Usa mi aplicación claves de datos almacenadas en caché?

El almacenamiento en caché de claves de datos es una estrategia de optimización que es muy eficaz en determinadas aplicaciones y cargas de trabajo. Sin embargo, debido a que conlleva cierto riesgo, es importante que determine primero hasta qué punto es probable que sea eficaz para su situación y luego decida si los beneficios compensan los riesgos.

Dado que el almacenamiento en caché de claves de datos reutiliza claves de datos, el efecto más evidente es que se reduce el número de llamadas para generar nuevas claves de datos. Cuando se implementa el almacenamiento en caché de claves de datos, el AWS Encryption SDK llama a la operación GenerateDataKey de AWS KMS solo para crear la clave de datos inicial y cuando la caché falla. Sin embargo, el almacenamiento en caché mejora el rendimiento perceptiblemente solo en el caso de aplicaciones que generen numerosas claves de datos con las mismas características, incluido el mismo contexto de cifrado y conjunto de algoritmos.

Para averiguar si la implementación del AWS Encryption SDK usa claves de datos de la caché, pruebe las siguientes técnicas.

  • En los registros de la infraestructura de clave maestra, consulte la frecuencia de las llamadas para crear nuevas claves de datos. Cuando existe un almacenamiento en caché de claves de datos efectivo, el número de llamadas para crear nuevas claves debe caer perceptiblemente. Por ejemplo, si usa un de proveedor de claves maestras o llavero de AWS KMS, busque en los registros de CloudTrail llamadas GenerateDataKey.

  • Compare los mensajes cifrados que el AWS Encryption SDK devuelve en respuesta a diferentes solicitudes de cifrado. Por ejemplo, si usa el SDK de cifrado de AWS para Java, compare el objeto ParsedCiphertext de diferentes llamadas de cifrado. En el SDK de cifrado de AWS para JavaScript, compare el contenido de la propiedad encryptedDataKeys de MessageHeader. Cuando se reutilizan claves de datos, las claves de datos cifradas del mensaje cifrado son idénticas.