Finyvo Legal
Seguridad
Esta página cuenta cómo está construida Finyvo por dentro. La política de privacidad responde a qué datos tuyos se tratan, para qué y con quién; aquí está el cómo: dónde vive cada cosa, qué la protege, qué decisiones tomamos y cuáles todavía no. Sin sellos ni superlativos.
Tabla de contenidos
Esta página cuenta cómo está construida Finyvo por dentro. La política de privacidad responde a qué datos tuyos se tratan, para qué y con quién; aquí está el cómo: dónde vive cada cosa, qué la protege, qué decisiones tomamos y cuáles todavía no. Sin sellos ni superlativos.
Lo esencial
| Pregunta | Respuesta corta |
|---|---|
| ¿Dónde viven tus datos financieros? | En tu iPhone y, si activas la sincronización, en tu iCloud privado. Algunas funciones envían datos al backend para procesarlos. |
| ¿Hay cuenta o contraseña? | No. La app se identifica con una llave criptográfica que nace dentro del Secure Enclave de tu iPhone y nunca sale de ahí |
| ¿Qué protege el tráfico? | HTTPS con TLS 1.2 o superior, en todas las conexiones |
| ¿Dónde corre el backend? | En Cloudflare Workers, con D1 y KV como único almacenamiento |
| ¿Dónde están las claves de los proveedores? | Sólo en el backend, como secretos de Cloudflare. Ninguna viaja dentro de la app |
| ¿Puedes apagar lo que sale a internet? | iCloud e IA tienen controles separados. Convertir Excel requiere enviar el archivo incluso con IA apagada. |
| ¿Hay certificaciones de seguridad? | No. Ni SOC 2 ni ISO 27001. El detalle está en Lo que todavía no hay |
En tu iPhone
La base financiera se guarda en SwiftData dentro del contenedor protegido por iOS. Los cálculos y la exportación se realizan en el dispositivo. Las preferencias se guardan en los ajustes del sistema; la memoria de categorías pertenece a tu base de datos.
El Llavero conserva el identificador de llave de App Attest y el identificador de instalación con accesibilidad WhenUnlockedThisDeviceOnly, y el token de sesión con su caducidad mediante AfterFirstUnlockThisDeviceOnly, para reutilizarlo en segundo plano tras el primer desbloqueo. No se sincronizan por el Llavero de iCloud; pueden sobrevivir a la desinstalación.
Las capturas de Apple Pay se escriben primero como evidencia local y se procesan después. Las conexiones activas son propias de cada dispositivo; los registros financieros y de revisión pueden sincronizarse por iCloud. Pausar una conexión no borra esa evidencia.
La limpieza automática aplica límites de siete copias programadas y tres previas a migraciones, pero protege la más reciente, las manuales, las de incidentes y las que están en uso. El modo privado oculta importes en vistas de consulta, pero no cifra datos ni sustituye el bloqueo del iPhone.
Tu copia en iCloud
Si dejas activada la sincronización —viene activada—, tus datos se replican a la base de datos privada de tu propia cuenta de iCloud, dentro del contenedor iCloud.com.moiszr.finyvo. Es infraestructura de Apple y la cuenta es tuya: Apple la cifra en tránsito y en reposo, y Finyvo no puede consultarla. No aparece en ninguna consola nuestra. Si tienes activada la Protección de Datos Avanzada de Apple, esa copia queda además cifrada de extremo a extremo.
Puedes apagarla en Ajustes → Sincronización → iCloud. El cambio se aplica durante el uso en la sincronización actual. En instalaciones que todavía requieren reiniciar, Ajustes indica que se aplicará al siguiente arranque. No borra la copia de iCloud ni desactiva los otros envíos de la app.
Apagarla no borra lo que ya se subió. La Aplicación no tiene un botón de “borrar mi copia de iCloud”: para eliminarla hay que ir a Ajustes de iOS → [Tu nombre] → iCloud → Gestionar almacenamiento de la cuenta → Finyvo.
Qué se replica exactamente, y qué ocurre con tu nombre de visualización, está en la política de privacidad.
Cómo la app se autentica
Finyvo no tiene cuentas. No hay correo, ni contraseña, ni inicio de sesión que alguien pueda adivinar, filtrar o robarte. El backend comprueba algo distinto: que quien llama es la app real, corriendo en un dispositivo real.
La llave. En el primer arranque, la Aplicación genera una llave criptográfica dentro del Secure Enclave. La parte privada nunca sale de ese chip: no la puede leer la app, ni iOS, ni nosotros. Sólo se le puede pedir que firme.
El handshake, paso a paso:
- La app pide un reto a
/auth/challenge. El backend devuelve un número aleatorio de un solo uso, con 5 minutos de vida. - La app pide al Secure Enclave una atestación sobre ese reto y la envía a
/attest/verify. Aquí interviene Apple: la atestación demuestra que la llave nació en un dispositivo real y que quien la usa es una copia legítima de Finyvo. - Si cuadra, el backend quema el reto —uno ya usado no se acepta dos veces— y emite dos cosas: un identificador de instalación y un token de sesión que caduca a los 15 minutos.
- Desde ahí, cada llamada a
/fx/*,/brand/*,/ai/*e/import/*viaja con ese token. Ninguna función de la Aplicación usa un token anónimo compartido. - Cuando al token le quedan un par de minutos, la app lo renueva sola: reto nuevo, firma nueva del Secure Enclave, token nuevo. Si una petición se cruza con la expiración y vuelve un 401, se renueva y se reintenta una vez.
La clave que sí está en el binario. Las tres peticiones del handshake no pueden llevar todavía un token de sesión —existen para obtenerlo—, así que se identifican con una clave de aplicación incluida en el binario y, por tanto, común a todas las copias de Finyvo. Cualquiera que extraiga el binario puede leerla, y por eso no es la frontera de seguridad: sirve para filtrar ruido de fondo. La frontera real es la atestación del Secure Enclave, que no se falsifica copiando una cadena de texto. Esa clave tampoco te identifica a ti.
Identidad de instalación. Es seudónima y puede conservarse al renovar la llave con una prueba válida de la sesión anterior. Reinstalar no garantiza una identidad nueva. El backend la usa para plan, cupo y prevención de abuso.
En tránsito
Todo viaja cifrado con HTTPS / TLS 1.2 o superior: entre la Aplicación y nuestro backend, y entre nuestro backend y los proveedores externos. No hay ningún camino en texto plano.
Nuestro backend exige TLS y responde siempre con estas cabeceras:
| Cabecera | Valor | Para qué |
|---|---|---|
Strict-Transport-Security |
max-age=31536000; includeSubDomains; preload |
Un año de HTTPS obligatorio, subdominios incluidos |
Content-Security-Policy |
default-src 'none'; frame-ancestors 'none'; base-uri 'none'; form-action 'none' |
La API no sirve páginas: no puede cargar recursos, ni ser incrustada, ni enviar formularios |
X-Frame-Options |
DENY |
Lo mismo, para navegadores antiguos |
X-Content-Type-Options |
nosniff |
Nadie reinterpreta el tipo de una respuesta |
Referrer-Policy |
no-referrer |
Ninguna dirección nuestra se filtra hacia fuera |
Permissions-Policy |
geolocation=(), microphone=(), camera=() |
La API no pide sensores, y queda escrito |
Cross-Origin-Resource-Policy / Cross-Origin-Opener-Policy |
same-site / same-origin |
Aísla las respuestas de otros orígenes |
Cache-Control |
no-store |
Nada queda en cachés intermedias. La excepción son los logotipos de marca, que son públicos y sí se cachean |
El sitio finyvo.com no instala cookies ni carga recursos de terceros: las tipografías están alojadas en nuestro propio dominio.
Cómo está construido el backend
El backend usa Cloudflare Workers, D1 y KV para autenticación, proveedores, cachés y métricas. D1 guarda tasas históricas, instalaciones, uso de IA y formatos de importación confirmados. KV guarda cachés, retos, contadores y tickets temporales de formato.
Las rutas de IA usan modelos de OpenAI seleccionados por función; no necesariamente comparten el mismo modelo. Las métricas guardan identificadores de solicitud y respuesta que permiten correlacionarlas con respuestas en OpenAI. La tabla de métricas no guarda los cuerpos completos; la caché de importación sí conserva interpretaciones y mapas del formato. No se promete retención cero ni imposibilidad de relacionar los datos.
/import/grid convierte Excel completo en memoria, sin persistir el archivo ni la tabla. No usa IA: apagar la IA no evita esa subida.
Los registros estándar de Workers duran 3 o 7 días según el plan de Cloudflare. D1 no tiene borrado automático por caducidad implementado para métricas e instalaciones. Las alertas ntfy incluyen metadatos operativos; el código no envía IP ni contenido financiero a ese canal. Consulta Privacidad para el detalle y las fuentes.
Límites y anti-abuso
El backend aplica controles por IP e instalación, cupo mensual de IA y protección del gasto por instalación y global. Plus elimina el cupo mensual del plan, no los controles técnicos. Una respuesta 429 puede indicar un límite; una 503 puede indicar indisponibilidad o protección global. La app puede indicar cuándo reintentar y conserva alternativas locales. Las consultas de cupo no invocan modelos ni consumen una solicitud de IA.
Los interruptores son tuyos
- iCloud: desactívalo desde Ajustes. El cambio se aplica durante el uso; si tu instalación todavía requiere reiniciar, Ajustes lo indica. No borra la copia existente ni desactiva otras funciones de red. El nombre de visualización usa un almacén separado de iCloud.
- IA: se requiere tu permiso explícito para compartir contenido con OpenAI. El control general permite retirarlo y los controles por función limitan qué funciones lo usan. Para importar sin subir un archivo, usa CSV, TSV o JSON con la IA de importación apagada; Excel requiere conversión en el backend.
- Apple Pay: pausa o revoca la conexión en Finyvo y desactiva la automatización en Atajos. Las compras y evidencias anteriores se gestionan por separado.
- Notificaciones: controla permisos y previsualizaciones en iOS. Algunos recordatorios contienen importes; el aviso de captura es genérico. Los mensajes de éxito/error de la app no son envíos de comentarios al equipo.
La exportación se genera localmente, sin cifrado, y el modo privado no oculta sus cifras. El restablecimiento de la app no elimina archivos exportados ni registros del backend.
Lo que todavía no hay
No publicamos certificaciones SOC 2 o ISO 27001, un informe de auditoría externa ni un programa de recompensas. Finyvo no incluye bloqueo propio con biometría. El ZIP de exportación de datos no está cifrado; las copias portables de recuperación pueden protegerse con contraseña. El borrado del contenedor privado de iCloud se gestiona en iOS. Las credenciales técnicas pueden sobrevivir a desinstalar la app; para solicitar datos o eliminación del backend, usa el contacto de privacidad.
Reportar un fallo de seguridad
Si encuentras algo —en la app, en el backend o en el sitio web— escríbenos a [email protected] con el asunto Seguridad.
Cuenta qué encontraste y cómo reproducirlo. Si puedes, incluye la versión de la app y la hora aproximada: ayuda a localizar la petición en los registros, que tienen retención limitada.
Lo que te pedimos: danos tiempo de arreglarlo antes de publicarlo, y no accedas a datos de otras personas ni degrades el servicio mientras investigas. No hay recompensa económica; sí crédito público aquí, si lo quieres.
Respondemos dentro de 30 días naturales como máximo, el mismo compromiso que aplicamos a cualquier solicitud de privacidad.