ADR-006 — Local-first y recuperación como funciones fundamentales¶
- Estado: propuesto.
- Fecha: 2026-09-04.
- Edición documental: v0.2; alcance de comprobación en el índice.
English version: ../../adr/ADR-006-local-first-recovery-first.md
Contexto¶
Un homelab puede estar apagado y un teléfono puede perderse. E2EE sin historial local, estados honestos y una ruta de recuperación resulta poco útil para familiares. A la vez, restaurar snapshots criptográficos antiguos o entregar todas las claves a cada dispositivo destruye propiedades importantes.
Decisión¶
La base cifrada del cliente es la fuente de su historial; la cola local permite redactar y preparar envíos sin red. El relay conserva sobres hasta ACK/TTL y no es el archivo histórico obligatorio.
Separar tres capacidades:
- Kit de identidad: raíz privada cifrada y metadatos de recuperación; permite autorizar dispositivos nuevos. Su secreto de alta entropía se custodia fuera del único endpoint.
- Incorporación de dispositivo: claves y leaf nuevas; autorización de raíz y Add por grupo. No clonar claves privadas de dispositivos ni estados MLS activos.
- Archivo/transferencia de historial: mensajes exportados y adjuntos seleccionados, cifrados y autenticados con claves separadas. No incluye secretos de epochs activos.
El cifrado saliente y la evolución MLS se confirman junto con outbox en una transacción. La recepción y deduplicación se confirman antes de ACK. Restaurar una base anterior no permite reanudar envío desde ese estado: se trata como recuperación y reingreso.
Matriz de recuperación¶
| Incidente | Qué permite recuperar | Qué requiere |
|---|---|---|
| Servidor perdido; clientes intactos | Identidad e historial local; servicio desde backup o nuevo realm | Reconfigurar rutas, confiar en nuevo endpoint y reconciliar pendientes |
| Teléfono perdido; otro dispositivo y raíz accesibles | Identidad, nueva incorporación e historial seleccionado | Revocar teléfono, Remove/Commit y transferencia autenticada |
| Todos los dispositivos perdidos; kit y archivo disponibles | Identidad e historial exportado | Claves nuevas, contraste de manifiestos, reingreso y posible grupo nuevo |
| Solo kit de identidad | Autoridad de la identidad | Reingreso; el pasado depende de otros clientes o archivos |
| Solo archivo de historial y su clave | Los registros archivados | Nueva identidad; el archivo no autoriza a firmar como la anterior |
| Sin dispositivos, kit ni archivo | Nada de identidad/historial anteriores | Empezar con identidad nueva y reverificar contactos |
| Backup del relay sin material personal | Servicio, metadatos y sobres aún útiles para clientes que tengan claves | No recupera por sí solo identidad ni historial descifrable |
| Raíz comprometida | Continuar con identidad nueva | Revocaciones posibles, contacto externo y reverificación; no confiar en continuidad automática |
Alternativas¶
- Historial permanente descifrable en servidor: rompe la frontera E2EE.
- Historial remoto cifrado como única copia: mantiene confidencialidad potencial, pero depende de disponibilidad y clave; no satisface local-first.
- Restaurar base completa con estado de envío MLS: puede retroceder generaciones y revocaciones; rechazado como recuperación automática.
- No ofrecer recuperación por preservar FS: evita copias, pero no satisface el producto. Se ofrece archivo explícito con límites claros.
Consecuencias¶
Copiar historia aumenta los lugares donde el pasado puede quedar expuesto. La forward secrecy del transporte no cifra retroactivamente los mensajes locales ni protege un archivo cuando se roba su clave. La UI permite elegir periodo y adjuntos y explica esta consecuencia antes de transferir.
La aplicación distingue pendientes locales, aceptación del relay, recepción por dispositivo y lectura optativa. Un grupo puede tener entrega parcial. Expiración o pérdida del servidor deja mensajes inciertos; no se rellenan con estados de éxito inventados.
La recuperación se valida desde la primera versión utilizable: exportar un archivo no basta sin restaurarlo. El usuario puede verificar el kit mediante una prueba controlada que no envía su secreto al servidor. El diseño exacto del archivo y del canal de vinculación sigue pendiente de revisión.
Criterios de aceptación¶
Abrir historial y redactar sin red; reiniciar durante envío/recepción sin perder ni duplicar eventos visibles; restaurar un servidor; recuperar con kit antiguo; recuperar solo historial; pérdida total; dispositivo retirado intentando volver; fallo de contraseña/secreto de archivo; adjunto ausente o corrupto.
Reabrir si se añade sincronización cloud permanente, recuperación administrada o delegación social. Ninguna comodidad nueva puede restaurar secretamente un estado MLS antiguo o entregar la raíz al operador.
Referencias: arquitectura, protocolo, amenazas.