Em um parágrafo
O celular nunca se conecta a um banco de dados. Suas conexões, servidores, usuários e senhas ficam no seu computador, como sempre. O celular pede ao DBine, no seu computador, uma lista curta de coisas (quem está bloqueando quem, o que está em execução, os números do servidor) e o DBine responde. O celular e o computador se reconhecem por chaves trocadas por meio de um código QR que você escaneia, e tudo o que passa entre eles é criptografado de ponta a ponta com essas chaves. Na sua rede local não há ninguém no meio. Fora dela, e só se você ativar isso, a conexão pode passar por um servidor de retransmissão (relay) que encaminha bytes criptografados que não consegue ler.
O que o celular pode fazer
Uma lista fechada, a mesma para todos os celulares:
| O quê | O que precisa |
|---|---|
| Ver as conexões do computador (nome, motor, cor) | Estar vinculado |
| Ver o Monitor de uma conexão, as cadeias de bloqueio, as instruções em execução e a verificação de saúde | Estar vinculado |
| Ver as consultas longas do editor em execução e recentes, e as tarefas agendadas com suas execuções | Estar vinculado |
| Receber um aviso quando uma consulta longa termina ou uma tarefa falha ou alerta | Estar vinculado |
| Encerrar uma sessão ou cancelar uma consulta | “Pode encerrar sessões e cancelar consultas” ativado nesse celular (desativado por padrão), e a biometria ou o PIN do celular a cada vez |
| Executar uma tarefa agendada | “Pode executar e cancelar tarefas” ativado nesse celular (desativado por padrão), a biometria ou o PIN do celular a cada vez, e os passos da tarefa que escrevem aprovados no computador |
| Cancelar uma tarefa agendada em execução | “Pode executar e cancelar tarefas” ativado nesse celular, e a biometria ou o PIN do celular a cada vez. O passo em andamento é interrompido e nenhum outro passo é executado, também em uma execução que o agendador do sistema operacional iniciou com o DBine fechado |
O que o celular não pode fazer, por design:
- executar SQL ou comandos próprios: não existe uma requisição para isso;
- ler dados de tabelas: nenhuma requisição devolve linhas das tabelas do usuário;
- ver ou receber servidores, portas, usuários, senhas, strings de conexão, chaves SSH ou qualquer segredo;
- alterar as configurações, as conexões, as tarefas ou as permissões do DBine;
- vincular outro celular.
O que trafega e o que não
Trafega (criptografado, só entre o seu celular e o seu computador): os nomes e motores das conexões, e os nomes dos seus bancos; os números do Monitor e os dados que o motor informa sobre si mesmo (versão, tempo ligado e, em alguns motores, o nome do próprio servidor); ids de sessão, usuários, máquinas cliente, tipos de espera, objetos bloqueados e as instruções envolvidas em bloqueios e processos (cortadas em 500 caracteres); os achados da verificação de saúde (com os objetos que citam); as primeiras linhas das consultas do editor com sua duração e quantidade de linhas ou erro; nomes de tarefas, estados de execução e resumos dos passos; avisos.
Nunca trafega: senhas, os servidores e portas das configurações das suas conexões, strings de conexão, chaves SSH ou TLS, o cofre ou o chaveiro, linhas de tabelas, as configurações do DBine.
Vinculação
- Você ativa Permitir celulares em Configurações › Dispositivos (desativado por padrão).
- Vincular um celular mostra um código QR com a chave pública do DBine, um segredo de uso único de 32 bytes e como
chegar ao DBine. Ele expira em 2 minutos e vincula um único celular. O código é um link,
https://dbine.com/pair#…, com tudo isso no fragmento (depois do#), que os navegadores nunca enviam a um servidor. Escaneado com a câmera do celular, ele abre o app (Android App Links, verificados para dbine.com); sem o app, dbine.com/pair (sem analytics, apaga o fragmento na hora) oferece o download. Um link aberto assim nunca substitui uma vinculação: um celular já vinculado precisa se desvincular primeiro. - O celular prova que leu o código (Noise
IKpsk2, com o segredo como chave pré-compartilhada). Um código errado ou expirado faz o handshake falhar. O DBine permite no máximo 5 tentativas de vinculação por minuto. - O DBine pergunta a você, no computador, se quer vincular o celular, mostrando um código que o celular também mostra. Nada é guardado até você dizer que sim.
- A partir daí, cada lado conhece a chave pública do outro e não aceita mais ninguém.
Rede local e internet
| Rede local | Internet, relay próprio | Internet, relays públicos | |
|---|---|---|---|
| Padrão | Sim (quando a função de celular está ativada) | Não | Não |
| No meio | Ninguém | Seu iroh-relay | Os relays públicos do iroh, operados pela n0 |
| O que quem está no meio vê | — | Endereços IP, horários, tamanhos | Endereços IP, horários, tamanhos |
| O que não pode ver nem fazer | — | Ler, alterar ou falsificar qualquer coisa | Ler, alterar ou falsificar qualquer coisa |
| Como se ativa | Permitir celulares | Fora da rede local › Servidor próprio | Fora da rede local › Servidores públicos do iroh, após uma confirmação que diz tudo o que está acima |
Pela internet, a conexão é o QUIC do iroh (TLS 1.3, com chaves vinculadas a cada ponta), e por cima vai o mesmo canal criptografado de ponta a ponta (Noise). O iroh se conecta diretamente quando as redes permitem e só usa o relay caso contrário.
No computador e no celular
- As chaves do DBine (
link-keys,link-iroh-key) ficam no seu cofre criptografado, nunca no arquivo de estado nem nos logs. - Os celulares vinculados (nome, chave pública, permissões) ficam em
local.link, o estado desta máquina; eles não são sincronizados com o backup na nuvem. - O celular guarda seu próprio par de chaves e a chave pública do computador na pasta privada do app.
- Cada sessão encerrada, consulta cancelada, tarefa executada e tarefa cancelada a partir de um celular fica registrada no computador, junto com o celular que a fez.
- O app de celular procura uma versão nova no último release do DBine no GitHub (api.github.com: o GitHub vê o IP do celular, nada mais é enviado) e só abre a página de download no navegador; ele nunca instala nada sozinho, e só abre as páginas de releases do próprio DBine.
Limites conhecidos
- Com os relays públicos, um terceiro (n0) vê os endereços IP das duas pontas e quando e quanto tráfego passa.
- Enquanto “Permitir celulares” está ativado, o DBine escuta na rede local (e, com o acesso pela internet ativado, qualquer pessoa que conheça o seu id pode chamá-lo pelo iroh). Só os celulares vinculados passam do handshake; todo o resto é descartado antes de qualquer requisição ser lida.
- As chaves do celular ainda não estão no Android Keystore.
- O código ainda não passou por uma auditoria independente. Ele é de código aberto.