Encriptación autenticada con datos asociados (AEAD)

El tipo primitivo de encriptación autenticada con datos asociados (AEAD) es el más común para la encriptación de datos y es adecuado para la mayoría de las necesidades.

AEAD tiene las siguientes propiedades:

  • Confidencialidad: No se conoce nada sobre el texto simple, excepto su longitud.
  • Autenticidad: Es imposible cambiar el texto simple encriptado subyacente al texto cifrado sin que se lo detecte.
  • Simétrica: la encriptación y la desencriptación del texto cifrado se realizan con la misma clave.
  • Aleatorización: La encriptación es aleatoria. Dos mensajes con el mismo texto simple generan textos cifrados diferentes. Los atacantes no pueden saber qué texto cifrado corresponde a un determinado texto simple. Si deseas evitar esto, usa el AEAD determinista en su lugar.

Datos asociados

AEAD se puede usar para vincular texto cifrado a datos asociados específicos. Supongamos que tienes una base de datos con los campos user-id y encrypted-medical-history. En esta situación, user-id se puede usar como datos asociados cuando se encripta encrypted-medical-history. De esta manera, se evita que un atacante transfiera la historia clínica de un usuario a otro.

Elige un tipo de clave

Si bien recomendamos AES128_GCM para la mayoría de los usos, existen varios tipos de claves para diferentes necesidades (para la seguridad de 256 bits, reemplaza AES128 por AES256 a continuación). Generalmente:

  • AES128_CTR_HMAC_SHA256 con un vector de inicialización (IV) de 16 bytes es el modo más conservador con límites correctos.
  • AES128_EAX es un poco menos conservador y un poco más rápido que AES128_CTR_HMAC_SHA256.
  • AES128_GCM suele ser el modo más rápido, con límites más estrictos para la cantidad y el tamaño de los mensajes. Cuando se superan estos límites en el texto simple y las longitudes de datos asociados (a continuación), AES128_GCM falla y se filtra el material de la clave.
  • AES128_GCM_SIV es casi tan rápido como AES128_GCM, con límites muy buenos para una gran cantidad de mensajes, pero es un poco menos establecido. Para usar esto en Java, debes instalar Conscrypt.
  • XChaCha20Poly1305 tiene un límite mucho mayor en la cantidad y tamaño de mensajes que AES128_GCM, pero cuando falla (muy poco probable), también se filtra material de claves. No está acelerado por hardware, por lo que puede ser más lento que los modos AES en situaciones en las que está disponible la aceleración de hardware.

Garantías de seguridad

Las implementaciones de AEAD ofrecen lo siguiente:

  • Seguridad CCA2.
  • Seguridad de autenticación de 80 bits como mínimo
  • La capacidad de encriptar al menos 232 mensajes con un total de 250 bytes. Ningún ataque con hasta 232 textos sin formato elegidos o texto cifrado elegido tiene una probabilidad de éxito mayor que 2-32.

Casos prácticos de ejemplo

Consulta que quiero encriptar datos y vincular el texto cifrado a su contexto.