Skip to main content
Este manual explica las ideas criptográficas detrás de X Chat a nivel conceptual. No necesitas esta profundidad para construir—el Chat XDK realiza el cifrado, descifrado, firma y almacenamiento de claves por ti—pero el modelo mental ayuda cuando diseñas tu app o depuras su comportamiento. Cuando estés listo para implementar, usa Primeros pasos para un recorrido completo y la referencia de la API en la barra lateral para rutas individuales.
Tú no implementas esta criptografía por tu cuenta. El Chat XDK se encarga. Esta página es para entender, no una lista de verificación de la API.

El panorama general

X Chat usa un sistema de cifrado por capas donde:
  1. Los mensajes se cifran con una clave de conversación (cifrado simétrico rápido)
  2. Las claves de conversación se cifran para cada participante usando su clave pública de identidad (intercambio asimétrico de claves)
  3. Los mensajes se firman con la clave de firma para que los destinatarios puedan verificar quién los envió y que nada fue alterado
El cifrado simétrico es eficiente para mucho tráfico de mensajes; el cifrado asimétrico se usa principalmente para distribuir las claves de conversación de forma segura. En el flujo del producto, X transporta texto cifrado y sobres de claves—no contenido legible de mensajes ni la clave de conversación en bruto. Tu app usa el Chat XDK para la criptografía y la Chat API (mediante el XDK en Python/TypeScript, o HTTPS) para registrar claves y enviar o recibir esas cargas cifradas. Consulta Primeros pasos para ver cómo encajan esas piezas.

Tipos de claves explicados

X Chat usa tres tipos de material de claves, cada uno con un propósito específico.

1. Par de claves de identidad

Propósito: Intercambiar de forma segura claves de conversación entre usuarios Cuando alguien te agrega a una conversación, cifra la clave de conversación usando tu clave pública de identidad. Solo tu clave privada de identidad puede descifrarla. Las mitades públicas se registran y descubren a través de las APIs de claves públicas de la plataforma (consulta Encryption keys en la referencia de la API). Las mitades privadas permanecen dentro del Chat XDK (por ejemplo, mediante la copia de seguridad segura de claves o un blob de claves cuidadosamente protegido).

2. Par de claves de firma

Propósito: Demostrar que fuiste tú quien creó un mensaje Cuando envías un mensaje, se firma con tu clave privada de firma. Los destinatarios verifican usando tu clave pública de firma (también publicada mediante las APIs de claves públicas). El Chat XDK firma como parte del cifrado de un mensaje y puede verificar al descifrar cuando proporcionas el material de clave pública del remitente.

3. Clave de conversación

Propósito: Cifrar y descifrar mensajes (y multimedia) dentro de una conversación específica Las claves de conversación se generan cuando se configura una conversación o cuando las claves rotan. Cada participante recibe una copia cifrada de la clave, producida con su clave pública de identidad. Después de descifrar tu copia una vez, conservas la clave de conversación en bruto y la usas para cifrar mensajes (y multimedia) de forma rápida. La configuración de esas copias para una conversación se hace mediante el Chat XDK junto con los endpoints de claves de conversación—se recorre en Primeros pasos.

Cómo funciona el cifrado (conceptualmente)

Enviar un mensaje

1

Empieza con texto plano

Escribes: “Hola, ¿cómo estás?”
2

Obtén la clave de conversación

Tu app usa la clave de conversación en bruto para este chat (obtenida de la configuración o de un evento previo de distribución de claves), para la versión correcta.
3

Cifra el mensaje

El Chat XDK cifra tu mensaje con la clave de conversación. El resultado es texto cifrado inútil sin esa clave.
4

Firma el mensaje

El Chat XDK firma la carga cifrada con tu clave privada de firma, demostrando que tú creaste exactamente ese contenido.
5

Envía a X

Tu app envía la carga cifrada y la firma a X a través del endpoint send message de la Chat API. X almacena y entrega bytes que no puede leer como texto plano.

Recibir un mensaje

1

Recibe datos cifrados

Tu app recibe texto cifrado desde X—vía webhooks o un activity stream, o leyendo los events de la conversación para el historial.
2

Obtén la clave de conversación

Usa tu clave en bruto en caché, u obtenla descifrando tu copia desde un evento de distribución de claves (cambio de clave) si es nueva o rotada.
3

Verifica la firma

El Chat XDK comprueba la firma usando la clave pública de firma del remitente (y el vínculo de identidad correspondiente), de modo que sepas quién lo envió y que no fue modificado.
4

Descifra el mensaje

El Chat XDK descifra con la clave de conversación. Ahora puedes leer: “Hola, ¿cómo estás?”
La implementación de cifrar, enviar, recibir y descifrar está en Primeros pasos y en la referencia del Chat XDK.

Distribución de claves explicada

Un desafío central del cifrado de extremo a extremo es la distribución de claves: cómo los participantes obtienen la clave de conversación sin que X (u otro observador) vea esa clave en claro.

Configuración inicial de claves

Cuando se prepara una conversación para mensajería:
  1. Se genera una clave de conversación aleatoria (en el Chat XDK)
  2. Para cada participante, esa clave se cifra dirigida a su clave pública de identidad
  3. Esas copias cifradas se almacenan y entregan mediante las APIs de Chat de X
  4. Cada participante descifra su copia con su clave privada de identidad (en el Chat XDK)
X solo manipula las copias envueltas, nunca la clave de conversación en bruto.

Eventos de cambio de clave

Cuando la clave de conversación se rota (por ejemplo, al cambiar la membresía), los participantes reciben un evento de cambio de clave con nuevas copias cifradas para cada miembro. Tu app debería:
  1. Detectar material de cambio de clave en los eventos en vivo o en el historial de la conversación
  2. Descifrar y almacenar la nueva clave de conversación (y su versión)
  3. Usar la versión más reciente para envíos posteriores
Primeros pasos y Eventos en tiempo real describen dónde aparecen esos eventos en la práctica.

Copia de seguridad segura de claves: almacenamiento distribuido de claves

Tus claves privadas de identidad y firma deben almacenarse con cuidado. X Chat incluye un sistema de copia de seguridad segura de claves (implementado con Juicebox) para que las claves puedan recuperarse con un código de acceso entre dispositivos sin darle a ningún servidor el secreto completo.

El problema con el almacenamiento tradicional de claves

Cómo lo resuelve la copia de seguridad segura de claves

La copia de seguridad segura de claves combina secret sharing con protección por código de acceso:
  1. Las claves privadas se dividen en partes (shares)
  2. Los shares están en poder de realms independientes (servidores separados)
  3. Ningún realm individual tiene suficiente información para reconstruir las claves por sí solo
  4. La recuperación requiere tu código de acceso y la cooperación de suficientes realms
  5. Los códigos de acceso incorrectos están limitados por tasa para ralentizar los intentos
Obtienes recuperabilidad (nuevo dispositivo + código de acceso) sin que una sola parte tenga el secreto completo.
No configuras servidores de copia de seguridad de claves a mano para el flujo normal. El Chat XDK incluye el cliente de copia de seguridad; la configuración de realms proviene de la X API como juicebox_config en tu registro de clave pública (el campo lleva el nombre de Juicebox, la implementación subyacente). El almacenamiento del código de acceso por primera vez y el desbloqueo posterior son llamadas del Chat XDK—consulta inicializar con claves existentes y crear y registrar las claves en Primeros pasos. Algunas apps (especialmente servidores y bots) usan un blob de claves exportado en lugar de la copia de seguridad segura de claves; protege ese material como una contraseña.

Firmas explicadas

Cada mensaje de X Chat incluye una firma digital que respalda:
  1. Autenticidad — fue producido con la clave privada de firma del remitente
  2. Integridad — el contenido cifrado no fue modificado después de firmarse

Cómo funcionan las firmas (conceptualmente)

Si algo cambia en el material firmado, la verificación falla. Solo alguien con la clave privada de firma puede producir una firma válida para esa clave.

En tu app

El Chat XDK firma cuando cifras mensajes salientes y verifica cuando descifras mensajes entrantes contra el material de clave pública del remitente (obtenido de las APIs de claves públicas). La verificación es obligatoria por defecto: el SDK rechaza los eventos firmados no verificados a menos que desactives explícitamente la comprobación (no recomendado). Los detalles están en la referencia del Chat XDK.

Cambios de estado firmados (firmas de acción)

Los mensajes no son el único material firmado. Cada llamada que cambia el estado de una conversación—agregar o rotar claves de conversación, crear un grupo, agregar miembros—debe llevar una o más firmas de acción: el remitente firma una carga que describe exactamente lo que hace el cambio (para un cambio de clave, esa carga incluye la nueva clave de conversación en sí), y la API rechaza la solicitud si las firmas están ausentes o mal formadas. Como el servidor nunca posee la clave de conversación en texto plano, no puede comprobar criptográficamente la firma de un cambio de clave; valida que la descripción firmada y codificada del cambio coincida con la solicitud que recibió. La comprobación criptográfica ocurre en los extremos: el Chat XDK de cada destinatario verifica la firma contra la clave pública de firma del remitente cuando descifra el evento de cambio de clave. Los métodos prepare del Chat XDK producen estas firmas por ti—los group creates y los member adds devuelven dos (el cambio de clave más la acción de grupo), y ambos deben enviarse. Las firmas están vinculadas al contenido del evento y son inmutables: un evento cuya firma no verifica nunca podrá volverse válido más adelante. Consulta Solución de problemas para saber cómo tratarlos.

Propiedades de seguridad

Contra qué protege X Chat

Contra qué no protege X Chat


Glosario


Próximos pasos

Primeros pasos

Implementa claves, envío y recepción paso a paso

Referencia del Chat XDK

Métodos y tipos del SDK de cifrado

Introducción

Descripción general del producto y arquitectura

Eventos en tiempo real

Cómo se entregan los eventos cifrados