Prácticas recomendadas para la AWS Encryption SDK - 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.

Prácticas recomendadas para la AWS Encryption SDK

El AWS Encryption SDK está diseñado para facilitarle la protección de sus datos utilizando los estándares y las prácticas recomendadas del sector. Si bien se seleccionan muchas de las prácticas recomendadas en los valores predeterminados, algunas son opcionales, pero se recomiendan siempre que sea práctico.

Uso de la versión más reciente

Cuando empiece a utilizar el AWS Encryption SDK, utilice la última versión disponible en su lenguaje de programación preferido. Si ha estado utilizando el AWS Encryption SDK, actualícelo a la versión más reciente lo antes posible. Esto garantiza que está utilizando la configuración recomendada y que aprovecha las nuevas propiedades de seguridad para proteger sus datos. Para obtener más información sobre las versiones compatibles, incluidas las directrices para la migración y la implementación, consulte Soporte y mantenimiento y Versiones del AWS Encryption SDK.

Si una nueva versión deja en desuso algunos elementos del código, sustitúyalos lo antes posible. Las advertencias de obsolescencia y los comentarios del código suelen recomendar una buena alternativa.

Para que las actualizaciones importantes sean más fáciles y menos propensas a errores, en ocasiones ofrecemos una versión temporal o de transición. Utilice estas versiones y la documentación que las acompaña para asegurarse de que puede actualizar su aplicación sin interrumpir el flujo de trabajo de producción.

Use valores predeterminados

El AWS Encryption SDK diseña las prácticas recomendadas en sus valores predeterminados. Siempre que sea posible, úselos. Para los casos en los que la configuración predeterminada no sea práctica, ofrecemos alternativas, como conjuntos de algoritmos sin firma. También ofrecemos oportunidades de personalización a los usuarios avanzados, como llaveros personalizados, proveedores de claves maestras y administradores de material criptográfico (CMM). Utilice estas alternativas avanzadas con cautela y pida a un ingeniero de seguridad que verifique sus opciones siempre que sea posible.

Cómo utilizar un contexto de cifrado

Para mejorar la seguridad de las operaciones criptográficas, incluya un contexto de cifrado con un valor significativo en todas las solicitudes de cifrado de datos. El uso de un contexto de cifrado es opcional, pero es una práctica criptográfica recomendada que le aconsejamos. Un contexto de cifrado proporciona datos autenticados adicionales (AAD) para el cifrado autenticado en el AWS Encryption SDK. Aunque no es secreto, el contexto de cifrado puede ayudarle a proteger la integridad y autenticidad de sus datos cifrados.

En el AWS Encryption SDK, solo se especifica un contexto de cifrado al cifrar. Al descifrar, el AWS Encryption SDK utiliza el contexto de cifrado del encabezado del mensaje cifrado que devuelve el AWS Encryption SDK. Antes de que la aplicación devuelva los datos en texto no cifrado, compruebe que el contexto de cifrado que proporcionó durante el cifrado esté incluido en el contexto de cifrado que se utilizó para descifrar el mensaje. Para obtener más información, consulte los ejemplos en su lenguaje de programación.

Cuando utiliza la interfaz de línea de comandos, el AWS Encryption SDK verifica el contexto de cifrado por usted.

Proteja sus claves de empaquetado

El AWS Encryption SDK genera una clave de datos única para cifrar cada mensaje de texto no cifrado. Luego, cifra la clave de datos con las claves de empaquetado que proporciona. Si sus claves de empaquetado se pierden o se eliminan, sus datos cifrados son irrecuperables. Si sus claves no están protegidas, es posible que sus datos sean vulnerables.

Utilice claves de empaquetado que estén protegidas por una infraestructura de claves segura, como AWS Key Management Service (AWS KMS). Cuando utilice claves de RSA o de AES sin procesar, utilice una fuente de asignación al azar y de almacenamiento duradero que cumpla sus requisitos de seguridad. La práctica recomendada es generar y almacenar claves de empaquetado en un módulo de seguridad de hardware (HSM) o en un servicio que proporcione HSM, como AWS CloudHSM, por ejemplo.

Utilice los mecanismos de autorización de su infraestructura de claves para limitar el acceso a las claves de empaquetado únicamente a los usuarios que lo necesiten. Implemente los principios de las prácticas recomendadas, como el privilegio mínimo. Cuando utilice AWS KMS keys, utilice políticas de claves y políticas de IAM que implementen los principios de las prácticas recomendadas.

Especifique sus claves de empaquetado

Siempre se recomienda especificar las claves de empaquetado de forma explícita al descifrar, así como al cifrar. Cuando lo hace, el AWS Encryption SDK utiliza solo las claves que especifique. Esta práctica garantiza que solo utilice las claves de cifrado que desee. A la hora de las claves de empaquetado de AWS KMS, también mejora el rendimiento, ya que evita que utilice claves de otra región Cuenta de AWS o que intente descifrar con claves para las que no tiene permiso de uso.

Al cifrar, los llaveros y los proveedores de claves maestras que el AWS Encryption SDK suministra requieren que especifique las claves de empaquetado. Utilizan únicamente las claves de empaquetado que especifique. También debe especificar las claves de empaquetado al cifrar y descifrar con llaveros AES sin procesar, llaveros RSA sin procesar y JCEMasterKeys.

Sin embargo, al descifrar con anillos de claves y proveedores de claves maestras de AWS KMS, no es necesario especificar las claves de empaquetado. El AWS Encryption SDK puede obtener el identificador de clave a partir de los metadatos de la clave de datos cifrados. Sin embargo, la práctica recomendada es especificar las claves de empaquetado.

Para respaldar esta práctica recomendada cuando se trabaja con las claves de empaquetado de AWS KMS, se recomienda lo siguiente:

  • Utilice llaveros de AWS KMS que especifiquen las claves de empaquetado. Al cifrar y descifrar, estos llaveros utilizan únicamente las claves de empaquetado que especifica.

  • Cuando utilice claves maestras y proveedores de claves maestras de AWS KMS, utilice los constructores de modo estricto introducidos en la versión 1.7.x del AWS Encryption SDK. Crean proveedores que cifran y descifran solo con las claves de empaquetado que especifique. Los constructores para los proveedores de claves maestras que siempre descifran con cualquier clave de empaquetado están obsoletos en la versión 1.7.x y se eliminaron en la versión 2.0.x.

Si no es práctico especificar claves de empaquetado de AWS KMS para el descifrado, puede utilizar proveedores de detección. El AWS Encryption SDK en C y JavaScript admiten los llaveros de detección de AWS KMS. Los proveedores de claves maestras con modo de detección están disponibles para Java y Python en las versiones 1.7.x y posteriores. Estos proveedores de detección, que solo se utilizan para descifrar con claves de empaquetado de AWS KMS, indica explícitamente al AWS Encryption SDK que utilice cualquier clave de empaquetado que cifre una clave de datos.

Si debe utilizar un proveedor de detección, utilice sus características de filtro de detección para limitar las claves de empaquetado que utilizan. Por ejemplo, el llavero regional de detección de AWS KMS usa solo las claves de empaquetado en un Región de AWS particular. También puede configurar los llaveros de AWS KMS y los proveedores de claves maestras de AWS KMS para que utilicen únicamente las claves de empaquetado en concreto de Cuentas de AWS. Además, como siempre, utilice las políticas de claves y las políticas de IAM para controlar el acceso a las claves de empaquetado de AWS KMS.

Uso de firmas digitales

Se recomienda utilizar un conjunto de algoritmos para la firma. Las firmas digitales comprueban que el remitente del mensaje estaba autorizado a enviar el mensaje y protegen la integridad del mensaje. Todas las versiones del AWS Encryption SDK utilizan conjuntos de algoritmos con firma de forma predeterminada.

Si sus requisitos de seguridad no incluyen las firmas digitales, puede seleccionar un conjunto de algoritmos sin firmas digitales. Sin embargo, se recomienda utilizar firmas digitales, especialmente cuando un grupo de usuarios cifra los datos y otro grupo de usuarios los descifra.

Utilice el compromiso de clave

Se recomienda utilizar la característica de seguridad de compromiso de claves. Al comprobar la identidad de la clave de datos única que cifró los datos, la clave de confirmación impide descifrar cualquier texto cifrado que pueda dar lugar a más de un mensaje de texto no cifrado.

El AWS Encryption SDK ofrece soporte completo para cifrar y descifrar con el compromiso de clave a partir de la versión 2.0.x. De forma predeterminada, todos los mensajes se cifran y descifran con un compromiso de clave. La versión 1.7.x del AWS Encryption SDK puede descifrar textos cifrados con un compromiso de clave. Está diseñado para ayudar a los usuarios de versiones anteriores a implementar la versión 2.0.x correctamente.

El soporte para el compromiso de clave incluye nuevos conjuntos de algoritmos y un nuevo formato de mensaje que produce un texto cifrado de solo 30 bytes más grande que un texto cifrado sin compromiso de clave. El diseño minimiza su impacto en el rendimiento para que la mayoría de los usuarios puedan disfrutar de las ventajas de un compromiso de clave. Si su aplicación es muy sensible al tamaño y al rendimiento, puede decidir utilizar la configuración de la política de compromiso para deshabilitar el compromiso clave o permitir al AWS Encryption SDK descifrar los mensajes sin compromiso, pero hágalo solo si es necesario.

Limitar el número de claves de datos cifradas

Se recomienda limitar el número de claves de datos cifradas en los mensajes que descifra, especialmente los que provienen de fuentes que no son de confianza. Descifrar un mensaje con numerosas claves de datos cifradas que no puede descifrar puede provocar demoras prolongadas, aumentar los gastos, limitar su aplicación y otras que comparten su cuenta y, potencialmente, agotar su infraestructura de claves. Sin límites, un mensaje cifrado puede contener hasta 65 535 (2^16 - 1) claves de datos cifrados. Para obtener más información, consulte Limitar las claves de datos cifrados.

Para obtener más información sobre las características de seguridad de AWS Encryption SDK que sustentan estas prácticas recomendadas, consulte Cifrado del cliente mejorado: identificadores clave explícitos y compromiso de las claves en el Blog sobre seguridad de AWS.