Arquitectura · Especificación del protocolo

La Qlavis Citadel — la especificación publicada de la criptografía de Qlavis · Messenger.

Cada primitiva con su estándar y parámetros, y las composiciones construidas sobre ellas. Todas las primitivas son estándares del NIST o del IETF; las composiciones son propias de Qlavis y se especifican aquí. Algoritmos y parámetros, verificados contra el código de producción.

01 El stack

Primitivas estándar.
Composición propia.

Lo “post-cuántico” es un espectro: sin cifrado de extremo a extremo → E2EE clásico → post-cuántico solo al establecer la sesión → post-cuántico al establecerla y en la renovación continua de claves. Qlavis se sitúa en ese nivel superior, con el parámetro NIST máximo — y extiende la protección post-cuántica a dos superficies que ese espectro no mide: la autenticación (la raíz de confianza de la identidad y cada firma del protocolo) y el plano de llamadas en tiempo real. El resultado es la suite NSA CNSA 2.0 completa — ML-KEM-1024, AES-256-GCM, ML-DSA-87, SHA-2 — en cada superficie que toca contenido del usuario, años antes del mandato federal de EE. UU. (Orden Ejecutiva 14412: establecimiento de claves post-cuántico para 2030, firmas para 2031). Cada algoritmo es un estándar publicado del NIST o del IETF — ningún cifrador, hash o firma propietarios en ninguna parte — y cada secreto de sesión es híbrido por construcción: romperlo exige romper una primitiva clásica y una post-cuántica.

Encapsulación de claves post-cuántica ML-KEM-1024 FIPS 203 · Categoría 5 · cada intercambio de claves del producto
Firmas post-cuánticas ML-DSA-87 FIPS 204 · Categoría 5 · raíz de confianza de la identidad y todas las vinculaciones del protocolo
Cifrado autenticado AES-256-GCM FIPS 197 + SP 800-38D · nonce de 96 bits, etiqueta de 128 bits · cada superficie AEAD
Acuerdo de claves clásico X25519 RFC 7748 · la mitad clásica del híbrido
Firmas clásicas Ed25519 RFC 8032 · firma en cruz la raíz de confianza PQ · Stellar (exigido por la cadena)
Firmas del XRP Ledger secp256k1 ECDSA determinista RFC 6979 · exigido por la cadena
Derivación de claves y hashing HKDF · HMAC · SHA-2 RFC 5869 / RFC 2104 / FIPS 180-4 · margen HMAC-SHA512 en llamadas y monedero
Derivación de recuperación BIP39 → SLIP-0010 12 palabras, 128 bits de entropía · PBKDF2-HMAC-SHA512, 2048 rondas
Base de datos local en reposo SQLCipher 4.14.0 AES-256 a nivel de página · la tabla del ratchet, doblemente cifrada
Vinculación al dispositivo Secure Enclave P-256 La clave privada nunca sale del hardware

Las primitivas post-cuánticas corren sobre las implementaciones de tiempo constante de Apple CryptoKit. Sin primitivas criptográficas propias — la composición es nuestra; las piezas, no.

Nivel de parámetros post-cuántico NIST L5 ML-KEM-1024 y ML-DSA-87 — la categoría estandarizada más alta
Rotación de claves en llamadas 5 min Renovación a mitad de llamada, sin renegociación y sin interrupción
Relleno de mensajes 256 B Bloques uniformes — los mensajes cortos no se distinguen por longitud
Rutas de descifrado en el servidor 0 Para contenido del usuario — verificable contra el esquema de producción bajo NDA
02 Identidad

Una frase de 12 palabras.
Una raíz post-cuántica.

No hay número de teléfono, email ni cuenta de terceros. La identidad completa se deriva de forma determinista de una frase BIP39 de 12 palabras (128 bits de entropía), decodificada mediante PBKDF2-HMAC-SHA512 (2048 rondas) en una semilla de 64 bytes.

i

Dos identidades, una frase.

El ancla clásica — Ed25519, derivada por SLIP-0010 en la ruta endurecida m/44'/637'/0'/0'/0' (el coin type es un mero separador de dominio, disjunto de las rutas del monedero) — y la raíz de confianza post-cuántica — ML-DSA-87, generada a partir de una semilla secundaria producida por HKDF-SHA256 sobre la misma semilla de 64 bytes con una cadena de separación de dominio versionada. Añadir la raíz post-cuántica no cambió nada de lo que el usuario debe respaldar.

ii

La migración no costó nada a los usuarios.

La identidad Ed25519 firma en cruz la clave pública ML-DSA-87. Un contacto que tiene anclado el pin clásico verifica esa atestación y migra su pin a la raíz post-cuántica dentro del propio protocolo — sin ceremonia de re-verificación, sin cambio de número de seguridad y sin confiar en el servidor, que solo guarda claves públicas y no puede falsificar la atestación.

iii

El anclaje se particiona por estabilidad de la clave.

Las claves X25519 y ML-KEM-1024 de cada instalación son aleatorias, no derivadas de la frase — una decisión de postura deliberada. El trust-on-first-use ancla solo la identidad de firma estable derivada de la frase, de modo que una reinstalación no levanta falsas alarmas, mientras que una frase distinta en el mismo handle bloquea la conversación. Los contactos rastrean además una época monótona en el paquete de claves publicado: una época que retrocede — el sello de un paquete reproducido o sustituido — eleva un estado de seguridad incluso cuando la identidad coincide.

iv

El dispositivo queda vinculado en hardware.

Un par de claves P-256 generado dentro del Secure Enclave — su clave privada nunca entra en la memoria del software — se registra como hash de huella. Una recuperación en otro dispositivo cambia la huella y dispara una alerta visible de re-vinculación en los demás dispositivos de la cuenta.

v

La recuperación es ciega a la frase.

El cliente re-deriva la clave Ed25519 de la frase introducida y firma un desafío emitido por el servidor; el servidor verifica contra la clave pública registrada. La frase nunca sale del dispositivo, y el servidor no retiene material derivado de la frase. El PIN de respaldo se guarda solo como hash PBKDF2 con sal; diez fallos consecutivos borran todo el material de claves local — la frase sigue recuperando la identidad en cualquier dispositivo.

03 Handshake

PQXDH con ML-KEM-1024 de principio a fin.

Las sesiones se establecen con PQXDH — el handshake publicado por Signal — en una instanciación híbrida. Un paquete de preclaves publicado lleva las claves de identidad del contacto, una preclave firmada cuya firma se hace con ML-DSA-87 y se verifica bajo la identidad post-cuántica anclada, preclaves de un solo uso y preclaves ML-KEM-1024. El iniciador computa:

SK = HKDF-SHA256( DH1 ‖ DH2 ‖ DH3 ‖ DH4 ‖ SS1 ‖ SS2 )

     4 × tramos Diffie–Hellman X25519
   + 2 × encapsulaciones ML-KEM-1024
   → clave raíz híbrida de 32 bytes

Comprometer la clave de sesión exige romper tanto X25519 como ML-KEM-1024. La firma ML-DSA-87 sobre la preclave firmada autentica además la suite post-cuántica negociada, de modo que un relay no puede degradar el KEM en silencio.

La vinculación de identidad entrante es fail-closed. Cada mensaje de inicio de sesión lleva la clave pública de identidad ML-DSA-87 del iniciador, su atestación cruzada Ed25519 y una firma de vinculación sobre la clave X25519 de esa instalación. El receptor verifica la vinculación solo bajo la identidad anclada — nunca bajo una clave llegada por el cable. Una vinculación que falla se trata como un ataque: la sesión no se instala, el mensaje no se atribuye al contacto, se eleva una advertencia de seguridad y el envío saliente queda bloqueado hasta re-verificar. Un servidor malicioso o coaccionado no puede inyectar un handshake falsificado “de” un contacto anclado — no puede firmar bajo claves que nunca salen del dispositivo del contacto.

04 Ratchet

QTR-1024 — el Qlavis Triskelion Ratchet.

Las claves de la conversación en curso provienen de la construcción Double Ratchet extendida con un eje post-cuántico independiente, al nivel de parámetros NIST máximo.

04.1 · Tres ejes DH × cadenas × ML-KEM-1024

Renovación de claves cada 10 mensajes o 24 horas.

Un ratchet Diffie–Hellman X25519, ratchets simétricos de cadena (claves de cadena avanzadas por HMAC-SHA256 con constantes de separación de dominio) y un ratchet ML-KEM-1024 independiente que renueva la raíz post-cuántica cada 10 mensajes o 24 horas, lo que llegue primero.

04.2 · Claves híbridas MK = KDF( DH_mk ‖ PQ_mk )

Cada clave de mensaje exige romper ambos ejes.

Cada clave de mensaje se deriva a la vez del eje clásico y del post-cuántico, de modo que el secreto hacia adelante (forward secrecy) y la seguridad post-compromiso se sostienen frente a un adversario clásico hoy y uno cuántico mañana. Signal y Apple eligieron KEMs de parámetro 768 en sus ratchets por ancho de banda; QTR-1024 lleva ML-KEM-1024 (Categoría 5), cambiando unos 3 KB por rotación por el nivel estandarizado más alto.

04.3 · Tolerancia a pérdidas re-inclusión · dedup · confirmación acotada

Los mensajes perdidos o desordenados no rompen la sesión.

Una encapsulación KEM, a diferencia de un valor DH, no es idempotente — en los ratchets post-cuánticos anteriores, perder el único mensaje que lleva el material de la nueva época rompe la sesión. QTR-1024 re-incluye el mismo ciphertext KEM pendiente en cada cabecera saliente hasta que el par confirma; el receptor mantiene un historial SHA-256 acotado de ciphertexts procesados y desencapsula cada ciphertext distinto exactamente una vez, saltando duplicados sin avanzar el estado; la confirmación se anuncia a lo largo de un número acotado de mensajes posteriores.

04.4 · AEAD y relleno AES-256-GCM · bloques de 256 bytes

Sellado, autenticado y de longitud oculta.

Los cuerpos de mensaje se sellan con AES-256-GCM (nonce aleatorio fresco de 96 bits, etiqueta de 128 bits) con la cabecera vinculada como datos asociados, y se rellenan a bloques uniformes de 256 bytes para que los mensajes cortos no sean distinguibles por longitud en el cable. Antes de cualquier mutación durante el descifrado se toma una instantánea del estado de sesión; una autenticación fallida restaura la instantánea, de modo que un ciphertext manipulado no puede corromper la sesión.

05 Llamadas

Post-cuántico en cada trama de audio y vídeo.
Exigido por la propia infraestructura.

El cifrado SRTP estándar de WebRTC es clásico, así que Qlavis lo desactiva deliberadamente y aplica su propia capa de cifrado de tramas. La exigencia no es una preferencia del cliente.

05.1 · Control de admisión fail-closed en el relay

Una llamada solo-clásica se rechaza antes de que suene el teléfono.

En el modo de producción con exigencia activa, el relay de señalización valida cada oferta de llamada antes de avisar al receptor y la rechaza salvo que lleve la versión post-cuántica del protocolo, la capacidad de suite post-cuántica requerida, material de ciphertext ML-KEM-1024 bien formado y una bandera afirmativa de medios post-cuánticos. La respuesta pasa comprobaciones simétricas. El dispositivo del receptor, como defensa en profundidad, auto-rechaza de forma independiente una oferta sin material KEM antes de sonar.

05.2 · Acuerdo de claves ML-KEM-1024 en dos tiros · por llamada

Llamante y receptor derivan claves idénticas de encapsulaciones espejadas.

El llamante encapsula contra la clave pública ML-KEM-1024 del receptor y envía el ciphertext en la oferta; el receptor desencapsula, encapsula contra la clave del llamante y responde. Ambos lados derivan idénticamente — claves acotadas a esa única llamada por la sal, claves de señalización y de medios separadas por dominio; el relay solo ve ciphertexts opacos:

master   = HKDF-SHA256( salt = callId, IKM = ss1 ‖ ss2 )
sigKey   = PRF( master, "call:sig" )     — metadatos de señalización
mediaKey = PRF( master, "call:media" )   — cifrado de tramas
05.3 · Cifrado de tramas AES-256-GCM · renovación atómica cada 5 min

Las claves rotan a mitad de llamada sin cortes y sin renegociación.

Cada trama de audio y vídeo se sella con AES-256-GCM bajo la clave de medios. Un temporizador avanza un índice de clave acotado cada cinco minutos; la clave de trama del índice i se deriva determinísticamente de la clave de medios e i, y el índice viaja en los metadatos de la trama — los receptores avanzan sin interrumpir el flujo.

05.4 · Vinculación de identidad Sig( callId ‖ ct ) · fail-closed

Un servidor que intercambie claves mata la llamada.

Cada parte firma su identificador de llamada y su ciphertext KEM con su clave de identidad ML-DSA-87; la firma viaja con la clave pública post-cuántica del firmante y su atestación cruzada Ed25519 dentro de un campo de señalización opaco que el relay reenvía tal cual. El receptor verifica la atestación bajo la raíz de confianza anclada, verifica la vinculación bajo la clave probada y ancla la identidad post-cuántica a primera vista desde la propia llamada. Un ciphertext manipulado, una atestación ausente, una degradación a suite clásica desde un par capaz o un pin que no coincide terminan la llamada — no hace falta comparar cadenas de seguridad; la llamada hereda la identidad de mensajería ya anclada.

05.5 · Sin modo degradado más enrutamiento relay de IP oculta

Si una llamada no se puede sellar post-cuánticamente, no se conecta.

No existe un estado de llamada insegura ni una advertencia descartable: cualquier fallo post-cuántico en la ruta de la llamada significa que la llamada nunca se establece o se corta. Una política opcional de IP oculta por llamada restringe la conexión a candidatos solo-relay (TURN), ocultando la dirección del dispositivo frente al par, con una degradación best-effort registrada si no se reúne ningún candidato relay en una ventana acotada.

06 Multimedia y avatares

KEM-DEM por archivo.
Concesión por espectador en avatares.

06.1 · Archivos multimedia clave fresca por archivo · purga al entregar

El servidor guarda un blob opaco que no puede leer — y luego lo borra.

Cada archivo se cifra en el dispositivo bajo una clave aleatoria fresca de 32 bytes con AES-256-GCM y se sube como blob opaco; la clave del archivo — nunca el archivo — se envuelve para cada destinatario vía ML-KEM-1024 dentro del mensaje cifrado de extremo a extremo que lo referencia. El servidor borra el blob cuando el dispositivo del destinatario confirma la recepción durable (descifrado correcto y escritura en el almacén cifrado del dispositivo), con una breve ventana de gracia y un techo independiente de 14 días para los blobs nunca descargados; el registro de entrega deliberadamente no lleva identidad del destinatario. Reenviar re-cifra bajo una clave fresca y sube un blob nuevo — en el servidor, un reenvío no puede vincularse con su original.

06.2 · Avatares un blob · N envolturas por espectador

Una foto cifrada, una concesión criptográfica independiente por espectador.

Una foto de perfil se cifra una vez bajo una clave simétrica fresca; para cada espectador permitido, el dispositivo del propietario encapsula a la clave ML-KEM-1024 del espectador y sella la clave del avatar bajo el resultado con AES-256-GCM, etiquetando cada envoltura con su suite AEAD — no una única clave de perfil compartida. Rotar el avatar borra el blob sustituido y todas las envolturas antiguas. Los espectadores sin envoltura encolan una solicitud que el dispositivo del propietario atiende en su siguiente conexión, y ese dispositivo reconcilia la cobertura por espectador en cada arranque — ningún espectador queda excluido de forma permanente. El servidor retransmite e indexa envolturas que nunca puede abrir.

07 Sobre y dispositivo

Las notificaciones llevan enrutamiento, no contenido.
El dispositivo, hogar durable del historial.

07.1 · Remitente sellado defensa en profundidad

La identidad del remitente viaja dentro del cuerpo cifrado.

La identidad del remitente va incrustada dentro del cuerpo cifrado del mensaje, endureciéndola frente a cualquier ruta que despoje o reescriba el sobre de transporte. Dicho con honestidad: el relay sigue viendo el enrutamiento remitente-destinatario mientras existe la fila del mensaje — lo que nunca queda expuesto, en ninguna capa, es el contenido.

07.2 · Canal de push cero contenido · tokens cifrados

La carga del push es solo metadatos de enrutamiento.

La carga lleva identificadores de conversación y de mensaje y el handle del remitente para el renderizado; el cuerpo cifrado lo descarga y descifra una extensión de notificaciones en el dispositivo. Un ajuste local del dispositivo oculta por completo al remitente en la pantalla de bloqueo. Los tokens de push se guardan cifrados en reposo con AES-256-GCM bajo una clave interna del servidor y se descifran de forma transitoria, en memoria, solo en el momento de emitir el push.

07.3 · Almacenamiento local SQLCipher · Secure Enclave · excluido de iCloud

Todo lo que reposa en el dispositivo está cifrado.

Toda la base de datos local está cifrada a nivel de página con SQLCipher; la tabla de sesiones del ratchet lleva una capa AEAD adicional por fila. La base del monedero es independiente y tiene sus propias claves. El historial multimedia, el desbordamiento de hilos y las cachés de renderizado se cifran con AES-256-GCM bajo claves guardadas en el Keychain; todos los almacenes llevan la protección de archivos de iOS y están excluidos de la copia de iCloud. El acceso a la app se protege con Face ID / Touch ID con PIN de respaldo; la firma del monedero vuelve a pedir autenticación en cada transacción.

08 Monedero

Self-custodial, de las mismas doce palabras.

La misma semilla BIP39 deriva un monedero self-custodial: una clave Ed25519 de Stellar vía SLIP-0010 en m/44'/148'/0' y una clave secp256k1 del XRP Ledger vía BIP-44 en m/44'/144'/0'/0'/0' (ECDSA determinista RFC 6979). Las claves viven solo en el dispositivo; el servidor no guarda saldos, claves, direcciones ni historial de transacciones del monedero. Un pago en el chat viaja dentro de la conversación, sellado por el mismo ratchet que un texto — el relay ve un bloque de ciphertext, no una cantidad.

Las firmas de las transacciones en cadena son las que cada cadena exige (clásicas hoy) — y lo decimos así en lugar de exagerar. Ambos ledgers tienen hojas de ruta post-cuánticas publicadas — Stellar hacia 2027, el XRP Ledger hacia 2028 — y la capa de identidad por encima de ellos ya es post-cuántica.

09 El servidor

Un relay ciego — verificable, no prometido.

El servidor es un intermediario de transporte que no puede descifrar contenido del usuario y guarda lo mínimo que el protocolo permite. No lo llamamos zero-knowledge — ese término significa otra cosa en criptografía. Lo llamamos lo que es, y dejamos por escrito lo que sí ve.

09.1 · Custodia de claves solo claves públicas

En el servidor no existe ninguna clave que descifre contenido del usuario.

Las claves privadas de los usuarios existen solo en sus dispositivos, en el Keychain y el Secure Enclave. El servidor guarda claves públicas — Ed25519, ML-DSA-87, X25519, ML-KEM-1024, preclaves — el material que cualquier par necesita para iniciar una sesión. Su única clave simétrica interna cifra los tokens de push. El transporte cliente-servidor corre sobre TLS con anclaje de certificados — un segundo sobre alrededor de contenido que ya viaja cifrado de extremo a extremo.

09.2 · Minimización de datos purga al entregar · techo de 14 días

El contenido se purga al confirmarse la entrega, en todos los planos.

El contenido de un mensaje entregado se borra en la entrega (queda un talón sin contenido para el estado de entrega); los blobs multimedia entregados se borran al confirmarse la recepción durable; la fila de señalización de una llamada se borra en el instante en que la llamada termina — el historial de llamadas a largo plazo existe solo en el dispositivo del usuario. Un techo de 14 días respalda todo lo no entregado. Las listas de contactos nunca llegan al servidor. El borrado de una cuenta notifica a cada antiguo contacto individualmente y no retiene ningún registro global de cuentas borradas.

09.3 · Residuo honesto los metadatos que sí vemos

Publicamos la superficie residual en lugar de negarla.

Como intermediario de transporte, el relay ve el enrutamiento mientras existe la fila de un mensaje, marcas de tiempo de eventos, tamaños de ciphertext (los cuerpos van rellenados a bloques de 256 bytes), presencia gruesa (una bandera de conexión difusa; el last-seen redondeado a cinco minutos) y la pertenencia a chats. La postura de cero texto plano es estructural y verificable de forma continua — hay acceso de solo lectura a la base de datos de producción para revisores cualificados bajo NDA.

10 Verificación

Verificado a máquina.
Auditoría externa después.

El diseño del protocolo está formalmente verificado con modelos comprobados a máquina en cinco motores independientes — Verifpal, ProVerif, CryptoVerif, Tamarin y F*/DY* — la misma clase de herramientas y el mismo modelo de adversario usados en los análisis publicados de PQXDH y SPQR de Signal. Se verificaron once propiedades, cada una ejecutada además con la protección eliminada como control negativo que debe fallar — para que una prueba signifique algo. Entre ellas:

  • Un servidor malicioso o coaccionado no puede suplantar a un contacto anclado — el modelo previo a la corrección redescubre el ataque.
  • Grabar-ahora-descifrar-después queda cerrado: graba el tráfico hoy, rompe todo X25519 mañana — sigue ilegible.
  • Incluso con una clave Ed25519 rota en la mano, un servidor no puede falsificar la identidad — la raíz de confianza es ML-DSA-87.
  • Cada clave de mensaje permanece secreta salvo que caigan tanto X25519 como ML-KEM-1024 — probado sin cota, por mensaje, en F*/DY*.
  • Un servidor no puede degradar en silencio la suite KEM — la autentica la preclave firmada con ML-DSA-87.

Dicho claramente: estas herramientas verifican el diseño del protocolo, no el código de la implementación. Una auditoría externa independiente de la implementación es el siguiente paso estándar — el mismo paso que dieron Signal y Apple — y aún no se ha realizado. El whitepaper completo, el informe de verificación formal con los modelos y los registros de ejecución, y el acceso de solo lectura a la base de datos de producción están disponibles bajo NDA.

11 Comparativa

Frente al estado del arte publicado.

Estado público a julio de 2026; fuentes primarias bajo la tabla.

Mensajero Handshake PQ Ratchet PQ Firmas PQ Llamadas PQ Identidad Pagos en el chat
Qlavis · Messenger ✔ ML-KEM-1024 (FIPS 203) ✔ ML-KEM-1024 (NIST L5) ✔ ML-DSA-87 (FIPS 204) ✔ exigido en el servidor ✔ 12 palabras — sin teléfono, sin email ✔ Stellar + XRP Ledger
iMessage PQ3 ✔ Kyber-1024 ◐ Kyber-768 (renovación) ✗ clásicas (ECDSA) ✗ Apple ID + teléfono
Signal + SPQR ✔ Kyber-1024 ✔ ML-KEM-768 ✗ clásicas (Ed25519) ✗ número de teléfono
SimpleX ✔ sntrup761 ✔ doble KEM ✗ clásicas (Ed25519) ✔ ID aleatorio
WhatsApp ✗ clásicas ✗ teléfono

Tres compromisos que, hasta donde sabemos, ningún competidor en producción iguala en 2026: ML-KEM-1024 en el ratchet, donde Signal y Apple eligieron explícitamente 768 por ancho de banda; una raíz de confianza de identidad post-cuántica, donde cada competidor empareja un KEM post-cuántico con una firma clásica; y la exigencia post-cuántica en llamadas en el servidor de señalización, donde cada competidor deja el audio y el vídeo en SRTP clásico.

Fuentes: security.apple.com/blog/imessage-pq3 (feb 2024) · signal.org/blog/spqr (oct 2025) · signal.org/docs/specifications/pqxdh · simplex.chat/blog (mar 2024)

12 Referencias

Los estándares detrás de esta especificación.

  • NIST FIPS 203 — ML-KEM (ago 2024) · NIST FIPS 204 — ML-DSA (ago 2024) · FIPS 197 + SP 800-38D — AES-GCM
  • IETF RFC 7748 (X25519) · RFC 8032 (Ed25519) · RFC 5869 (HKDF) · RFC 2104 (HMAC) · RFC 8018 (PBKDF2) · RFC 6979 (ECDSA determinista)
  • BIP39 · BIP32 · SLIP-0010 — derivación determinista de claves
  • Especificaciones de Signal — PQXDH, el Double Ratchet, SPQR (signal.org/docs)
  • NSA CNSA 2.0 (sep 2022) · Orden Ejecutiva 14412 (jun 2026): establecimiento de claves post-cuántico para 2030, firmas para 2031

El whitepaper completo, el informe de verificación formal y el acceso de solo lectura a la base de datos de producción — disponibles para inversores cualificados, firmas de auditoría y equipos de compras bajo NDA: hello@qlavis.app