La primitiva de encriptación híbrida combina la eficiencia de la encriptación simétrica con la conveniencia de la criptografía de clave pública (asimétrica). Cualquier persona puede encriptar datos con la clave pública, pero solo los usuarios con la clave privada pueden desencriptarlos.
En el caso de la encriptación híbrida, el remitente genera una clave simétrica nueva para encriptar el texto simple de cada mensaje y producir un texto cifrado. Esa clave simétrica está encapsulada con la clave pública del destinatario. En el caso de la desencriptación híbrida, el destinatario descapsula la clave simétrica y, luego, se usa para desencriptar el texto cifrado y recuperar el texto sin formato original. Consulta Formato de cable de encriptación híbrida de Tink para obtener detalles sobre cómo almacenar o transmitir el texto cifrado junto con el encapsulamiento de la clave.
La encriptación híbrida tiene las siguientes propiedades:
- Confidencialidad: nadie puede obtener información sobre el texto simple encriptado (excepto la longitud), a menos que tenga acceso a la clave privada.
- Asimetría: El cifrado se puede realizar con la clave pública, pero, para la desencriptación, la clave privada es obligatoria.
- Aleatorización: La encriptación es aleatoria. Dos mensajes con el mismo texto simple no producirán el mismo texto cifrado. De esta manera, se evita que los atacantes sepan qué texto cifrado corresponde a un determinado texto simple.
La encriptación híbrida se representa en Tink como un par de primitivas:
- HybridEncrypt para la encriptación
- HybridDecrypt para la desencriptación
Parámetro de información de contexto
Además del texto simple, la encriptación híbrida acepta un parámetro adicional, context_info
, que suele ser datos públicos implícitos del contexto, pero que se deben vincular al texto cifrado resultante. Esto significa que el texto cifrado te permite confirmar la integridad de la información del contexto, pero no hay garantías de su confidencialidad o autenticidad. La información del contexto real puede estar vacía o ser nula, pero, para garantizar la desencriptación correcta del texto cifrado resultante, se debe proporcionar el mismo valor de información de contexto para la desencriptación.
Una implementación concreta de la encriptación híbrida puede vincular información del contexto al texto cifrado de varias maneras, por ejemplo:
- Usa
context_info
como entrada de datos asociada para la encriptación simétrica AEAD (consulta RFC 5116). - Usa
context_info
como entrada "CtxInfo" para HKDF (si la implementación usa HKDF como función de derivación de claves, consulta RFC 5869).
Elige un tipo de clave
Recomendamos usar el tipo de clave DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM
para la mayoría de los casos de uso. Este tipo de clave implementa el estándar de encriptación de clave pública híbrida (HPKE) como se especifica en RFC 9180. HPKE consiste en un mecanismo de encapsulamiento de claves (KEM), una función de derivación de claves (KDF) y un algoritmo de encriptación autenticada con datos asociados (AEAD).
DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_256_GCM
emplea específicamente lo siguiente:
- KEM: Diffie–Hellman sobre Curve25519 con HKDF-SHA-256 para derivar el secreto compartido.
- KDF: HKDF-SHA-256 para derivar el contexto del emisor y el receptor.
- AEAD: AES-256-GCM con nonces de 12 bytes generados según el estándar HPKE.
Entre otros tipos de claves HPKE compatibles, se incluyen los siguientes:
DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
DHKEM_X25519_HKDF_SHA256_HKDF_SHA256_CHACHA20_POLY1305
DHKEM_P256_HKDF_SHA256_HKDF_SHA256_AES_128_GCM
DHKEM_P521_HKDF_SHA512_HKDF_SHA512_AES_256_GCM
Consulta RFC 9180 a fin de obtener más detalles sobre las opciones de algoritmos para KEM, KDF y AEAD.
Aunque ya no se recomienda, Tink también admite algunas variaciones de ECIES como se describe en el estándar ISO 18033-2 de Victor Shoup. A continuación, se enumeran algunos tipos de claves ECIES compatibles:
ECIES_P256_HKDF_HMAC_SHA256_AES128_GCM
ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_GCM
ECIES_P256_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256
ECIES_P256_COMPRESSED_HKDF_HMAC_SHA256_AES128_CTR_HMAC_SHA256
Propiedades mínimas
- El texto sin formato y la información del contexto pueden tener una longitud arbitraria (dentro del rango 0..232 bytes)
- Protección contra ataques adaptativos de texto cifrado elegido
- Seguridad de 128 bits para esquemas basados en curva elíptica
Casos prácticos de ejemplo
Consulta cómo quiero intercambiar datos.