Diseño de seguridad
Se cierra en un teléfono,
se abre en otro.
Las publicaciones, fotos y chats se sellan en tu teléfono antes de salir de él, y solo las personas que eliges pueden abrirlos. A quién conoces lo guardan los teléfonos de cada quien; nuestro servidor no lo guarda.
01 Sellado
Solo las personas que eliges
pueden abrirlo
Cuando publicas, tu teléfono sella la publicación antes de enviarla. Nuestro servidor la guarda y la entrega sellada, sin ninguna llave para abrirla. Las respuestas, fotos, videos y vistas previas de enlaces viajan por el mismo camino.
El teléfono de quien escribe crea, dentro de su núcleo de seguridad, una llave de contenido nueva solo para esta publicación.
Con esa llave cierra el texto, las fotos y los videos. Antes, el texto se rellena hasta un tamaño fijo, para que no se note su largo exacto.
Sella la llave de contenido con la llave de cifrado de cada persona que la va a leer, y arma un sobre para cada una. Quien escribe también recibe uno.
El servidor guarda el texto cifrado y los sobres, y se los pasa a quienes van a leer. La llave que abre cada sobre está solo en el teléfono de esa persona, así que el servidor no puede abrirlos.
El teléfono de quien lee abre su propio sobre dentro de su núcleo de seguridad y saca la llave de contenido.
Con esa llave abre la publicación y la muestra en la pantalla.
- Nuestro servidor solo tiene texto cifrado
- Las publicaciones, respuestas, fotos, videos y vistas previas de enlaces ya están cerrados antes de llegar a nuestro servidor.
- Un sobre para cada persona que lee
- La llave de una publicación va en un sobre aparte para cada persona que la lee, y solo el teléfono de esa persona puede abrirlo.
- Una llave nueva para cada publicación
- Cada publicación y cada respuesta tiene su propia llave. La llave de una no abre ninguna otra.
- Tu teléfono decide quién la recibe
- Tu teléfono sella cada publicación para la lista de Fam que él mismo guarda. Solo entran en esa lista quienes aceptaron una solicitud o se conectaron por código QR o enlace de Fam. Un enlace de Fam que envías sirve una sola vez en 24 horas, y la primera persona que lo abre se vuelve tu Fam sin que lo confirmes. Enviar el enlace es tu consentimiento.
Las publicaciones se cierran con XChaCha20-Poly1305. Cada sobre se sella con X25519 y va dentro del secreto del par, que se comparte con X25519 y ML-KEM-768 a la vez.
02 Relaciones
A quién conoces
queda en los teléfonos
Tu lista de Fam se sella en los teléfonos, y nuestro servidor no guarda quién invitó a quién ni quién le envió qué a quién. Lo sellado viaja por buzones que no están ligados a ninguna cuenta. Eso sí, en el momento en que llega una solicitud, el servidor ve su dirección IP y la hora, y con eso un buzón puede vincularse a una cuenta. De las personas que el equipo de Krypton Ø deja entrar directamente, el servidor guarda que las dejó entrar el equipo.
- Un secreto que solo comparten dos teléfonos
- Cuando dos personas se vuelven Fam, sus teléfonos comparten un secreto que nuestro servidor nunca ve. Todo lo que va entre ellas encuentra su camino con ese secreto.
- Buzones, no cuentas
- Las publicaciones, los chats y las tarjetas van a buzones que no están ligados a ninguna cuenta, y los números de buzón cambian cada 30 días.
- Quien envía va dentro del sello
- Quién envió cada cosa va sellado adentro junto con una firma, y el teléfono que la recibe comprueba esa firma.
- Invitaciones fuera del registro
- Los miembros reciben invitaciones que nuestro servidor emite sin verlas. Cuando alguien entra, el servidor solo comprueba que la invitación sea auténtica. Sus registros guardados no dicen quién invitó a quién, aunque los registros de conexión y las solicitudes de ese momento pueden mostrarlo.
Los secretos de cada par se sellan con X25519 y ML-KEM-768 a la vez, las llaves de los buzones se derivan con HKDF-SHA256, y quien envía firma con Ed25519.
03 Llaves
Tus llaves viven
en tu teléfono
Tus llaves privadas se guardan en el núcleo de seguridad de tu teléfono, el mismo que usan las apps de iPhone y Android. Ni siquiera el código de la app que dibuja la pantalla las recibe.
- Identificadores
- Publicaciones y fotos abiertas
Las llaves privadas nunca cruzan
- Cuatro llaves privadas
- Llaves de contenido
- Llaves privadas, cerradas
- Solo en este teléfono
- Llaves públicas
- Copia de recuperación cerrada
- Mitad de recuperación · hash localizador
- Solo en este teléfono
- Se guardan en el Keychain del iPhone o en el Keystore de Android, y ninguna copia de seguridad las lleva a otro teléfono. Un teléfono nuevo solo las recupera con la recuperación.
- La app solo ve identificadores
- El núcleo le da a la app un identificador en lugar de una llave. Por sí solo, fuera de la app, un identificador no abre nada.
- Sin número de teléfono ni correo
- Te unes e inicias sesión solo con las llaves que hay en tu teléfono. No pedimos números de teléfono ni correos electrónicos.
- Estándares muy usados
- Nada de criptografía casera: estándares muy usados, implementados con las bibliotecas de Rust dalek y RustCrypto.
- X25519
- ML-KEM-768
- Ed25519
- XChaCha20-Poly1305
- HKDF-SHA256
- BIP39
04 Recuperación
Pierdes el teléfono,
no la cuenta
Elige un PIN y escribe en papel 18 palabras en inglés: te las ofrecemos al unirte, o puedes crearlas más tarde en Ajustes. En un teléfono nuevo, cuando las palabras y tu PIN coinciden, tu cuenta vuelve.
- Palabras solo en tu papel
- Te mostramos las 18 palabras una sola vez, al crearlas, y te pedimos algunas de vuelta. Puedes crearlas al unirte o más tarde en Ajustes. Las palabras no quedan en nuestro servidor, en ninguna nube ni en tu teléfono, y no te las volvemos a mostrar.
- Las palabras y tu PIN
- Ni las palabras ni el PIN abren la cuenta por sí solos. El PIN se bloquea después de algunos intentos fallidos, y nuestro servidor encuentra tu cuenta por el hash de un valor de un solo sentido hecho con las palabras, nunca por las palabras mismas.
- Tiempo para detenerlo
- La recuperación termina después de una espera de 48 horas. Mientras tanto, tu teléfono anterior ve la solicitud y puede cancelarla.
- Lo que guarda nuestro servidor no basta
- El secreto que abre tu copia viene en dos mitades: una en nuestro servidor y la otra en las palabras de tu papel. Aunque alguien se llevara nuestro servidor entero, sin las palabras no se abre.
Son 18 palabras del estándar BIP39, 192 bits. Incluso una computadora cuántica necesitaría 2⁹⁶ intentos. Las dos mitades se combinan con HKDF para abrir la copia.
05 Llamadas
Llamadas que quedan
entre ustedes dos
Habla con tu Fam por voz. Tu voz va cifrada entre los dos teléfonos, y el historial de llamadas queda en cada teléfono.
- Solo tu Fam puede llamarte
- La llamada suena, sellada, por el buzón que solo ustedes dos comparten. Nuestro servidor no registra quién llama a quién.
- Solo el teléfono que recibe sabe quién llama
- El teléfono que recibe abre el sello de quién llama y lo muestra en la pantalla de llamada. Nuestro servidor no conoce el nombre de quien llama.
- Un relé que oculta tu dirección IP
- Las llamadas suelen conectarse a través de un relé. El relé ve las direcciones IP de los dos teléfonos pero no puede abrir el audio cifrado, y la persona a la que llamas no ve tu dirección IP. Si un teléfono no recibe los datos del relé, los dos teléfonos se conectan directamente, y entonces cada uno puede ver la dirección IP del otro.
- Firmada por los dos teléfonos
- Cada teléfono firma los datos de conexión con su propia llave. Si algo se cambia en el camino, la llamada no se conecta.
Los datos de conexión se firman con la llave de cuenta Ed25519 de cada persona.
06 Tus controles
Tú decides
qué se ve
Bloquea la app, elige quién ve tu tarjeta, y deja lo que está en tu pantalla solo en tu pantalla.
- Bloqueo de la app
- Bloquea Krypton Ø con el reconocimiento facial o la huella de tu teléfono, o con su código. Se bloquea enseguida, o después de 1, 15 o 60 minutos fuera de la app. Mientras está activado, el selector de apps no muestra nada del contenido. El ajuste queda en tu teléfono; nuestro servidor no sabe si lo usas.
- Quién ve tu tarjeta
- Tu tarjeta está sellada. Elige Solo Fam o Todos. En ambos casos, tu foto original va solo a tu Fam. Si la restringes en cualquier momento, tu teléfono vuelve a sellar la tarjeta con una llave nueva.
- Sin capturas de pantalla
- Las pantallas que ves en Krypton Ø no se pueden capturar ni grabar.
- Publicaciones temporales
- Si haces temporal una publicación, 24 horas después de que aparece desaparecen la publicación, su chat y sus fotos.
07 Resistencia cuántica
Difícil de romper,
incluso para computadoras cuánticas
Hay atacantes que juntan texto cifrado hoy con la idea de abrirlo más adelante con una computadora cuántica. En la capa exterior que entrega llaves a las personas que eliges, Krypton Ø usa a la vez el cifrado probado de hoy (X25519) y el cifrado poscuántico (ML-KEM-768).
- Hay que romper los dos
- Los secretos de ambos se combinan en uno antes de sellar. Si aparece una debilidad en uno, el otro sigue protegiendo. Es el mismo enfoque híbrido que eligieron Signal e iMessage.
- Toda la capa exterior, con los dos
- Toda capa exterior que entrega llaves se sella con los dos: las solicitudes de Fam y las notas con que cada par comparte su secreto, las copias de seguridad selladas, la recuperación, los paquetes de invitación y los reportes. Las publicaciones y chats dentro de los buzones de cada par se envuelven con el secreto de 256 bits del par, compartido así.
- Llaves públicas que no se pueden cambiar
- La llave pública poscuántica también queda ligada a la firma de tu cuenta. Si nuestro servidor o alguien en el camino la cambia por otra, la firma no coincide y el teléfono la rechaza.
- El cierre del contenido sigue siendo fuerte
- XChaCha20-Poly1305 de 256 bits, que cierra las publicaciones y las fotos, y SHA-256 conservan suficiente fuerza frente a las computadoras cuánticas, así que no hace falta cambiarlos.
La capa exterior se sella con X25519 y ML-KEM-768 (estándar FIPS 203 del NIST de EE. UU.) a la vez, y los dos secretos se combinan con SHA3-256.
Lo que aún estamos cambiando
- Las firmas (Ed25519) todavía no son poscuánticas. Una firma falsificada no puede abrir nada del pasado. Cada cuenta ya tiene una llave de firma ML-DSA (FIPS 204), creada cuando te unes y ligada a tu identidad, y planeamos activar firmas que la usen junto con Ed25519 antes de que las computadoras cuánticas prácticas parezcan cercanas.
- Las invitaciones anónimas siguen ocultando de quién eran, incluso frente a computadoras cuánticas. La parte que impide falsificarlas cambia junto con las firmas.
- El audio de las llamadas se cifra entre los dos teléfonos con el estándar WebRTC, que todavía no es poscuántico.
08 Bots
La llave de un bot
nunca llega a nuestro servidor
Los miembros de KryptonØ+ pueden crear bots que solo envían: publican mensajes y fotos en los chats de grupo en los que están. Las llaves del bot se crean en el teléfono de su dueño y se exportan como archivo, y el dueño ejecuta el bot en su propio servidor. No creamos una forma de que nuestro servidor ejecute bots por ti, porque así podría leer los chats en los que están.
- Llaves creadas en el teléfono del dueño
- El núcleo de seguridad escribe las llaves del bot directamente en un archivo de llave. El dueño lo exporta y la copia del teléfono se borra. Nuestro servidor solo tiene las llaves públicas del bot, y el archivo no contiene las llaves del dueño.
- Nuestro servidor no sabe de quién es el bot
- Un bot se crea sin iniciar sesión, con un ticket anónimo de KryptonØ+, y la llave que lo administra no está ligada a la llave de la cuenta del dueño. Nuestro servidor sabe cuántos bots hay, sus llaves públicas, cuándo se creó cada uno y cuántos mensajes publica cada uno al día. La app obtiene el ticket con antelación para que el servidor no pueda emparejarlo con el bot nuevo por la hora, aunque la primera vez todavía puede.
- Solo en los chats del dueño, con etiqueta
- Un bot entra solo en chats de grupo en los que está su dueño, después de que el dueño lo confirme una vez, y los teléfonos descartan un bot que añada cualquier otra persona. Donde aparece su nombre aparece la etiqueta “Bot”, y no se puede llamar a un bot ni enviarle una solicitud de Fam. Cuando el dueño sale, el bot sale también. Las publicaciones del bot llevan su propia sesión para poder contar el límite diario, así que nuestro servidor puede ver en qué etiqueta de chat (un número aleatorio) publica un bot, pero no de quién es el bot ni qué dice.
- El dueño puede leer esos chats
- Quien ejecuta un bot tiene el secreto de cada chat en el que está, igual que cualquier persona de ese chat. Nuestro programa para ejecutar bots no descarga mensajes, pero uno modificado podría leerlos. Por eso un bot entra solo en chats en los que está su dueño, y lleva una etiqueta para que todos sepan que está ahí.
Un bot tiene las mismas llaves que un miembro: Ed25519 y ML-DSA-65 para su identidad, X25519 y ML-KEM-768 para sellar. Cada bot lleva un certificado que su dueño firma con su llave de cuenta Ed25519, y en nuestro servidor sus publicaciones se ven como cualquier otra.
Guía para desarrolladores: pon en marcha un bot y conecta tu código
Lo que ninguna app puede proteger
- Una foto que alguien guarda en su propia galería, o una cámara que apunta a la pantalla
- Alguien a quien le das tu teléfono desbloqueado
- Una app modificada para sacar lo que recibió su dueño
- Una grabación que la otra persona hace de una llamada
- Un teléfono que ya está en manos de malware
- Alguien que vigila la red y vincula buzones, llamadas o registros a una cuenta por dirección IP y hora. Krypton Ø no envía las solicitudes por un relé que oculte las direcciones IP
- Una app modificada que ignora las reglas que se cumplen en el teléfono. Los bloqueos o el límite para reenviar publicaciones los hace cumplir la app de quien recibe, no nuestro servidor
- Que se filtre el secreto entre tú y una persona de tu Fam. Ese secreto no cambia con el tiempo, así que las notas selladas de ese par que sigan en nuestro servidor (hasta 90 días) podrían abrirse
Publicaremos una descripción técnica completa en GitHub.