Passons à la technique.
Tout ce que dit la page d’accueil, écrit sous la forme de ce qui le fonde : la vraie base de données, la façon dont un contact se crée réellement, et qui d’autre touche un appel.
Vous n’avez pas besoin de cette page pour utiliser Rilo, et rien ici ne contredit la version simple — c’est le même produit, décrit précisément.
Toute la base de données
Tout ce que notre serveur sait de votre famille.
Pas un résumé. Voici les sept tables, avec les colonnes qu’elles contiennent réellement. Quatre constituent le compte ; trois existent pour qu’un téléphone éteint ne rate rien, et deux de celles-là s’effacent d’elles-mêmes.
- idune empreinte de la clé publique — pas un nom
- public_keyla clé de l’appareil, qui est le compte
- typeadulte ou enfant
- type_certla signature qui le prouve — un compte enfant est signé par un parent, il n’y a donc aucun indicateur à retourner
- created_at
- last_active
- account_id
- guardian_keyune clé autorisée à agir pour cet enfant
- added_at
- removed_at
- account_id
- platformapns ou fcm
- tokenun identifiant opaque fourni par Apple ou Google
- updated_at
- nonce
- expires_at
- edge_hashune empreinte de la paire, pas des deux personnes
- grantl’autorisation en cours de décision, et les signatures recueillies jusqu’ici
- waiting_keyla signature qui manque encore
- requested_by
- originscanné en personne, ou un parent agissant pour son enfant
- created_at
- expires_at
- delivered_toles côtés qui l’ont déjà
- id
- recipient_idl’acheminement a besoin de celui-ci en clair
- sender_idpour que le téléphone sache avec quelle clé l’ouvrir
- edge_hashla paire, hachée, pour que ceci ne se lise pas comme une carte de qui parle à qui
- sealeddu texte chiffré. Il n’y a pas de colonne de texte et il n’y en aura jamais
- sent_at
- expires_at
- edge_hashla paire, hachée
- revoked_at
- recordl’enregistrement signé, pour qu’un téléphone hors ligne puisse vérifier la coupure lui-même au lieu de nous croire sur parole
Colonnes qui n’existent pas
- nom
- âge
- photo
- texte des messages
- contenu des appels
- historique d’appels
- liste de contacts
- localisation
- modèle d’appareil
Votre e-mail est vérifié une fois à l’inscription puis détruit dans le même mouvement — il n’y a aucune colonne où le mettre. Les noms et les photos se règlent sur chaque téléphone et passent directement à l’autre téléphone ; ils ne nous parviennent jamais, et c’est aussi pour cela que vous pouvez renommer grand-père « Papy » sans que nous le sachions jamais. Nous ne pourrions montrer rien de tout cela à personne même si nous le voulions, et on ne pourrait pas nous y contraindre.
Cette section est générée à partir de server/src/identity/accounts.ts — le fichier qui crée la base de données. Si les deux divergent un jour, c’est le fichier qui a raison et cette page qui est en faute.
Contacts
Comment un contact se crée réellement.
Quelqu’un affiche un code à usage unique sur son téléphone ; l’autre téléphone le scanne, dans la même pièce. Le code expire au bout de dix minutes et ne sert qu’une fois. Ce scan fait deux choses à la fois : il lance la mise en relation, et il enregistre la clé publique de l’autre téléphone, si bien que les deux appareils savent désormais exactement quelle clé appartient à qui. C’est ce qui rend impossible de s’intercaler dans un appel plus tard — y compris pour nous.
Rien n’est encore connecté. Un adulte responsable doit signer le contact sur son propre téléphone, derrière une vérification biométrique faite à cet instant. Ce qu’il signe, c’est l’ensemble — qui, avec qui, et dans quel sens — et c’est cette signature que le serveur vérifie avant d’acheminer quoi que ce soit. Le serveur ne détient aucune clé capable de signer : il ne peut donc pas créer un contact, et celui qui volerait la base ne le pourrait pas davantage.
Quand les deux téléphones détiennent le contact terminé, la ligne est supprimée et le contact n’existe plus que sur les deux appareils. Le couper plus tard écrit une révocation signée, la seule chose conservée indéfiniment — stockée sous forme d’empreinte de la paire, de sorte qu’elle dit qu’un contact a pris fin sans dire qui connaissait qui.
Qui d’autre intervient
Trois entreprises touchent un appel. Aucune ne peut l’entendre.
Trois entreprises interviennent pour qu’un appel sonne. Voici ce que chacune peut et ne peut pas voir.
-
Apple & Google
Les notifications push, pour qu’un appel fasse sonner un téléphone en veille. Incontournables sur les deux plateformes. Elles transportent un identifiant opaque et rien d’autre — pas de nom, pas de numéro, pas de contenu.
-
Cloudflare
Environ un appel sur six ne parvient pas à relier les deux téléphones directement — Wi-Fi d’hôtel, certains réseaux mobiles — et passe par un relais. Le relais transmet des paquets chiffrés qu’il ne peut pas ouvrir, mais il voit bien que deux identifiants anonymes ont été mis en relation, quand, pendant combien de temps et depuis quelles adresses. Ce sont précisément les métadonnées que nous sommes fiers de ne pas garder, détenues par quelqu’un d’autre. Nous préférons l’écrire ici plutôt que vous le découvriez dans une politique.
-
Nous
Le tableau ci-dessus. Un petit serveur aux Pays-Bas qui présente deux téléphones l’un à l’autre, puis s’efface.