Qué guarda el servidor
El cifrado mantiene en privado tus palabras. No oculta que hubo una conversación: quien opera el servidor sigue viendo que un mensaje fue de ti a otra persona, y cuándo. Aquí está todo lo que el servidor guarda, y durante cuánto tiempo.
La versión corta
- El servidor guarda para quién es un mensaje y cuándo llegó, porque de otro modo no podría entregarlo.
- Guarda el mensaje en sí, todavía cerrado, hasta que tu aplicación lo recoge, y no tiene nada que lo abra.
- Guarda los datos de tu cuenta: nombre de usuario, correo, contraseña (guardada revuelta) y la mitad pública de tus claves.
- No guarda cuándo añadiste a un amigo, bloqueaste a alguien o entraste en un grupo. Eso se quitó a propósito.
- Sus propios registros no contienen ninguna cuenta, dispositivo ni dirección, salvo que un operador active a propósito el registro detallado.
El resto de esta página es la misma respuesta con cada campo escrito uno por uno.
Retenido mientras un mensaje está en camino
Los números de abajo se leen de la configuración en marcha de este servidor cuando se sirve la página: son lo que hace esta instancia, no lo que dijo un documento una vez.
| Se guarda | Por qué tiene que guardarse | Desaparece |
|---|---|---|
| Cuenta y dispositivo del destinatario | Un sobre no se puede entregar sin dirección | 1 día(s) después de entregarse |
| Hora de llegada y tamaño exacto | El orden, y el tamaño es el del propio texto cifrado, así que la longitud de un mensaje no queda oculta, byte a byte. Los tamaños se agrupan por tipo: una confirmación de lectura no mide lo que una foto, y una respuesta de una palabra no mide lo que un párrafo. No hace falta descifrar nada para verlo, y es una conjetura débil pero real sobre lo que lleva un sobre. Ocultarlo significa rellenar los mensajes en el dispositivo que envía antes de cifrarlos, un cambio en las aplicaciones y no en este servidor, porque el servidor no puede rellenar lo que no debe leer. Todavía no está hecho. | 1 día(s) después de entregarse |
| Cuenta y dispositivo del remitente | Solo en envíos identificados; un envío sellado no guarda ninguno de los dos | 1 día(s) después de entregarse |
| El texto cifrado | Es el mensaje; el servidor no tiene ninguna clave que lo abra | 30 días si nunca se recoge |
| Adjuntos (fotos, notas de voz, historias, todo cifrado) | Los dispositivos los descargan aparte del sobre que los referencia | 30 días |
| “Este es urgente”, una marca en el sobre, no se guarda | Una llamada tiene que sonar mientras todavía está sonando, así que el remitente le dice al servidor que envíe la notificación con prioridad alta en vez de esperar a que la aplicación consulte. En la práctica, eso significa que el servidor distingue una llamada de un mensaje: no quién llama, ni sobre qué, pero sí que este es urgente. Es lo más informativo que un remitente decide revelar, y es una decisión: nada obliga a poner la marca. | Nunca se escribe. Se lee para decidir la notificación y se va con la petición. |
| “Este no necesita atención”, la misma forma, no se guarda | La otra cara de la misma moneda: el remitente dice que un sobre es mantenimiento y no algo por lo que interrumpir a una persona, así que el servidor envía un despertar en segundo plano en vez de una alerta. Eso le dice más o menos lo mismo que la marca de arriba, al revés. La alternativa, no enviar nada y dejar que la aplicación decida tras descifrar, significa depender de notificaciones silenciosas que iOS limita, así que el trato honesto es una pequeña revelación a cambio de notificaciones que sí llegan. | Nunca se escribe, igual que arriba. |
| Contadores del límite de registros (por IP) | Las cuentas nuevas están limitadas por dirección y por hora, y un contador necesita la dirección | una hora; el contador solo vive su ventana |
Retenido mientras exista la cuenta
| Se guarda | Por qué |
|---|---|
| Nombre de usuario, correo, hash de la contraseña, nombre visible | Es una cuenta |
| Claves públicas por dispositivo | Se publican a propósito; eso es un paquete de claves previas |
| Lista de contactos, hasta que la quites | La presencia solo se muestra a la gente de tu lista, así que el servidor la guarda para hacer cumplir eso. Los ajustes ofrecen "Quitar mi lista de contactos del servidor": la lista pasa a vivir solo en los almacenes cifrados de tus dispositivos (y viaja en tu copia cifrada del historial), y el coste honesto es que tus contactos te ven desconectado. Un diseño de presencia que no necesite un grafo almacenado es el sustituto previsto. |
| Bloqueos | El servidor los hace cumplir, así que tiene que conocerlos. No puede aplicar uno a un mensaje que no nombra a su remitente; bloquear a alguien también cancela los pases que le diste, que es la parte que sí se puede dirigir a una persona. |
| Quién está en cada grupo | No en claro. El servidor guarda la lista de miembros de cada grupo cifrada, sin ningún número de cuenta dentro: para él los miembros son solo fichas aleatorias que no puede vincular a nadie, y la lista es un bloque para el que no tiene clave. La mitad que faltaba está hecha: las aplicaciones ya crean los grupos así, y la vieja tabla en claro está vacía, medida, no supuesta. Esta es la forma honesta de lo que eso compra, y no ha cambiado. Te protege de que roben una copia de esta base de datos, o de que la entreguen, que es la forma corriente en que estas cosas salen mal, y merece la pena. No oculta tus grupos a quien opera el servidor mientras funciona, porque los mensajes van dirigidos a cada dispositivo: mirar quién recibe el tráfico de un grupo sigue delatando al grupo. Así que la promesa que esto se gana es “un volcado de esta base de datos no revela tus grupos”, y no “el servidor no puede ver con quién hablas”. Suenan igual y no lo son, y no las vamos a confundir. |
| Cómo se llama cada grupo | No se guarda. Antes sí, y no debía: el nombre estaba en una columna que el servidor nunca usaba para nada, así que “Apoyo en la quimioterapia” o el nombre de una campaña sindical estaban en una máquina que puede ser asaltada o recibir una orden judicial, y no le servía a nadie. Ya no está, y los nombres que ya se habían guardado se borraron, no solo se dejaron de escribir. Los únicos lugares donde puede vivir el nombre ahora son los teléfonos de la gente del grupo, que se lo cuentan entre sí con el mismo cifrado que todo lo demás. Dos cosas se siguen de esto, y ninguna se te oculta. La mitad de las aplicaciones ya está en Android y en la beta de TestFlight del iPhone; hasta que llegue a tu teléfono, cada grupo se lee como “Grupo”, que es el servidor negándose a contestar, no algo perdido. Y un grupo que creaste antes del cambio se muestra como “Grupo” hasta que alguien de dentro lo renombra, porque el nombre viejo se borró aquí y ningún teléfono había recibido nunca una copia: no queda nada de donde restaurarlo. Renombrar llegó en esa misma versión, exactamente por esto. |
| Presencia | Se redondea a la ventana de conexión antes de escribirse, nunca al segundo |
| Con qué versión de la aplicación consultó por última vez cada dispositivo | La versión comercial y nada más: “0.25.0”, nunca un número de compilación, un modelo de dispositivo ni un sistema operativo. Se sobrescribe en vez de acumularse, así que no hay registro de qué actualizaste ni cuándo. Responde a una pregunta que no se puede responder de otra forma: si todas las aplicaciones que todavía hablan con este servidor son lo bastante nuevas como para quitar algo del servidor. Lo que se quiere quitar es la lista de contactos de arriba. Quitarla mientras aplicaciones viejas todavía leen sus contactos de aquí vaciaría esas listas, así que la elección está entre esta columna y no hacer nunca el cambio. Preferimos guardar una cadena de versión a guardar tu grafo de contactos. |
| Resumen de la clave de entrega | Solo el hash. La clave en sí nunca llega al servidor salvo dentro de un envío sellado |
| Marca de última actividad por dispositivo | Se redondea a la hora antes de escribirse. Existe para que un dispositivo que lleva 90 días en silencio pueda caducar, sus claves retirarse y su correo en cola borrarse, en vez de seguir siendo localizable para siempre. El dispositivo más reciente de una cuenta nunca caduca, y una cuenta tiene como máximo 6 dispositivos. |
| Denuncias que nos envías | Se guardan 365 días y luego se borran. Una denuncia nombra la cuenta denunciada y la que denuncia, el motivo elegido, y la copia del mensaje que decidiste adjuntar, en forma legible. Tu teléfono puede leer ese mensaje aunque el servidor no, y la casilla que ofrece adjuntarlo viene marcada por defecto, así que este es el único sitio donde existe aquí texto legible de un mensaje. Desmárcala y la denuncia no lleva copia. Ver denunciar a alguien. |
| Intentos de llamada | Se guardan 7 días. Cuando el servidor intenta hacer sonar un teléfono para una llamada entrante, anota qué dispositivo intentó y si Apple aceptó la notificación, para que una llamada que nunca llega se pueda diagnosticar en vez de adivinar. Sin contenido, y nada sobre quién llamaba. |
| Estado por conversación | Hasta dónde has leído cada una de tus conversaciones, para que un hilo no vuelva a aparecer sin leer en otro de tus dispositivos. Sin contenido. |
| Notificaciones | Contadores y marcas para los distintivos que muestran las aplicaciones, guardados hasta que se leen. |
| Códigos de invitación | Códigos emitidos para dejar que alguien cree una cuenta, y si cada uno se ha usado. |
| Buzones adicionales | Si le has dicho a la aplicación que guarde correo también en otro servidor, cuáles son esos servidores. |
| Órdenes de cierre de sesión de dispositivos | Una instrucción pendiente de que un dispositivo que cerraste a distancia se borre a sí mismo, guardada hasta que ese dispositivo la recoge. |
Retenido para siempre, a propósito
El registro de transparencia de claves: qué claves públicas publicó una cuenta, y cuándo se añadió, revocó o caducó cada dispositivo. Es de solo añadir y permanente, porque todo su valor está en que no se puede reescribir en silencio: es como tu aplicación detecta un servidor que enseña claves distintas a personas distintas. Contiene claves públicas y eventos de ciclo de vida, nada más: qué cuenta, qué dispositivo, qué tipo de evento, cuándo, y ya está. Sin direcciones, sin metadatos de peticiones, sin filas de mensajes. Esos campos son la cadena; no viaja con ella ningún residuo operativo.
Deliberadamente no guardado
Esto se quitó en vez de conservarse. Cada cosa se escribía y nunca se leía, lo que la convertía en un registro duradero de cómo se formó un grafo social a cambio de nada:
- Quién subió un adjunto. El importante: un sobre sellado no guarda remitente, y luego el adjunto al que apuntaba nombraba a quien lo subió durante toda la vida del archivo.
- Cuándo se añadió un contacto.
- Cuándo se puso un bloqueo.
- Cuándo alguien entró en un grupo.
Sin IA, en ninguna parte
Nada en la aplicación ni en este servidor llama a un modelo de lenguaje. Nada lee tus mensajes, nada los resume, y nada se entrena con ellos, porque nada de aquí puede descifrarlos. No es una política que se pudiera cambiar en silencio; es lo que el diseño deja posible.
Notificaciones push
Android no necesita ningún servicio de notificaciones: la aplicación mantiene su propia conexión con este servidor, y no interviene ningún tercero. En iOS el despertar pasa por Apple, y lo que Apple ve está fijado por una prueba, no por una promesa: la carga son las cadenas fijas "Flamenet" y "New message", un sonido, y como mucho un recuento de sobres pendientes; nunca un remitente, nunca un hilo, nunca una palabra del contenido. Apple sabe que un dispositivo fue despertado y cuándo; el dispositivo recoge y descifra su correo por sí mismo y escribe su propio aviso. El token de notificaciones se guarda por dispositivo y se borra al cerrar sesión, y cuando Apple informa de que la aplicación ya no está.
Registros
En su nivel por defecto el servidor registra líneas operativas que no nombran a
nadie: el arranque, los recuentos del barrido de retención de cada hora, y las
peticiones rechazadas, con cualquier identificador de cuenta o dispositivo de la ruta
enmascarado antes de escribir la línea, porque a quién se rechazó es
exactamente lo que no debe acumularse en un archivo que nadie barre. Por debajo,
debug hay que activarlo a propósito: registra las URL completas y cada
consulta a la base de datos, y una URL del protocolo contiene un identificador de
dispositivo, lo que convertiría el registro en una crónica duradera de quién descargó
las claves de quién.
Lo que está delante del servidor guarda su propio registro de accesos. Eso lo configura el operador, y en un servidor que tú mismo ejecutas, el operador eres tú. En el servidor que funciona en este dominio, el registro de accesos del proxy de entrada se borra cada semana: las direcciones de conexión en la puerta viven como mucho siete días.
Ese registro también anota el tamaño de cada petición, que es la misma revelación que la fila de arriba entrando por una segunda puerta, y conviene decir claro que el registro sobrevive al sobre: el sobre se borra a los 1 día(s), y la línea que anota cuánto medía queda en el registro de accesos hasta una semana. Rellenar los mensajes en el dispositivo que envía es lo que ocultaría ambas cosas, porque las dos miden los mismos bytes. Eso todavía no está hecho. Un operador que no quiera ninguna de las dos puede apagar el registro de accesos; aquí se mantiene porque sin él no hay forma de ver si el sitio es alcanzable siquiera.
Lo que nada de esto cambia
Un servidor observa necesariamente la conexión que entregó un mensaje, incluida su dirección. El remitente sellado quita al remitente de la fila almacenada, no de la red. Quien afirme que un servicio de mensajería alojado está libre de metadatos está describiendo otra cosa.
Ver también la política de privacidad para las ventanas de retención completas, y montar tu propio servidor para saber cómo cambiarlas.