En un paragraphe
Le téléphone ne se connecte jamais à une base de données. Vos connexions, serveurs, utilisateurs et mots de passe restent sur votre ordinateur, comme toujours. Le téléphone demande à DBine, sur votre ordinateur, une courte liste de choses (qui bloque qui, ce qui est en cours d'exécution, les chiffres du serveur) et DBine répond. Le téléphone et l'ordinateur se reconnaissent grâce à des clés échangées par un code QR que vous scannez, et tout ce qui passe entre eux est chiffré de bout en bout avec ces clés. Sur votre réseau local, personne n'est au milieu. En dehors, et seulement si vous l'activez, la connexion peut passer par un serveur relais qui transmet des octets chiffrés qu'il ne peut pas lire.
Ce que le téléphone peut faire
Une liste fermée, la même pour tous les téléphones :
| Quoi | Ce qu'il faut |
|---|---|
| Voir les connexions de l'ordinateur (nom, moteur, couleur) | Être associé |
| Voir le Moniteur d'une connexion, les chaînes de blocage, les instructions en cours et le bilan de santé | Être associé |
| Voir les longues requêtes de l'éditeur en cours et récentes, et les tâches planifiées avec leurs exécutions | Être associé |
| Être averti quand une longue requête se termine ou qu'une tâche échoue ou alerte | Être associé |
| Terminer une session ou annuler une requête | « Peut terminer des sessions et annuler des requêtes » activé sur ce téléphone (désactivé par défaut), et la biométrie ou le code PIN du téléphone à chaque fois |
| Exécuter une tâche planifiée | « Peut exécuter et annuler des tâches » activé sur ce téléphone (désactivé par défaut), la biométrie ou le code PIN du téléphone à chaque fois, et les étapes de la tâche qui écrivent approuvées sur l'ordinateur |
| Annuler une tâche planifiée en cours | « Peut exécuter et annuler des tâches » activé sur ce téléphone, et la biométrie ou le code PIN du téléphone à chaque fois. L'étape en cours est interrompue et aucune autre étape ne s'exécute, y compris pour une exécution lancée par le planificateur du système avec DBine fermé |
Ce que le téléphone ne peut pas faire, par conception :
- exécuter du SQL ou des commandes de son choix : aucune requête ne le permet ;
- lire les données des tables : aucune requête ne renvoie de lignes des tables de l'utilisateur ;
- voir ou recevoir des serveurs, ports, utilisateurs, mots de passe, chaînes de connexion, clés SSH ou un quelconque secret ;
- modifier les paramètres, les connexions, les tâches ou les autorisations de DBine ;
- associer un autre téléphone.
Ce qui circule, et ce qui ne circule pas
Circule (chiffré, uniquement entre votre téléphone et votre ordinateur) : les noms et moteurs des connexions, et les noms de leurs bases ; les chiffres du Moniteur et ce que le moteur indique sur lui-même (version, durée de fonctionnement et, pour certains moteurs, le nom du serveur lui-même) ; identifiants de session, utilisateurs, machines clientes, types d'attente, objets verrouillés et instructions impliquées dans les blocages et les processus (tronquées à 500 caractères) ; les constats du bilan de santé (avec les objets qu'ils citent) ; les premières lignes des requêtes de l'éditeur avec leur durée et leur nombre de lignes ou leur erreur ; noms des tâches, états d'exécution et résumés des étapes ; notifications.
Ne circule jamais : les mots de passe, les serveurs et ports des paramètres de vos connexions, les chaînes de connexion, les clés SSH ou TLS, le coffre ou le trousseau, les lignes des tables, les paramètres de DBine.
Association
- Vous activez Autoriser les téléphones dans Paramètres › Appareils (désactivé par défaut).
- Associer un téléphone affiche un code QR avec la clé publique de DBine, un secret à usage unique de 32 octets et la
façon de joindre DBine. Il expire au bout de 2 minutes et associe un seul téléphone. Le code est un lien,
https://dbine.com/pair#…, avec tout cela dans le fragment (après le#), que les navigateurs n'envoient jamais à un serveur. Scanné avec l'appareil photo du téléphone, il ouvre l'app (Android App Links, vérifiés pour dbine.com) ; sans l'app, dbine.com/pair (sans analytics, il efface le fragment aussitôt) propose le téléchargement. Un lien ouvert ainsi ne remplace jamais une association : un téléphone déjà associé doit d'abord être dissocié. - Le téléphone prouve qu'il a lu le code (Noise
IKpsk2, avec le secret comme clé pré-partagée). Un code erroné ou expiré fait échouer la poignée de main. DBine autorise au plus 5 tentatives d'association par minute. - DBine vous demande, sur l'ordinateur, si vous voulez associer le téléphone, en affichant un code que le téléphone affiche aussi. Rien n'est conservé tant que vous n'avez pas dit oui.
- Dès lors, chaque côté connaît la clé publique de l'autre et n'accepte personne d'autre.
Réseau local et internet
| Réseau local | Internet, relais propre | Internet, relais publics | |
|---|---|---|---|
| Par défaut | Oui (quand la fonction téléphone est activée) | Non | Non |
| Au milieu | Personne | Votre iroh-relay | Les relais publics d'iroh, exploités par n0 |
| Ce que voit l'intermédiaire | — | Adresses IP, moments, tailles | Adresses IP, moments, tailles |
| Ce qu'il ne peut ni voir ni faire | — | Lire, modifier ou falsifier quoi que ce soit | Lire, modifier ou falsifier quoi que ce soit |
| Comment l'activer | Autoriser les téléphones | Hors du réseau local › Serveur propre | Hors du réseau local › Serveurs publics d'iroh, après une confirmation qui dit tout ce qui précède |
Sur internet, la connexion utilise le QUIC d'iroh (TLS 1.3, clés liées à chaque extrémité), et le même canal chiffré de bout en bout (Noise) passe par-dessus. iroh se connecte directement quand les réseaux le permettent et n'utilise le relais que sinon.
Sur l'ordinateur et sur le téléphone
- Les clés de DBine (
link-keys,link-iroh-key) sont dans son coffre chiffré, jamais dans le fichier d'état ni dans les journaux. - Les téléphones associés (nom, clé publique, autorisations) sont dans
local.link, l'état de cette machine ; ils ne sont pas synchronisés avec la sauvegarde dans le cloud. - Le téléphone conserve sa propre paire de clés et la clé publique de l'ordinateur dans le dossier privé de l'app.
- Chaque session terminée, requête annulée, tâche exécutée et tâche annulée depuis un téléphone est journalisée sur l'ordinateur, avec le téléphone qui l'a fait.
- L'app pour téléphone cherche une nouvelle version dans la dernière release de DBine sur GitHub (api.github.com : GitHub voit l'adresse IP du téléphone, rien d'autre n'est envoyé) et n'ouvre que sa page de téléchargement dans le navigateur ; elle n'installe jamais rien d'elle-même, et n'ouvre que les pages de releases de DBine.
Limites connues
- Avec les relais publics, un tiers (n0) voit les adresses IP des deux extrémités, ainsi que quand et combien de trafic circule.
- Tant que « Autoriser les téléphones » est activé, DBine écoute sur le réseau local (et, avec l'accès par internet activé, quiconque connaît son identifiant peut le joindre via iroh). Seuls les téléphones associés passent la poignée de main ; tout le reste est rejeté avant qu'une requête ne soit lue.
- Les clés du téléphone ne sont pas encore dans l'Android Keystore.
- Le code n'a pas encore fait l'objet d'un audit indépendant. Il est open source.