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 subyacente 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 se aleatoriza. Dos mensajes con el mismo texto sin formato producen textos cifrados diferentes. Los atacantes no pueden saber qué texto cifrado corresponde a un texto sin formato determinado. Si quieres evitarlo, usa AEAD determinístico en su lugar.
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 esta situación, user-id se puede usar como
datos asociados cuando se encripta encrypted-medical-history. Esto evita que un atacante mueva el historial médico de un usuario a otro.
Los datos asociados son opcionales. Si se especifican, la desencriptación solo se realiza correctamente si se pasan los mismos datos asociados a las llamadas de encriptación y desencriptación.
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. AES128 ofrece seguridad de 128 bits y AES256 ofrece seguridad de 256 bits.
Las dos restricciones de seguridad notables cuando se elige un modo son las siguientes:
- QPS: ¿Cuántos mensajes se encriptan con la misma clave?
- Tamaño de los mensajes: ¿Qué tan grandes son los mensajes?
Tipos de claves admitidos:
- AES-CTR-HMAC (AES128_CTR_HMAC_SHA256, AES256_CTR_HMAC_SHA256) con un vector de inicialización (IV) de 16 bytes es el modo más conservador con buenos límites.
- Compromiso de clave.
- AES-EAX (AES128_EAX, AES256_EAX) es un poco menos conservador y un poco
más rápido que AES128_CTR_HMAC_SHA256.
- MLGR sin confirmación de clave.
- AES-GCM (AES128_GCM, AES256_GCM) suele ser el modo más rápido con los límites más estrictos en la cantidad de mensajes (232) y el tamaño de los mensajes (~64 GB por mensaje). Cuando se superan estos límites, AES-GCM falla de forma catastrófica, ya que filtra el texto simple y la parte de autenticación de la clave interna de AES-GCM.
- AES-GCM-SIV (AES128_GCM_SIV, AES256_GCM_SIV)
[RFC8452] es resistente al uso inadecuado accidental
de nonce y tiene un rendimiento casi tan bueno como AES-GCM. Los límites de la
cantidad de mensajes y el tamaño de los mensajes para AES-GCM-SIV con IV aleatorios son mucho
más altos que los límites de AES-GCM. Cuando se superan estos límites, AES-GCM-SIV
falla de forma menos catastrófica: solo filtra que
dos mensajes son iguales.
AES-GCM-SIV es más seguro, pero se usa menos en la práctica.
- Límites para los nonces aleatorios:
- 232 mensajes, en los que cada texto simple tiene un máximo de 8 GiB
- 248 mensajes, en los que cada texto simple tiene un máximo de 32 MiB
- 264 mensajes, en los que cada texto simple tiene un tamaño máximo de 128 KiB
- Para usarlo en Java, instala Conscrypt.
- No se compromete la clave ADGKLS.
- Límites para los nonces aleatorios:
- XChaCha20-Poly1305 (XCHACHA20_POLY1305) tiene un límite mucho mayor en la
cantidad de mensajes y el tamaño de los mensajes que AES-GCM, pero cuando falla
(muy poco probable), también filtra material de claves. 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.
- LGR sin compromiso de clave.
Obtén más información sobre el formato de conexión del texto cifrado de AEAD.
Garantías de seguridad
Las implementaciones de AEAD ofrecen lo siguiente:
- Seguridad CCA2.
- Seguridad de la autenticación de al menos 80 bits
- 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 textos cifrados elegidos tiene una probabilidad de éxito superior a 2-32.
Ejemplos de casos de uso
Consulta Deseo encriptar datos y Deseo vincular el texto cifrado a su contexto.