En un párrafo
El celular nunca se conecta a una base de datos. Tus conexiones, servidores, usuarios y contraseñas quedan en tu computadora, como siempre. El celular le pide a DBine, en tu computadora, una lista corta de cosas (quién bloquea a quién, qué se está ejecutando, las cifras del servidor) y DBine le contesta. El celular y la computadora se reconocen por claves que se intercambian con un código QR que escaneás, y todo lo que va entre ellos está cifrado de punta a punta con esas claves. En tu red local no hay nadie en el medio. Fuera de ella, y solo si lo activás, la conexión puede pasar por un servidor de retransmisión (relay) que reenvía bytes cifrados que no puede leer.
Qué puede hacer el celular
Una lista cerrada, la misma para todos los celulares:
| Qué | Qué necesita |
|---|---|
| Ver las conexiones de la computadora (nombre, motor, color) | Estar vinculado |
| Ver el Monitor de una conexión, las cadenas de bloqueos, las sentencias en ejecución y el chequeo de salud | Estar vinculado |
| Ver las consultas largas del editor en ejecución y recientes, y las tareas programadas con sus ejecuciones | Estar vinculado |
| Recibir un aviso cuando termina una consulta larga o una tarea falla o alerta | Estar vinculado |
| Terminar una sesión o cancelar una consulta | «Puede terminar sesiones y cancelar consultas» activado en ese celular (desactivado por defecto), y la biometría o el PIN del celular cada vez |
| Ejecutar una tarea programada | «Puede ejecutar y cancelar tareas» activado en ese celular (desactivado por defecto), la biometría o el PIN del celular cada vez, y los pasos de la tarea que escriben aprobados en la computadora |
| Cancelar una tarea programada en ejecución | «Puede ejecutar y cancelar tareas» activado en ese celular, y la biometría o el PIN del celular cada vez. Se corta el paso en curso y no se ejecuta ningún paso más, también en una ejecución que inició el programador del sistema operativo con DBine cerrado |
Lo que el celular no puede hacer, por diseño:
- ejecutar SQL o comandos propios: no existe un pedido para eso;
- leer datos de tablas: ningún pedido devuelve filas de las tablas del usuario;
- ver ni recibir servidores, puertos, usuarios, contraseñas, cadenas de conexión, claves SSH ni ningún secreto;
- cambiar la configuración, las conexiones, las tareas ni los permisos de DBine;
- vincular otro celular.
Qué viaja y qué no
Viaja (cifrado, solo entre tu celular y tu computadora): los nombres y motores de las conexiones, y los nombres de sus bases; las cifras del Monitor y los datos que el motor informa de sí mismo (versión, tiempo encendido y, en algunos motores, el nombre del propio servidor); ids de sesión, usuarios, equipos cliente, tipos de espera, objetos bloqueados y las sentencias involucradas en bloqueos y procesos (recortadas a 500 caracteres); los hallazgos del chequeo de salud (con los objetos que nombran); las primeras líneas de las consultas del editor con su duración y cantidad de filas o error; nombres de tareas, estados de ejecución y resúmenes de pasos; avisos.
Nunca viaja: contraseñas, los servidores y puertos de la configuración de tus conexiones, cadenas de conexión, claves SSH o TLS, la bóveda o el llavero, filas de tablas, la configuración de DBine.
Vinculación
- Activás Permitir celulares en Configuración › Dispositivos (desactivado por defecto).
- Vincular un celular muestra un código QR con la clave pública de DBine, un secreto de un solo uso de 32 bytes y
cómo llegar a DBine. Vence a los 2 minutos y vincula un solo celular. El código es un link,
https://dbine.com/pair#…, con todo eso en el fragmento (después del#), que los navegadores nunca le mandan a un servidor. Escaneado con la cámara del celular, abre la app (Android App Links, verificados para dbine.com); sin la app, dbine.com/pair (sin analytics, borra el fragmento al instante) ofrece la descarga. Un link abierto así nunca reemplaza una vinculación: un celular ya vinculado tiene que desvincularse primero. - El celular demuestra que leyó el código (Noise
IKpsk2, con el secreto como clave precompartida). Un código equivocado o vencido hace fallar el saludo inicial. DBine permite como máximo 5 intentos de vinculación por minuto. - DBine te pregunta, en la computadora, si querés vincular el celular, y muestra un código que el celular también muestra. No se guarda nada hasta que digas que sí.
- Desde ahí, cada lado conoce la clave pública del otro y no acepta a nadie más.
Red local e internet
| Red local | Internet, relay propio | Internet, relays públicos | |
|---|---|---|---|
| Por defecto | Sí (cuando la función del celular está activada) | No | No |
| En el medio | Nadie | Tu iroh-relay | Los relays públicos de iroh, operados por n0 |
| Qué ve el que está en el medio | — | Direcciones IP, momentos, tamaños | Direcciones IP, momentos, tamaños |
| Qué no puede ver ni hacer | — | Leer, cambiar ni falsificar nada | Leer, cambiar ni falsificar nada |
| Cómo se activa | Permitir celulares | Fuera de la red local › Servidor propio | Fuera de la red local › Servidores públicos de iroh, después de una confirmación que dice todo lo anterior |
Por internet, la conexión es el QUIC de iroh (TLS 1.3, con claves ligadas a cada extremo), y por encima va el mismo canal cifrado de punta a punta (Noise). iroh se conecta directo cuando las redes lo permiten y solo usa el relay si no.
En la computadora y en el celular
- Las claves de DBine (
link-keys,link-iroh-key) están en su bóveda cifrada, nunca en el archivo de estado ni en los registros. - Los celulares vinculados (nombre, clave pública, permisos) están en
local.link, el estado de esta máquina; no se sincronizan con el respaldo en la nube. - El celular guarda su propio par de claves y la clave pública de la computadora en la carpeta privada de la app.
- Cada sesión terminada, consulta cancelada, tarea ejecutada y tarea cancelada desde un celular queda registrada en la computadora, junto con el celular que lo hizo.
- La app del celular busca una versión nueva en el último release de DBine en GitHub (api.github.com: GitHub ve la IP del celular, no se envía nada más) y solo abre su página de descarga en el navegador; nunca instala nada por su cuenta, y solo abre las páginas de releases del propio DBine.
Límites conocidos
- Con los relays públicos, un tercero (n0) ve las direcciones IP de los dos extremos y cuándo y cuánto tráfico pasa.
- Mientras «Permitir celulares» está activado, DBine escucha en la red local (y, con el acceso por internet activado, cualquiera que conozca su id puede llamarlo a través de iroh). Solo los celulares vinculados pasan el saludo inicial; todo lo demás se descarta antes de leer ningún pedido.
- Las claves del celular todavía no están en el Android Keystore.
- El código todavía no tuvo una auditoría independiente. Es de código abierto.