Esta página es informativa. No necesitas este conocimiento para construir (el Chat XDK realiza cada operación aquí por ti).
El panorama general
Veamos el flujo completo desde la creación de la cuenta hasta el envío y recepción de mensajes.1
Creación de la cuenta
Aquí el Chat XDK genera dos pares de claves en tu dispositivo:
- un par de claves de identidad, para recibir secretos
- un par de claves de firma, para demostrar la autoría
2
Creación de la conversación
Para enviarte un mensaje, el remitente genera una nueva clave de conversación, una clave simétrica que cifrará los mensajes.Descarga tu clave pública desde el backend de X, verifica la firma que la acompaña y cifra la clave de conversación con tu clave de identidad.Esta es una propiedad crucial de la criptografía de clave pública: cualquiera puede cifrar hacia tu clave pública; solo tu clave privada puede descifrar, y solo tú la tienes. Así que X puede almacenar y entregar la copia cifrada, pero nunca abrirla. (Para los esquemas exactos utilizados, consulta el glosario.)¿Por qué no ciframos los mensajes directamente con tu clave pública? Por velocidad: el cifrado de clave pública es mucho más costoso que el cifrado de clave simétrica, por lo que intercambiar una clave permite una mejor eficiencia para los mensajes posteriores.
3
Mensajería
Cuando alguien te envía un mensaje, recibirás la clave de conversación, cifrada con tu clave pública de identidad, y los mensajes cifrados con la clave de conversación.Usas tu clave privada de identidad para descifrar la clave de conversación (de nuevo, solo tú tienes esta clave) y luego usas la clave de conversación resultante para descifrar los mensajes.De vez en cuando, las claves en una conversación rotan (se comparte una nueva clave simétrica), por diferentes motivos. Por eso, cada clave de conversación tiene una versión para que los participantes siempre sepan que están usando la clave correcta.
4
Firma
El cifrado permite que cualquiera te envíe un mensaje que solo tú puedes descifrar. La firma es, en cierto sentido, lo contrario: te permite (y solo a ti) firmar un mensaje, y a cualquiera verificar la firma. En la práctica, la clave privada es necesaria para firmar, y la clave pública puede usarse para verificar.En X Chat, cada remitente firma su mensaje. Las firmas prueban tanto quién firmó el mensaje como los bytes exactos firmados, así todos los destinatarios pueden verificar que este mensaje exacto es lo que el remitente escribió. Nuevamente, el XDK se encarga de esto por ti; cubrimos los detalles en Firmas explicadas.
Poniéndolo todo junto
X Chat combina tres herramientas criptográficas estándar, cada una haciendo el trabajo en el que es buena:- Una clave de conversación cifra los mensajes: simétrica, lo bastante rápida para todo el tráfico de mensajes y multimedia.
- Un par de claves de identidad entrega las claves de conversación a cada participante sin que nadie más (incluido X) las vea.
- Un par de claves de firma demuestra la autoría: cada mensaje lleva una firma que los destinatarios verifican.
Un ejemplo práctico
Veamos qué sucede en realidad cuando creas un grupo con Bob y Carol.1
Generar la clave de conversación
El XDK genera una nueva clave de conversación aleatoria. Hasta ahora existe solo en memoria en tu dispositivo.
2
Descargar y verificar las claves de los participantes
Tu app descarga las claves públicas de Bob y Carol desde el backend de X y verifica la firma de cada una. Si una firma no cuadra, te detienes; nunca cifres hacia una clave que no pudiste verificar.
3
Envolver la clave para cada participante
El XDK envuelve la clave de conversación tres veces: para la clave pública de identidad de Bob, la de Carol y la tuya (para que tus otros dispositivos también puedan leerla).
4
Firmar el cambio
El XDK firma una carga que describe exactamente este cambio: el grupo, sus miembros, las claves envueltas. Crear un grupo necesita dos firmas de acción; el XDK produce ambas por ti.
5
Publicar
Tu app hace POST de las copias envueltas y las firmas a X. El servidor almacena tres blobs cifrados que no puede abrir. ¡En ningún momento la clave de conversación en bruto salió de tu dispositivo!
6
Bob lee
El XDK de Bob desenvuelve su copia con su clave privada de identidad, verifica que el cambio de clave provino de ti y guarda la clave de conversación en bruto.
Copia de seguridad segura de claves: almacenamiento distribuido de claves
Antes dijimos que tus claves privadas se guardan en la copia de seguridad segura de claves, recuperables solo con tu código de acceso. Veamos cómo funciona, porque es la parte sobre la que la gente es más escéptica: ¿cómo pueden las claves respaldarse sin que X pueda leerlas?El problema del almacenamiento tradicional de claves
Cómo lo resuelve la copia de seguridad segura de claves
X Chat usa el protocolo de código abierto Juicebox, que combina compartición de secretos con umbral con protección por código de acceso. El protocolo completo está especificado allí; la versión corta: Almacenar (una sola vez, al crear la cuenta). El XDK divide tus claves privadas en fragmentos y los distribuye a tres realms, servicios separados aislados entre sí. Los tres son operados por X, así que el aislamiento por sí solo no significaría gran cosa. Ahí es donde entra el hardware: dos de los realms viven dentro de módulos de seguridad de hardware (HSM), hardware resistente a manipulación que no entregará su fragmento a nadie, ni siquiera a un administrador de X con acceso completo al servidor. Un fragmento por sí solo no revela nada, y la recuperación requiere fragmentos de dos de los tres realms, por lo que cada recuperación posible pasa por al menos un HSM: no hay un camino solo por software hacia tus claves. El software del HSM y la key ceremony que lo aprovisionó están documentados públicamente. Recuperar (nuevo dispositivo). Ingresas tu código de acceso, y el XDK demuestra a cada realm que lo conoces. El protocolo Juicebox hace esto posible sin que el código de acceso salga jamás de tu dispositivo. Cada realm que te verifica libera su fragmento de tus claves, y una vez que dos de los tres responden, el XDK reconstruye tus claves en tu dispositivo. Límites de intentos. Cada realm permite como máximo 20 intentos incorrectos de código de acceso. En el vigésimo intento incorrecto, tu fragmento de clave se elimina del realm. Esto se aplica por hardware mediante los HSM y protege contra cualquier ataque de fuerza bruta. El resultado: puedes recuperar tus claves en un dispositivo nuevo solo con tu código de acceso, ningún realm por sí solo contiene el secreto completo, y los realms respaldados por hardware imponen sus límites incluso contra el propio X.No configuras nada de esto a mano. El Chat XDK incluye el cliente de copia de seguridad, y la configuración del realm llega desde el backend de X con tu registro de clave pública. El almacenamiento del código de acceso y el desbloqueo son llamadas del Chat XDK; consulta initialize with existing keys y create and register keys. Los servidores y bots suelen omitir la copia de seguridad y usan un blob de claves exportado; protégelo como si fuera una contraseña.
Firmas explicadas
La firma de cada mensaje ofrece a los destinatarios dos garantías:- Autenticidad: producida por el titular de la clave privada de firma del remitente
- Integridad: el contenido cifrado no se modificó después de firmar
reply_preview_validation (Valid / Invalid). Un resultado Invalid significa que la cita no coincide con el original firmado—trata el material citado como no confiable, aunque la respuesta en sí se verifique por separado—de modo que ningún participante pueda atribuir palabras inventadas a otro.
Cambios de estado firmados (firmas de acción)
Los mensajes no son lo único que se firma. Todo cambio en una conversación (crear un grupo, agregar miembros, rotar una clave) también debe llevar firmas de acción: el remitente firma una carga que describe exactamente qué hace el cambio, y la API rechaza las solicitudes donde estas faltan o están mal formadas. El XDK las produce por ti. Por qué el servidor no puede verificar completamente un cambio de clave. El servidor nunca tiene la clave de conversación en bruto (esa es la idea), por lo que no puede comprobar una firma sobre material que no puede ver. Verifica lo que puede—que la descripción firmada coincida con la solicitud—y los destinatarios hacen la verificación criptográfica real cuando desenvuelven el cambio de clave. Los eventos son inmutables: uno que falle la verificación es permanentemente inválido. Consulta Solución de problemas.Propiedades de seguridad
Esto es contra lo que X Chat protege, y —igual de importante— contra lo que no.Contra lo que X Chat protege
Contra lo que X Chat no protege, y por qué
Glosario
Próximos pasos
Primeros pasos
Implementa claves, envía y recibe 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