Jetzt wird es technisch.
Alles, was die Startseite sagt, ausgeschrieben als das, woraus es gebaut wurde. Die echte Datenbank, wie ein Kontakt tatsächlich entsteht, und wer ein Gespräch sonst noch berührt.
Du brauchst diese Seite nicht, um Rilo zu benutzen, und nichts hier widerspricht der einfacheren Fassung. Es ist dasselbe Produkt, nur genau beschrieben.
Die ganze Datenbank
Alles, was unser Server über deine Familie weiß.
Keine Zusammenfassung. Das sind die siebzehn Tabellen, die der Server hat, mit den Spalten, die sie haben. Vier sind deine Familie. Wer sie sind, wer für ein Kind handeln darf, die Handys, von denen aus sie sprechen, und wohin es klingeln soll. Vier halten etwas für ein Handy fest, das aus war, und alle vier löschen sich selbst. Drei drehen sich darum, wer für ein Kind handeln darf und welchem Handy nicht mehr vertraut wird. Zwei sind signierte Spuren eines Endes, ein gekappter Kontakt oder jemand, der weg ist. Sie bleiben, damit ein Handy, das offline war, sie prüfen kann, statt uns zu glauben. Eine sind verbrauchte Einmalnummern, aufgeräumt, sobald sie ablaufen. Eine ist das Abo, und darin steht nichts, was jemanden benennt. Eine ist eine Meldung, die ein Erwachsener uns geschickt hat, und das ist die einzige Tabelle hier, die es gibt, damit etwas passiert. Die letzte geht deine Familie überhaupt nichts an.
- idein Hash des öffentlichen Schlüssels, kein Name
- public_keyder Geräteschlüssel, der das Konto ist
- typeerwachsen oder Kind
- type_certdie Signatur, die das beweist. Ein Kinderkonto ist von einem Elternteil signiert, es gibt also keinen Schalter, den man umlegen könnte
- created_at
- last_activedas letzte Mal, dass eines deiner Handys Hallo gesagt hat
- dormant_warned_atleer
- consent_sealeddeine Anmelde-E-Mail, versiegelt mit einem Schlüssel, der beim Gründer auf Papier liegt. Kein Server kann sie lesen
- uncovered_sinceleer, es sei denn, dein Abo deckt dieses Kind nicht mehr — dann der Tag, an dem wir es gemerkt haben, damit der Monat, bevor etwas aufhört, ab dann läuft
- keywas gemerkt wird
- valueund was darin steht
- account_id
- guardian_keyein Schlüssel, der für dieses Kind handeln darf
- added_at
- removed_at
- account_id
- device_keyder eigene Schlüssel eines Handys. Eine Person kann von mehreren aus sprechen
- agreement_keyder Schlüssel, auf den eine Nachricht versiegelt wird, damit nur dieses Handy sie öffnen kann
- certdie Signatur, die dieses Handy hereingelassen hat, Wort für Wort aufbewahrt, damit dein Handy sie prüfen kann, statt uns zu glauben
- kindein Handy, oder das gedruckte Wiederherstellungsblatt
- added_at
- removed_at
- account_id
- device_keywelches deiner Handys dieser Eintrag klingeln lässt
- platformapns oder fcm
- tokeneine nichtssagende Kennung von Apple oder Google
- updated_at
- nonce
- expires_at
- edge_hashein Hash des Paares, nicht die beiden Personen
- denied_at
- expires_at
- edge_hashein Hash des Paares, nicht die beiden Personen
- grant_recorddie Erlaubnis, über die entschieden wird, und die bisher gesammelten Signaturen
- waiting_keywessen Signatur noch fehlt
- requested_bydas Handy, das gefragt hat, damit ein Handy eine Familie nicht mit Fragen überschütten kann
- originpersönlich gescannt, oder ein Elternteil, das für sein Kind handelt
- delivered_towelche Handys sie schon haben
- declaredder eigene Name der fragenden Seite, versiegelt, damit nur die gescannte Familie ihn lesen kann
- created_at
- expires_at
- id
- recipient_idfürs Weiterleiten muss diese eine Angabe im Klartext stehen
- recipient_devicefür welches ihrer Handys das Päckchen versiegelt ist. Jedes Handy hat seinen eigenen Schlüssel, also bekommt jedes sein eigenes Päckchen
- sender_iddamit das Handy weiß, wessen Schlüssel es öffnet
- sender_devicewelches ihrer Handys es versiegelt hat, damit die richtige Kopie zum richtigen Schloss findet
- edge_hashdas Paar, gehasht, damit sich das nicht als Karte lesen lässt, wer mit wem spricht
- sealedChiffretext. Es gibt keine Textspalte, und es wird nie eine geben
- sent_at
- expires_at
- edge_hashdas Paar, gehasht
- revoked_at
- recordder signierte Beleg, damit ein Handy, das offline war, das Kappen selbst nachprüfen kann, statt uns beim Wort zu nehmen
- id
- account_idwessen Liste von Handys und Erwachsenen sich ändert
- kinddazukommen oder entfernt werden
- subject_keydas Handy oder der Erwachsene, um den es geht
- subject_kindwelches von beidem
- agreement_keyder zweite Schlüssel, den ein Handy braucht, leer bei Papier
- recorddie Signatur selbst, Wort für Wort aufbewahrt, damit ein Handy sie prüfen kann, statt uns zu glauben
- signed_bywelcher Schlüssel signiert hat
- by_authorityob ein Wiederherstellungsblatt signiert hat, und genau das lässt es warten
- issued_atder Moment, den der Signierende angibt, nie unsere Uhr
- reasonleer, außer der Signierende hat einen geschrieben
- proposed_at
- effective_atwann es wahr wird, zwei Nächte nach dem Vorschlag
- contested_at
- contested_bywer widersprochen hat, und mit welcher Signatur
- contest_record
- resolved_at
- resolutionangewendet oder abgebrochen, sobald es entschieden ist
- change_idwelche wartende Änderung
- voter_keywelcher Erwachsene
- decisiondurchlassen oder stoppen
- recordihre Signatur
- at
- account_idwessen Handy es war
- device_keyder Schlüssel, der gestohlen wurde
- revoked_at
- recordder signierte Beweis, damit ein Handy ihn prüfen kann, ohne uns zu fragen
- account_iddas Konto, das weg ist
- retired_at
- recordder signierte Beweis, erstellt mit dem eigenen Schlüssel dieses Kontos, bevor der Schlüssel vernichtet wurde
- account_id
- storeapple, google oder aufs Haus
- store_refeine nichtssagende Kennung vom Store. Nur damit können wir ihm später eine Frage stellen
- store_ref_hashein Fingerabdruck der Kennung darüber. Das verhindert, dass eine Quittung zwei Konten abdeckt
- environment
- stateactive, grace, lapsed, lapsed_trial oder disabled
- seatswie viele Kinder es abdeckt. Eine Zahl, nie ihre Namen
- expires_at
- acts_at
- updated_at
- device_keydas Handy, dem es noch nicht gesagt wurde
- change_idum welche Änderung es geht
- whatvorgeschlagen, bestritten oder entschieden
- account_idwessen Liste von Handys sich verändert hat. Wenn es einem Erwachsenen über sein Kind gesagt wird, steht hier das Kind
- subject_keydas Handy, das dazukam oder wegging
- effective_at
- created_at
- expires_at
- delivered_atwann wir es sagen konnten, oder leer, weil wir es nicht konnten
- id
- about_keyum wen es in der Meldung geht. Lesbar, damit jemand etwas tun kann
- reasonwelches von sechs Dingen passiert ist, so wie der meldende Erwachsene es ausgewählt hat
- csa
- sealedwas geschrieben wurde, auf dem sendenden Handy versiegelt mit einem Schlüssel, der beim Gründer auf Papier liegt. Kein Server kann das lesen
- sealed_digestein Fingerabdruck des versiegelten Teils, damit nachweisbar ist, dass das später Geöffnete genau das ist, was ankam
- received_at
- edge_snapshotwer wen erreichen durfte und welcher Erwachsene das erlaubt hatte, so wie es in diesem Moment stand. Das lässt sich später nicht rekonstruieren
- reporter_keywer sie geschickt hat, oder gar nichts, wenn sie ohne Namen geschickt wurde
- source
- sealed_key
- receiptdie Referenz, die der Absender behält. Nur so können wir jemandem etwas über eine Meldung sagen, die wir nicht öffnen können
- acknowledged_at
- decided_at
- actioned_at
- escalated_at
- decided_by
- outcome
Spalten, die es nicht gibt
- Name
- Alter
- Foto
- Nachrichtentext
- Gesprächsinhalt
- Anrufliste
- Kontaktliste
- Standort
- Gerätemodell
Deine E-Mail-Adresse wird bei der Anmeldung einmal geprüft und im selben Atemzug versiegelt, mit einem Schlüssel, der beim Gründer auf Papier liegt und nie einen Server berührt hat. Das Gesetz verlangt von uns, belegen zu können, dass ein Erwachsener zugestimmt hat. Wir selbst könnten die Adresse nicht zurücklesen. Namen und Fotos werden auf jedem Handy festgelegt und direkt an das andere Handy übergeben. Sie erreichen uns nie, weshalb du deinen Großvater auch in „Opa“ umbenennen kannst und wir davon nie erfahren. Wir könnten davon niemandem etwas zeigen, selbst wenn wir wollten, und niemand könnte uns dazu zwingen.
Dieser Abschnitt wird aus dem eigenen Schema des Servers erzeugt, aus accounts.ts und roster-changes.ts, den beiden Dateien, die die Datenbank anlegen. Wenn sie je auseinandergehen, haben die Dateien recht und diese Seite ist ein Fehler.
Kontakte
Wie ein Kontakt wirklich entsteht.
Das Handy von jemandem erstellt eine einmalige Einladung. Das andere Handy liest sie, vom Bildschirm im selben Raum gescannt oder aus einem Link geöffnet, den ein Erwachsener geschickt hat. Das Lesen startet die Vorstellung und hält im selben Moment den öffentlichen Schlüssel des anderen Handys fest, sodass beide Handys von da an genau wissen, welcher Schlüssel zu welcher Person gehört. Das ist der Teil, der es unmöglich macht, sich später in ein Gespräch zu setzen, auch für uns. Verbunden ist davon nichts, solange nicht ein Erwachsener auf der anderen Seite Ja gesagt hat.
Immer noch kein Kontakt. Ein verantwortlicher Erwachsener muss den Kontakt auf seinem eigenen Handy signieren, hinter einer biometrischen Prüfung in genau diesem Moment. Signiert wird das Ganze. Wer, mit wem, und in welche Richtung. Diese Signatur prüft der Server, bevor er irgendetwas weiterleitet. Der Server hält keinen Schlüssel, der signieren kann, also kann er keinen Kontakt anlegen, und wer die Datenbank stiehlt, ebenso wenig.
Wenn beide Handys den fertigen Kontakt haben, wird die Zeile gelöscht und der Kontakt existiert nur noch auf den beiden Geräten. Ihn später zu kappen schreibt einen signierten Widerruf, und das ist der eine Eintrag, der unbegrenzt bleibt. Er wird als Hash des Paares gespeichert, sagt also, dass ein Kontakt geendet hat, ohne zu sagen, wer wen kannte.
Wer sonst beteiligt ist
Drei Firmen berühren ein Gespräch. Keine davon kann es hören.
Sechs weitere Firmen berühren den Dienst, und sie stehen alle in der Datenschutzerklärung. Drei davon sind daran beteiligt, dass ein Anruf klingelt, und hier steht, was jede dieser drei sehen kann und was nicht.
-
Apple & Google
Push-Benachrichtigungen, damit ein Anruf ein schlafendes Handy klingeln lässt. Auf beiden Plattformen unvermeidlich. Sie tragen eine undurchsichtige Kennung und sonst nichts. Keinen Namen, keine Nummer, keinen Inhalt.
-
Cloudflare
Etwa jedes sechste Gespräch bekommt die beiden Handys nicht direkt zusammen, im Hotel-WLAN oder in manchen Mobilfunknetzen, und wird über ein Relais umgeleitet. Das Relais leitet verschlüsselte Pakete weiter, die es nicht öffnen kann, aber es sieht sehr wohl, dass zwei anonyme Kennungen verbunden waren, wann, wie lange und von welchen Adressen aus. Das sind Metadaten, die wir nicht aufbewahren, gehalten von jemand anderem.
-
Wir
Die Tabelle oben. Ein kleiner Server in den Niederlanden, der zwei Handys einander vorstellt und dann aus dem Weg geht.