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 dix-sept tables du serveur, avec les colonnes qu’elles ont. Quatre concernent votre famille : qui elles sont, qui peut agir pour un enfant, les téléphones depuis lesquels elles parlent, et où les joindre. Quatre gardent quelque chose pour un téléphone qui était éteint, et toutes les quatre s’effacent d’elles-mêmes. Trois portent sur qui peut agir pour un enfant et sur le téléphone qui a cessé d’être digne de confiance. Deux sont des traces signées d’une fin : un contact coupé, ou quelqu’un parti. Elles sont conservées pour qu’un téléphone qui était hors ligne puisse les vérifier plutôt que nous croire. Une contient des numéros à usage unique déjà dépensés, balayés à leur expiration. Une est l’abonnement, et elle ne contient rien qui nomme qui que ce soit. Une est un signalement qu’un adulte nous a envoyé, et c’est la seule table ici qui existe pour faire arriver quelque chose. La dernière ne concerne pas votre famille du tout.
- 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_activela dernière fois qu’un de vos téléphones a dit bonjour
- dormant_warned_atvide
- consent_sealedvotre e-mail d’inscription, scellé avec une clé qui vit sur papier chez le fondateur. Aucun serveur ne peut le lire
- uncovered_sincevide, sauf si votre abonnement ne couvre plus cet enfant — alors le jour où nous l'avons remarqué, pour que le mois avant tout arrêt commence là
- keyce dont il se souvient
- valueet ce que cela dit
- account_id
- guardian_keyune clé autorisée à agir pour cet enfant
- added_at
- removed_at
- account_id
- device_keyla clé propre d’un téléphone. On peut parler depuis plusieurs appareils
- agreement_keyla clé à laquelle un message est scellé, pour que seul ce téléphone puisse l’ouvrir
- certla signature qui a admis ce téléphone, conservée mot pour mot pour que votre téléphone puisse la vérifier au lieu de nous croire
- kindun téléphone, ou la feuille de récupération imprimée
- added_at
- removed_at
- account_id
- device_keylequel de vos téléphones celui-ci fait sonner
- 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
- denied_at
- expires_at
- edge_hashune empreinte de la paire, pas des deux personnes
- grant_recordl’autorisation en cours de décision, et les signatures recueillies jusqu’ici
- waiting_keyla signature qui manque encore
- requested_byle téléphone qui a demandé, pour qu’un seul téléphone ne puisse pas inonder une famille de questions
- originscanné en personne, ou un parent agissant pour son enfant
- delivered_toles téléphones qui l’ont déjà
- declaredle nom que la partie demandeuse se donne, scellé pour que seule la famille scannée puisse le lire
- created_at
- expires_at
- id
- recipient_idl’acheminement a besoin de celui-ci en clair
- recipient_devicepour lequel de leurs téléphones la boîte est scellée. Chaque téléphone a sa propre clé, donc chacun reçoit sa propre boîte
- sender_idpour que le téléphone sache avec quelle clé l’ouvrir
- sender_devicelequel de leurs téléphones l’a scellé, pour que la bonne copie trouve la bonne serrure
- 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
- id
- account_idquelle liste de téléphones et d’adultes change
- kindarrivée, ou retrait
- subject_keyle téléphone ou l’adulte concerné
- subject_kindlequel des deux
- agreement_keyla deuxième clé qu’un téléphone doit avoir, vide pour le papier
- recordla signature elle-même, gardée mot pour mot pour qu’un téléphone la vérifie au lieu de nous croire
- signed_byquelle clé l’a signée
- by_authoritysi une feuille de récupération l’a signée, ce qui est la raison de l’attente
- issued_atle moment que le signataire indique, jamais notre horloge
- reasonvide, sauf si le signataire en a écrit une
- proposed_at
- effective_atquand cela devient vrai, deux nuits après la proposition
- contested_at
- contested_byqui s’y est opposé, et avec quelle signature
- contest_record
- resolved_at
- resolutionappliqué ou annulé, une fois réglé
- change_idquel changement en attente
- voter_keyquel adulte
- decisionlaisser passer, ou arrêter
- recordsa signature
- at
- account_idà qui appartenait le téléphone
- device_keyla clé qui a été volée
- revoked_at
- recordla preuve signée, pour qu’un téléphone la vérifie sans nous le demander
- account_idle compte qui a disparu
- retired_at
- recordla preuve signée, faite avec la clé propre de ce compte avant que cette clé soit détruite
- account_id
- storeapple, google, ou offert
- store_refune référence opaque fournie par le store. C’est la seule chose qui nous permet de lui poser une question plus tard
- store_ref_hashune empreinte de la référence ci-dessus. C’est ce qui empêche un même achat de couvrir deux comptes
- environment
- stateactive, grace, lapsed, lapsed_trial ou disabled
- seatsle nombre d’enfants couverts. Un nombre, jamais leurs noms
- expires_at
- acts_at
- updated_at
- device_keyle téléphone qui n’a pas encore été prévenu
- change_idde quel changement il s’agit
- whatproposé, contesté ou réglé
- account_idà qui appartient la liste de téléphones qui a changé. Quand un adulte est prévenu au sujet de son enfant, c’est l’enfant
- subject_keyle téléphone qui a été ajouté ou retiré
- effective_at
- created_at
- expires_at
- delivered_atquand nous avons réussi à le dire, ou vide parce que ce n’est pas encore fait
- id
- about_keyde qui parle le signalement. Lisible, pour que quelqu’un puisse agir
- reasonlequel des six cas s’est produit, tel que l’adulte qui signale l’a choisi
- csa
- sealedce qui a été écrit, scellé sur le téléphone qui l’envoie avec une clé qui repose sur papier chez le fondateur. Aucun serveur ne peut le lire
- sealed_digestune empreinte de la partie scellée, pour prouver que ce qui sera ouvert est bien ce qui est arrivé
- received_at
- edge_snapshotqui avait le droit de joindre qui, et quel adulte l’avait permis, tel que c’était à cet instant. Cela ne peut pas être reconstitué plus tard
- reporter_keyqui l’a envoyé, ou rien du tout lorsqu’il a été envoyé sans nom
- source
- sealed_key
- receiptla référence que garde l’expéditeur. C’est le seul moyen de répondre à quelqu’un au sujet d’un signalement que nous ne pouvons pas ouvrir
- acknowledged_at
- decided_at
- actioned_at
- escalated_at
- decided_by
- outcome
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 scellé dans le même mouvement, avec une clé qui vit sur papier chez le fondateur et n’a jamais touché un serveur. La loi nous demande de pouvoir prouver qu’un adulte a consenti. Nous ne pourrions pas le relire même si nous le voulions. 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 rien montrer 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 du schéma du serveur lui-même, dans accounts.ts et roster-changes.ts, les deux fichiers qui créent la base de données. En cas de désaccord, ce sont les fichiers qui ont raison et cette page qui est en tort.
Contacts
Comment un contact se crée réellement.
Le téléphone de quelqu’un fabrique une invitation à usage unique. L’autre téléphone la lit, scannée sur un écran dans la même pièce ou ouverte depuis un lien envoyé par cet adulte. Cette lecture lance la mise en relation et, dans le même mouvement, enregistre la clé publique de l’autre téléphone, si bien que les deux appareils savent dès lors exactement quelle clé appartient à quelle personne. C’est ce qui empêche quiconque de s’installer plus tard au milieu d’un appel, nous compris. Rien n’est mis en relation avant qu’un adulte de l’autre côté ait dit oui.
Toujours pas de contact. Un adulte responsable doit signer le contact sur son propre téléphone, derrière une vérification biométrique faite à cet instant. Ce qui est signé, c’est l’ensemble. Qui, avec qui, et dans quel sens. 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. Elle est stockée sous forme d’empreinte de la paire, et elle dit donc 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.
Six autres entreprises touchent au service, et la politique de confidentialité les nomme. Trois d’entre elles interviennent pour qu’un appel sonne. Voici ce que chacune de ces trois peut et ne peut pas voir.
-
Apple & Google
Les notifications push, pour qu’un appel fasse sonner un téléphone en veille. Inévitables 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, sur le Wi-Fi d’un hôtel ou sur 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 que deux identifiants anonymes ont été mis en relation, quand, pendant combien de temps et depuis quelles adresses. Ce sont des métadonnées que nous ne gardons pas, détenues par quelqu’un d’autre.
-
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.