La primitiva de encriptación autenticada con datos asociados (AEAD) es la más común para la encriptación de datos y es adecuada para la mayoría de las necesidades.
AEAD tiene las siguientes propiedades:
- Secrecy: No se sabe nada sobre el texto simple, excepto su longitud.
- Autenticidad: Es imposible cambiar el texto simple encriptado que subyace al texto cifrado sin que se detecte.
- Simétrica: La encriptación del texto simple 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 texto simple determinado. Si quieres evitar esto, usa AEAD determinista.
Datos asociados
La AEAD se puede usar para vincular el texto cifrado a datos asociados específicos. Supongamos que tienes una base de datos con los campos user-id
y encrypted-medical-history
. En este caso, user-id
se puede usar como datos asociados cuando se encripta encrypted-medical-history
. Esto evita que un atacante mueva los antecedentes médicos 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 necesidades diferentes (para la seguridad de 256 bits, reemplaza AES128 por AES256 a continuación). En general:
- AES128_CTR_HMAC_SHA256 con un vector de inicialización (IV) de 16 bytes es el modo más conservador con buenos límites.
- 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 los límites más estrictos en la cantidad de mensajes y su tamaño. Cuando se superan estos límites de texto simple y las longitudes de datos asociadas (que se indican a continuación), AES128_GCM falla y filtra material clave.
- AES128_GCM_SIV es casi tan rápido como AES128_GCM. Tiene los mismos límites que AES128_GCM en la cantidad de mensajes y el tamaño de los mensajes, pero cuando se superan estos límites, falla de una manera menos catastrófica: es posible que solo filtre el hecho de que dos mensajes son iguales. Esto lo hace más seguro que AES128_GCM, pero es menos utilizado en la práctica. Para usar esto en Java, debes instalar Conscrypt.
- XChaCha20Poly1305 tiene un límite mucho mayor en la cantidad de mensajes y su tamaño que AES128_GCM, pero cuando falla (muy improbable), también filtra material clave. No tiene aceleración de hardware, por lo que puede ser más lento que los modos AES en situaciones en las que la aceleración de hardware está disponible.
Garantías de seguridad
Las implementaciones de AEAD ofrecen lo siguiente:
- Seguridad CCA2.
- Tener al menos 80 bits de seguridad de autenticación
- La capacidad de encriptar al menos 232 mensajes con un total de 250 bytes Ningún ataque con hasta 232 textos simples o textos cifrados elegidos tiene una probabilidad de éxito superior a 2-32.
Ejemplos de casos de uso
Consulta Quiero encriptar datos y quiero vincular el texto cifrado a su contexto.