In un paragrafo
Il telefono non si collega mai a un database. Le tue connessioni, i server, gli utenti e le password restano sul tuo computer, come sempre. Il telefono chiede a DBine, sul tuo computer, un breve elenco di cose (chi blocca chi, cosa è in esecuzione, i numeri del server) e DBine risponde. Telefono e computer si riconoscono tramite chiavi scambiate con un codice QR che scansioni, e tutto ciò che passa tra loro è cifrato end-to-end con quelle chiavi. Sulla tua rete locale non c'è nessuno in mezzo. Al di fuori, e solo se lo attivi, la connessione può passare da un server relay che inoltra byte cifrati che non può leggere.
Cosa può fare il telefono
Un elenco chiuso, uguale per tutti i telefoni:
| Cosa | Cosa serve |
|---|---|
| Vedere le connessioni del computer (nome, motore, colore) | Essere associato |
| Vedere il Monitor di una connessione, le catene di blocchi, le istruzioni in esecuzione e il controllo di salute | Essere associato |
| Vedere le query lunghe dell'editor in esecuzione e recenti, e le attività pianificate con le loro esecuzioni | Essere associato |
| Ricevere un avviso quando una query lunga termina o un'attività fallisce o segnala un allarme | Essere associato |
| Terminare una sessione o annullare una query | «Può terminare sessioni e annullare query» attivo su quel telefono (disattivato per impostazione predefinita), e la biometria o il PIN del telefono ogni volta |
| Eseguire un'attività pianificata | «Può eseguire e annullare attività» attivo su quel telefono (disattivato per impostazione predefinita), la biometria o il PIN del telefono ogni volta, e i passaggi dell'attività che scrivono approvati sul computer |
| Annullare un'attività pianificata in esecuzione | «Può eseguire e annullare attività» attivo su quel telefono, e la biometria o il PIN del telefono ogni volta. Il passaggio in corso viene interrotto e non viene eseguito nessun altro passaggio, anche per un'esecuzione avviata dallo scheduler del sistema operativo con DBine chiuso |
Cosa il telefono non può fare, per progettazione:
- eseguire SQL o comandi propri: non esiste una richiesta per farlo;
- leggere i dati delle tabelle: nessuna richiesta restituisce righe delle tabelle dell'utente;
- vedere o ricevere server, porte, utenti, password, stringhe di connessione, chiavi SSH o qualsiasi segreto;
- modificare le impostazioni, le connessioni, le attività o i permessi di DBine;
- associare un altro telefono.
Cosa viaggia e cosa no
Viaggia (cifrato, solo tra il tuo telefono e il tuo computer): i nomi e i motori delle connessioni, e i nomi dei loro database; i numeri del Monitor e ciò che il motore dice di sé (versione, tempo di attività e, per alcuni motori, il nome del server stesso); id di sessione, utenti, host client, tipi di attesa, oggetti bloccati e le istruzioni coinvolte in blocchi e processi (tagliate a 500 caratteri); i risultati del controllo di salute (con gli oggetti che nominano); le prime righe delle query dell'editor con la loro durata e il numero di righe o l'errore; nomi delle attività, stati di esecuzione e riepiloghi dei passaggi; avvisi.
Non viaggia mai: le password, i server e le porte delle impostazioni delle tue connessioni, le stringhe di connessione, le chiavi SSH o TLS, il vault o il portachiavi, le righe delle tabelle, le impostazioni di DBine.
Associazione
- Attivi Consenti telefoni in Impostazioni › Dispositivi (disattivato per impostazione predefinita).
- Associa un telefono mostra un codice QR con la chiave pubblica di DBine, un segreto monouso di 32 byte e come
raggiungere DBine. Scade dopo 2 minuti e associa un solo telefono. Il codice è un link,
https://dbine.com/pair#…, con tutto questo nel frammento (dopo il#), che i browser non inviano mai a un server. Scansionato con la fotocamera del telefono, apre l'app (Android App Links, verificati per dbine.com); senza l'app, dbine.com/pair (senza analytics, cancella subito il frammento) propone il download. Un link aperto così non sostituisce mai un'associazione: un telefono già associato deve prima essere dissociato. - Il telefono dimostra di aver letto il codice (Noise
IKpsk2, con il segreto come chiave precondivisa). Un codice sbagliato o scaduto fa fallire l'handshake. DBine consente al massimo 5 tentativi di associazione al minuto. - DBine ti chiede, sul computer, se vuoi associare il telefono, mostrando un codice che compare anche sul telefono. Non viene salvato nulla finché non dici di sì.
- Da quel momento ogni lato conosce la chiave pubblica dell'altro e non accetta nessun altro.
Rete locale e internet
| Rete locale | Internet, relay proprio | Internet, relay pubblici | |
|---|---|---|---|
| Predefinito | Sì (quando la funzione telefono è attiva) | No | No |
| In mezzo | Nessuno | Il tuo iroh-relay | I relay pubblici di iroh, gestiti da n0 |
| Cosa vede chi sta in mezzo | — | Indirizzi IP, tempi, dimensioni | Indirizzi IP, tempi, dimensioni |
| Cosa non può vedere né fare | — | Leggere, modificare o falsificare qualsiasi cosa | Leggere, modificare o falsificare qualsiasi cosa |
| Come si attiva | Consenti telefoni | Fuori dalla rete locale › Server proprio | Fuori dalla rete locale › Server pubblici di iroh, dopo una conferma che dice tutto quanto sopra |
Su internet la connessione usa il QUIC di iroh (TLS 1.3, con chiavi legate a ciascun estremo) e sopra passa lo stesso canale cifrato end-to-end (Noise). iroh si collega direttamente quando le reti lo consentono e usa il relay solo altrimenti.
Sul computer e sul telefono
- Le chiavi di DBine (
link-keys,link-iroh-key) stanno nel suo vault cifrato, mai nel file di stato né nei log. - I telefoni associati (nome, chiave pubblica, permessi) stanno in
local.link, lo stato di questa macchina; non si sincronizzano con il backup nel cloud. - Il telefono conserva la propria coppia di chiavi e la chiave pubblica del computer nella cartella privata dell'app.
- Ogni sessione terminata, query annullata, attività eseguita e attività annullata da un telefono viene registrata sul computer, insieme al telefono che l'ha fatta.
- L'app per il telefono cerca una nuova versione nell'ultima release di DBine su GitHub (api.github.com: GitHub vede l'IP del telefono, non viene inviato nient'altro) e apre solo la sua pagina di download nel browser; non installa mai nulla da sola, e apre solo le pagine delle release di DBine.
Limiti noti
- Con i relay pubblici, una terza parte (n0) vede gli indirizzi IP di entrambi gli estremi e quando e quanto traffico passa.
- Finché «Consenti telefoni» è attivo, DBine resta in ascolto sulla rete locale (e, con l'accesso via internet attivo, chiunque conosca il suo id può raggiungerlo tramite iroh). Solo i telefoni associati superano l'handshake; tutto il resto viene scartato prima che venga letta qualsiasi richiesta.
- Le chiavi del telefono non sono ancora nell'Android Keystore.
- Il codice non ha ancora avuto un audit indipendente. È open source.