En resumen
Sí, tus datos no nos interesan. Se cifran en tu dispositivo por defecto, lo que significa que nuestros servidores o bases de datos nunca los ven ni los registran.
Los datos viven en tu dispositivo
El concepto fundamental de Capitally es que todos tus datos están cifrados y se almacenan en tu dispositivo. Nuestros servidores solo guardan una copia de tu proyecto para sincronizarlo entre dispositivos, pero como únicamente tú tienes acceso a las claves de cifrado, no podemos ver los datos reales — y es perfectamente válido que bloquees esas solicitudes.
Lo único que «vemos» son los símbolos de mercado con los que has interactuado — los que has buscado o para los que has consultado precios —, pero no los vinculamos a tu cuenta.
Los proyectos se cifran por defecto
Al cifrar tus datos, buscamos protegerlos frente a:
- accesos no autorizados a los datos almacenados en nuestras bases de datos, ya sea por parte de empleados, hackers o agencias gubernamentales
- accesos no autorizados en tu dispositivo, pero solo mientras protejas el perfil de tu navegador frente al acceso directo o no elijas la opción «Recuérdame» al iniciar sesión
No podemos protegerlos frente a:
- ataques de cadena de suministro o de intermediario (man-in-the-middle) en los que los atacantes reemplacen nuestro código fuente
- escrituras o eliminaciones no autorizadas en nuestras bases de datos o en el dispositivo del cliente
- la detección de actividad del proyecto — los metadatos del proyecto, como el tipo de operación (operación creada, actualizada, eliminada, etc.) y las marcas de tiempo (cuándo realizaste el cambio, no la operación en sí), no están cifrados
Modos de cifrado
Al crear un proyecto, puedes elegir cifrarlo con:
- Contraseña de usuario — al iniciar sesión, usamos
PBKDF2para derivar dos contraseñas a partir de la que introduces, usando dos sales distintas. La primera contraseña se usa para autenticarte — de este modo, nuestros servidores de autenticación (Google Identity Platform) nunca reciben la contraseña que escribiste, por lo que no es posible derivar la segunda a partir de ella. Esa segunda contraseña se usa para cifrar (conAES-GCM) un conjunto de claves privadas que se usarán en el cifrado del proyecto. Existe la opción de almacenar de forma segura esa clave de cifrado en tu navegador, para que no tengas que introducirla de nuevo. - Contraseña de proyecto — igual que lo anterior, solo que se te pedirá una contraseña de proyecto independiente que se usará para derivar la clave de cifrado.
- Clave remota — al iniciar sesión, la aplicación obtiene una clave de cifrado del servidor. La clave no se almacena en la base de datos; en cambio, se deriva de una combinación de credenciales de usuario, sal y nuestra propia clave privada. El endpoint está segregado del resto y es el único con acceso a la clave.
Cada usuario de un proyecto (actualmente solo puede haber uno, aunque el sistema está preparado para introducir la compartición de proyectos) dispone de un conjunto de claves pública y privada (RSA-OAEP). La clave privada se cifra con la clave de cifrado principal ya mencionada. Se usa para descifrar una clave compartida (otro AES-GCM) que, a su vez, se usa para cifrar y descifrar los datos del proyecto. Puede haber varias claves compartidas por proyecto (por ejemplo, una para cada conjunto de datos compartido entre los mismos usuarios).
La clave pública se usa para cifrar las claves compartidas emitidas al usuario y firmar los mensajes generados por el backend (p. ej., nuevas operaciones procedentes de un broker) — de modo que solo el usuario pueda leerlos.
Cabe destacar que, una vez que introduces una contraseña, no se almacena ni se envía a ningún lugar. Las claves de cifrado pueden guardarse, pero no son exportables, lo que significa que pueden usarse para descifrar los datos, pero la propia clave no puede leerse — la aplicación literalmente no tiene acceso a ella.
Usamos webcrypto para todas las tareas relacionadas con el cifrado, incluida la generación de números aleatorios
¿El código es de código abierto y está verificado?
Capitally es un proyecto de código cerrado, pero la aplicación cliente está escrita en TypeScript y todo el manejo de datos se realiza en el cliente. Toda la comunicación de red también es fácilmente verificable en las herramientas de desarrollo del navegador.
Como ocurre con cualquier pieza de software, todo se reduce a la confianza. Necesitas confiar en que nosotros (o un hacker) no vamos a modificar ese código de forma encubierta para robar las claves de cifrado o las contraseñas.
Nosotros mismos dependemos de ello
Elegimos implementar el cifrado de extremo a extremo porque queremos mantener la privacidad de nuestros propios datos financieros. Ponemos el máximo cuidado en que siga siendo así.
Analítica y seguimiento de errores
No queremos conocer tus datos financieros, pero para mejorar la app y ayudarte en caso de problemas, recopilamos algunos datos de uso si nos lo permites. Concretamente, recopilamos:
- tu ID de usuario
- la URL de la página, que puede contener el ID del activo
- las URL de las solicitudes de red (que contendrán los IDs de activos del mercado)
- los elementos en los que haces clic (solo su ID de sistema)
- los mensajes del registro del sistema (que pueden contener IDs de activos del mercado)
Si no nos permites identificarte, no almacenaremos ninguno de los IDs mencionados anteriormente. En ese caso, solo registramos errores y un uso mínimo de funcionalidades, de forma completamente anónima, sin IDs ni registros detallados.
Lo que nunca recopilamos:
- el tamaño o valor de tus inversiones
- nombres, notas o cualquier texto que crees tú mismo
- fuentes de precios personalizadas