Encriptación híbrida

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.