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 — 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
- 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 — toda capa exterior que entrega llaves se sella con los dos. 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.
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 pasar 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 — 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.