Seguridad

Cómo protege PrivaLog tu diario

Última actualización: 14 de octubre de 2026

En resumen

Tus entradas se cifran en tu dispositivo. Sin cuenta, tu diario se queda en ese dispositivo y no se nos envía nada de él. Con cuenta, tus entradas solo nos llegan cifradas. La clave que las abre está bloqueada con una frase secreta que solo tú conoces, y esa frase secreta nunca sale de tu dispositivo. Guardamos ese diario, pero no podemos leerlo. Si pierdes tu frase secreta, nadie puede recuperar esas entradas, tampoco nosotros.

PrivaLog no es de código abierto. En su lugar, esta página documenta lo que hace el código. Describe las apps para iPhone, iPad y Mac y la app web tal como funcionan hoy.

Qué ocurre en tu dispositivo

La clave del diario

Cuando empiezas un diario, la app crea una clave del diario: un número aleatorio de 256 bits que cifra y descifra tus entradas. Las entradas se cifran con AES-256-GCM, un método de cifrado muy extendido. También detecta manipulaciones: si una entrada cifrada se ha modificado, la app se niega a abrirla en lugar de mostrar texto alterado.

Un diario sin cuenta

Si empiezas a escribir sin cuenta, no hay frase secreta. La clave del diario se guarda en el llavero de tu dispositivo, y el diario se abre igual que desbloqueas el dispositivo: con Face ID, Touch ID o su código. Es un bloqueo dentro de la app, no una segunda clave: quien pueda desbloquear tu dispositivo puede abrir el diario. En un dispositivo sin código, el diario no se bloquea. No se nos envía nada de tu diario. La clave no está ligada solo a este dispositivo, así que una copia de seguridad cifrada de tu iPhone o iPad, en iCloud o en un ordenador, contiene tu diario y su clave. Lo bien protegida que esté esa copia depende de Apple: una copia de iCloud solo tiene cifrado de extremo a extremo con la protección de datos avanzada. Nunca recibimos una copia.

La frase secreta

Al crear una cuenta, eliges una frase secreta del diario de al menos 8 caracteres. La app la convierte en una segunda clave con Argon2id, un método pensado para que cada intento sea lento y consuma mucha memoria. Esa segunda clave bloquea tu clave del diario. Solo la clave del diario bloqueada se nos envía. Al desbloquear, tu dispositivo descarga la clave bloqueada y hace todo el trabajo él mismo. Tu frase secreta nunca se nos envía. Si ya escribías sin cuenta, tu diario conserva la misma clave: la frase secreta la bloquea y tus entradas pasan a tu cuenta. A partir de ahí, la clave de tu dispositivo ya no se incluye en sus copias de seguridad; en un dispositivo nuevo usas tu frase secreta.

Qué se cifra

Todo lo que escribes en una entrada se cifra junto: el título, el texto, tu estado de ánimo, los tags, la marca de favorito y los lugares, incluidas sus coordenadas. La fecha de una entrada no se cifra. Consulta Qué guardan nuestros servidores.

Face ID, Touch ID y código

Con cuenta, abres tu diario con tu frase secreta o con Face ID o Touch ID. En un dispositivo con Face ID o Touch ID, se activa en cuanto creas tu frase secreta o combinas un diario con tu cuenta, salvo que antes hayas elegido otra cosa. Puedes desactivarlo en Ajustes. La app guarda entonces la clave del diario, no tu frase secreta, en el llavero. Esa copia se queda en este dispositivo, no se incluye en las copias de seguridad y solo se puede leer después de que Face ID o Touch ID funcionen. El código del dispositivo no basta: quien te haya visto teclearlo sigue sin poder abrir tu diario. En un dispositivo sin Face ID ni Touch ID, puedes elegir desbloquear con el código del dispositivo. El sistema comprueba tu cara o tu huella; PrivaLog nunca las recibe. Si añades o quitas una cara o una huella, la clave guardada deja de funcionar y desbloqueas una vez con tu frase secreta.

Cuánto tiempo sigue abierto el diario

Después de desbloquear, la clave del diario se queda en la memoria de la app hasta que el diario se bloquea. Eso ocurre cuando lo bloqueas tú, cierras sesión o cierras la app, y cuando PrivaLog lleva en segundo plano el tiempo que elijas en Ajustes: inmediatamente, tras 1, 5 o 15 minutos, tras una hora o nunca. Por defecto es 1 minuto en iPhone y iPad y 5 minutos en Mac. En el Mac, el diario también se bloquea en cuanto la pantalla se bloquea o entra en reposo, salvo que hayas elegido «Nunca». Mientras la app está en segundo plano, su pantalla se cubre, así que el selector de apps no muestra tus entradas. Cerrar sesión borra la clave guardada del llavero. Las copias cifradas de tus entradas se quedan en el dispositivo, para que no pierdas las que aún no se han sincronizado.

Búsqueda

La búsqueda se hace en tu dispositivo, sobre entradas que ya están descifradas en memoria. No se escribe ningún índice de búsqueda en el disco ni se nos envía.

Qué guardan nuestros servidores

Esto se aplica a las cuentas. Un diario sin cuenta nunca llega a nuestros servidores. Usamos Supabase para las cuentas y el almacenamiento. Nuestro proyecto de Supabase está alojado en la UE, en Irlanda. Cada cuenta solo puede acceder a sus propias filas; la base de datos lo impone.

Dirección de email e ID de cuenta
Para qué: Para iniciar tu sesión y vincular tus datos contigo
¿Podemos leerlo? Sí
Datos de inicio de sesión: una contraseña, o tu identidad de «Iniciar sesión con Apple»
Para qué: Para iniciar tu sesión
¿Podemos leerlo? Vemos qué método usas. Supabase guarda la contraseña en forma de hash, no como texto legible.
Entradas cifradas
Para qué: Para sincronizar tu diario entre dispositivos
¿Podemos leerlo? No
Fechas de las entradas
Para qué: Para encontrar y sincronizar cada entrada. Hay como máximo una entrada por día.
¿Podemos leerlo? Sí
Horas de creación y modificación, números de versión y campos técnicos necesarios para descifrar
Para qué: Para sincronizar y resolver conflictos
¿Podemos leerlo? Sí. No dicen nada de lo que escribiste.
Clave del diario bloqueada
Para qué: Para que puedas desbloquear en otro dispositivo
¿Podemos leerlo? No. Está cifrada con una clave que solo tu frase secreta puede generar.
Comprobación de desbloqueo
Para qué: Para que la app sepa si una frase secreta es correcta
¿Podemos leerlo? No. Es un texto corto conocido, cifrado con tu clave del diario. Indica si una clave es correcta, no la clave en sí.
Sal y ajustes de Argon2id
Para qué: Para que cada dispositivo convierta tu frase secreta en la misma clave
¿Podemos leerlo? Sí. No son secretos.
Ajustes: idioma, tema, vista de la línea de tiempo
Para qué: Para que te sigan a otros dispositivos
¿Podemos leerlo? Sí
Cuándo aceptaste las condiciones y confirmaste los avisos sobre la frase secreta y las copias de seguridad
Para qué: Como registro de tu aceptación
¿Podemos leerlo? Sí
Estado de la prueba y de la suscripción, y el ID de transacción de Apple de una compra
Para qué: Para saber si la sync en la nube está activa
¿Podemos leerlo? Sí

En resumen: vemos que tienes una cuenta, tu dirección de email, qué días escribiste y cuándo. No vemos lo que escribiste.

La sync en la nube requiere una prueba activa o Pro. Sin ella, las entradas nuevas se quedan en tu dispositivo y no se nos envían. Las entradas que ya se sincronizaron siguen guardadas, cifradas, hasta que las borres o borres tu cuenta. La clave del diario bloqueada y la comprobación de desbloqueo se guardan para todas las cuentas.

Cuando eliminas tu cuenta, tu cuenta, tus entradas, la clave bloqueada y el estado de la suscripción se borran de nuestra base de datos de inmediato. Pueden quedar copias durante un tiempo limitado en las copias de seguridad de nuestros proveedores. Los registros de compra que guardan Apple y RevenueCat no se borran con esto.

Contraseña de la cuenta y frase secreta del diario

Con cuenta, PrivaLog usa dos secretos distintos. Cada uno tiene una función diferente.

  • La contraseña de la cuenta (o «Iniciar sesión con Apple», o un enlace por email) demuestra a nuestro servidor quién eres. Puedes restablecerla por email. Restablecerla no abre tu diario.
  • La frase secreta del diario bloquea tu clave del diario. Nunca sale de tu dispositivo, nunca la vemos y nadie puede restablecerla.

La contraseña de la cuenta se envía por una conexión cifrada para iniciar sesión, como en cualquier sitio web. La frase secreta del diario no se envía nunca. Usa un valor distinto para cada una.

Servicios que usamos

Supabase
Para qué sirve: Cuentas y almacenamiento cifrado
Qué ve: Todo lo que aparece en la tabla de arriba, más las direcciones IP
Vercel
Para qué sirve: Aloja este sitio web y la app web
Qué ve: Direcciones IP y las páginas solicitadas. Cuando inicias sesión en la web, la contraseña de la cuenta pasa por Vercel hacia Supabase. Estadísticas de páginas vistas, solo en la página de inicio y sin cookies (Vercel Web Analytics).
RevenueCat
Para qué sirve: Estado de la suscripción Pro en las apps
Qué ve: Al abrir la app, un identificador aleatorio que crea RevenueCat y datos técnicos como tu dirección IP y las versiones de la app y del sistema. Con cuenta, también tu ID de cuenta, que es un identificador aleatorio, y tus compras. Nunca tu dirección de email ni tus entradas.
Apple
Para qué sirve: App Store, pagos e «Iniciar sesión con Apple»
Qué ve: Tus compras, y tu Apple ID si usas «Iniciar sesión con Apple». Nada de tu diario.
Mapas de Apple
Para qué sirve: Búsqueda de lugares y ubicación actual en las apps, solo cuando añades un lugar
Qué ve: Tu texto de búsqueda, o tu ubicación si usas la ubicación actual
OpenStreetMap Nominatim
Para qué sirve: Búsqueda de lugares en la app web, solo cuando añades un lugar
Qué ve: Tu texto de búsqueda y tu dirección IP
jsDelivr
Para qué sirve: Imágenes de emoji en las exportaciones PDF de la app web
Qué ve: Qué emoji aparecen en las entradas exportadas, y tu dirección IP

El lugar que eliges solo se guarda dentro de la entrada cifrada. Las apps y la app web con sesión iniciada no contienen código de analítica ni de publicidad.

Sin conexión

  • iPhone, iPad y Mac: puedes leer y escribir sin conexión. Las entradas nuevas y modificadas se cifran primero, se guardan en el dispositivo y se envían cuando vuelves a estar en línea, si la sync en la nube está activa.
  • Web: la app web necesita conexión para abrirse. Si ya está abierta y se pierde la conexión, las entradas que guardas se cifran y se conservan en el navegador hasta que vuelvas a estar en línea. Escribir en la web requiere una prueba activa o Pro.

Las copias sin conexión están cifradas igual que las copias en nuestros servidores.

La versión web

La app web cifra en tu navegador, con el mismo método y los mismos ajustes que las apps: AES-256-GCM mediante el Web Crypto integrado del navegador, y Argon2id mediante una biblioteca WebAssembly.

Hay una diferencia importante. Una app de la App Store está firmada y revisada antes de llegarte, y no cambia hasta que la actualizas. La app web la envía nuestro servidor cada vez que la abres. Si ese servidor enviara código modificado, ese código podría leer tu frase secreta mientras la escribes. Cuando usas la versión web, confías en nosotros y en nuestro proveedor de alojamiento en cada visita.

Algunas medidas limitan esto, pero no lo eliminan. El sitio solo se sirve por HTTPS. Una Content Security Policy solo permite a las páginas conectarse a nuestro propio sitio y a los servicios mencionados arriba, y cargar imágenes solo de nuestro propio sitio. Sí permite scripts en línea, que el framework del sitio necesita. No usamos Subresource Integrity.

Después de desbloquear, la app web guarda tu clave del diario en el almacenamiento del navegador, de una forma que la página puede usar pero no leer ni copiar. La pestaña puede usarla hasta que bloquees el diario, cierres sesión o cierres la pestaña. No hay bloqueo automático por tiempo. Cerrar sesión elimina todas las claves guardadas, pero deja las copias cifradas de tus entradas en el navegador.

Si quieres el modelo más sólido, usa la app para iPhone, iPad o Mac.

Si pierdes tu frase secreta

No hay restablecimiento ni recuperación. No tenemos tu frase secreta ni tu clave del diario, así que no podemos abrir tu diario por ti, y nadie más puede. Es intencionado: una entrada para nosotros también sería una entrada para otros. Sin la frase secreta, tus entradas ya no se pueden leer. Puedes eliminar tu cuenta y empezar una nueva.

  • Guarda tu frase secreta en un lugar que solo tú controles, como un gestor de contraseñas o una nota escrita guardada en un lugar seguro.
  • Face ID y Touch ID no la sustituyen. Necesitas la frase secreta en un dispositivo nuevo, después de cerrar sesión y después de añadir o quitar una cara o una huella.
  • Si un dispositivo sigue desbloqueado, todavía puedes exportar desde él una copia legible. Trata ese archivo como el propio diario.
  • Un diario sin cuenta no tiene frase secreta. Solo existe en ese dispositivo y en sus copias de seguridad. Si pierdes el dispositivo y no tienes copia, el diario se pierde; nosotros no tenemos ninguna.

De qué no protege PrivaLog

  • Alguien que usa tu dispositivo mientras el diario está abierto, o una pestaña del navegador abierta. En las apps, el diario sigue abierto hasta que se bloquea, como se describe arriba.
  • Alguien que conoce el código de tu dispositivo, si escribes sin cuenta. Ese diario se abre igual que se desbloquea tu dispositivo.
  • Malware, una extensión de navegador o un teclado malicioso en tu dispositivo. Ve lo que tú ves y escribes.
  • Alguien que conoce tu frase secreta. Cambiar la frase secreta no cambia la clave del diario en sí, así que alguien que conocía la frase secreta anterior y guardó una copia de la clave bloqueada anterior podría seguir leyendo tus entradas.
  • Una frase secreta débil. Cualquiera con una copia de nuestra base de datos podría intentar adivinarla sin conexión. Argon2id hace lento cada intento, pero una frase secreta corta o común se puede encontrar igualmente.
  • Metadatos: tu dirección de email, los días en que escribiste, cuándo se crearon y modificaron las entradas, cuántas hay, el estado de tu suscripción y las direcciones IP en los registros de nuestros proveedores.
  • Exportaciones legibles. Los archivos PDF, Markdown, KML y JSON legible son texto sin cifrar. Quien obtenga el archivo puede leerlo. Las copias de seguridad cifradas no se pueden leer sin tu clave del diario.
  • Capturas de pantalla, texto copiado y cualquier otra cosa que salga de la app.
  • Código modificado enviado a la app web, como se describe arriba.
  • Un servidor que retiene datos. No puede cambiar una entrada sin que la app lo note, ni moverla a otro día u otra cuenta. Sí podría borrar entradas o devolver una versión anterior de una entrada.
  • Las búsquedas y ubicaciones que envías a Mapas de Apple o a OpenStreetMap cuando añades un lugar.

Detalles técnicos

Entradas

  • AES-256-GCM con un nonce de 96 bits y una etiqueta de autenticación de 128 bits. Se genera un nonce aleatorio nuevo en cada cifrado; los nonces nunca se reutilizan a propósito.
  • El texto sin cifrar es un objeto JSON con los campos de la entrada. Los additional authenticated data vinculan cada ciphertext a su cuenta, su entrada y su fecha: {"v":1,"user_id":…,"entry_id":…,"entry_date":…,"crypto_schema_version":…}

Claves

  • Clave del diario (DEK): 256 bits del generador aleatorio seguro del sistema.
  • Clave de cifrado de claves (KEK): Argon2id(frase secreta, sal). La sal son 128 bits aleatorios.
  • Argon2id versión 1.3 (0x13), memoria 65 536 KiB (64 MiB), 3 iteraciones, paralelismo 1, salida de 32 bytes. Igual en todas las plataformas. Los ajustes se guardan por cuenta.
  • Envoltorio de la clave: cifrado AES-256-GCM de la DEK con la KEK, con su propio nonce aleatorio de 96 bits y sin additional data.
  • Comprobación de desbloqueo: cifrado AES-256-GCM de un texto fijo con la DEK, con su propio nonce aleatorio.
  • Cambiar la frase secreta crea una sal y una KEK nuevas y vuelve a envolver la misma DEK. Las entradas no se vuelven a cifrar.
  • Los diarios creados antes de que existiera el envoltorio de claves usan la propia salida de Argon2id como DEK. Se guarda envuelta en el mismo formato.

Bibliotecas

  • iPhone, iPad y Mac: Apple CryptoKit para AES-GCM; Argon2Swift sobre la implementación de referencia de Argon2 (phc-winner-argon2); el framework Security para bytes aleatorios y el llavero; LocalAuthentication para Face ID y Touch ID.
  • Web: la API Web Crypto para AES-GCM y bytes aleatorios; hash-wasm (WebAssembly) para Argon2id.

Almacenamiento en el dispositivo

  • Diario con cuenta, desbloqueo con Face ID o Touch ID: elemento del llavero legible solo mientras el dispositivo está desbloqueado (kSecAttrAccessibleWhenUnlockedThisDeviceOnly), nunca sincronizado ni restaurado en otro dispositivo, y solo después de que Face ID o Touch ID funcionen (biometryCurrentSet). En dispositivos sin biometría se puede elegir el código del dispositivo (userPresence).
  • Diario sin cuenta: la DEK es un elemento del llavero legible mientras el dispositivo está desbloqueado (kSecAttrAccessibleWhenUnlocked), sin control de acceso, por lo que se incluye en las copias de seguridad cifradas del dispositivo. Antes de abrir el diario, la app pide Face ID, Touch ID o el código del dispositivo (deviceOwnerAuthentication). Las entradas usan el mismo formato, con el ID aleatorio del diario en el campo user_id.
  • Paso a una cuenta: cada entrada se descifra, se vuelve a cifrar con el ID de la cuenta en la additional authenticated data y se comprueba descifrándola antes de subirla. Con una cuenta nueva, la DEK es la misma; al combinar con una cuenta existente, las entradas se cifran con la DEK de esa cuenta. Los datos locales solo se borran cuando cada entrada está confirmada y cada día con entrada en ambos sitios está resuelto.
  • Copias sin conexión: solo ciphertext, en el almacenamiento propio de la app en los dispositivos Apple y en IndexedDB en el navegador.
  • Sesión web: la DEK es una clave de Web Crypto no exportable en IndexedDB; sessionStorage solo contiene un ID aleatorio para la pestaña. Las claves de pestañas cerradas sin bloquear se quedan hasta el siguiente desbloqueo o cierre de sesión en ese navegador.

Servidor

  • La row-level security de Postgres limita cada tabla a las filas de la cuenta con sesión iniciada.
  • Todas las conexiones usan HTTPS. Este sitio envía una cabecera Strict-Transport-Security.

Informar de un problema de seguridad

Si encuentras un problema de seguridad, escribe a privacy@nextdevstudio.com. Incluye los pasos para reproducirlo y danos un tiempo razonable para corregirlo antes de publicar detalles.

Última actualización

14 de octubre de 2026. Cuando cambiamos cómo funcionan el cifrado, el almacenamiento o los servicios externos, actualizamos esta página. Consulta también la política de privacidad.

Volver al inicio