rilo
Der Rilo-Maskottchenfuchs steht neben einem Schild mit einem Vorhängeschloss darauf

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.

accounts bleibt, bis du es löschst
  • 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
Deine Kontozeile bleibt, bis du sie löschst, und sie in der App zu löschen nimmt diese Zeile und alles daran Hängende mit. Wir arbeiten daran, Familien wegzuräumen, die Rilo ganz aufgegeben haben; bis das eingeschaltet ist, verschwindet hier nichts von selbst.
server_state bleibt
  • keywas gemerkt wird
  • valueund was darin steht
Die einzige Tabelle hier, die überhaupt nichts mit deiner Familie zu tun hat. Heute steht eine Sache darin, nämlich der Moment, in dem diese Version des Servers zum ersten Mal gestartet ist. Jede Frage danach, wer still geworden ist, wird ab da gemessen, damit eine Datenbank, die geschrieben wurde, bevor wir das feststellen konnten, nie als monatelanges Schweigen gelesen wird.
guardians bleibt
  • account_id
  • guardian_keyein Schlüssel, der für dieses Kind handeln darf
  • added_at
  • removed_at
Ein Entzug wird vermerkt, nicht gelöscht. Kontakte werden daran geprüft, wer beim Signieren des Kontakts verantwortlich war, damit ein Elternteil, das das Konto verlässt, nicht stillschweigend jede Freundschaft kappt, die es je freigegeben hat.
devices bleibt
  • 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
Die Handys und Tablets, von denen aus eine Person spricht. Die Tabelle sagt, wie viele Geräte deine Familie hat, und nicht das Geringste darüber, mit wem ihr sprecht, genauso wenig wie die beiden Tabellen darüber. Ein Handy wird durch eine Signatur von einem Gerät hereingelassen, das schon auf der Liste steht, nie von uns, und diese Signatur bleibt hier, damit jedes Handy sie prüfen kann, statt der Liste zu glauben. Ein Handy stillzulegen markiert die Zeile, statt sie zu löschen, aus demselben Grund, aus dem ein Erwachsener beim Weggehen markiert wird. Alles, was es signiert hat, solange es zu euch gehörte, muss überprüfbar bleiben.
push_tokens bleibt
  • account_id
  • device_keywelches deiner Handys dieser Eintrag klingeln lässt
  • platformapns oder fcm
  • tokeneine nichtssagende Kennung von Apple oder Google
  • updated_at
Einer pro Gerät, damit ein Anruf ein schlafendes Handy klingeln lassen kann. Der Push trägt keinen Namen und keinen Inhalt.
used_nonces aufgeräumt
  • nonce
  • expires_at
Eine Liste bereits verbrauchter Einmalnummern, damit eine abgefangene Anfrage nicht noch einmal abgespielt werden kann. Wird gelöscht, sobald sie abläuft.
denied_edges aufgeräumt
  • edge_hashein Hash des Paares, nicht die beiden Personen
  • denied_at
  • expires_at
Wenn ein Erwachsener zu einer Vorstellung Nein sagt, merkt sich das hier drei Tage lang das Nein, damit das Handy des anderen Elternteils, das gerade aus war, sie nicht versehentlich doch abschließt. Ein neuer Scan zwischen denselben Familien räumt den Eintrag früher weg. Keine Namen, keine Schlüssel, nur ein Hash und zwei Daten.
pending_grants aufgeräumt
  • 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
Das ist die eine Stelle, an der der Server etwas hält, das einem sozialen Netz ähnelt, und er hält es nur, solange eine Vorstellung noch nicht abgeschlossen ist. Niemand hat innerhalb von 72 Stunden geantwortet, dann verfällt sie. Beantwortet, aber das Handy, für das sie gedacht war, ist nie online gekommen, dann 30 Tage. Sobald beide Handys den fertigen Kontakt haben, wird die Zeile gelöscht. Deshalb gibt es auf dieser Seite keine Tabelle mit Kontakten. Es gibt keine Tabelle mit Kontakten.
messages wird bei Zustellung gelöscht
  • 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
Ein Handy ist den größten Teil des Tages aus, und eine Nachricht, die still verschwindet, ist ein kaputtes Produkt. Also wartet hier ein versiegeltes Päckchen, höchstens 30 Tage lang, und gelöscht in dem Moment, in dem der Empfänger bestätigt, dass er es hat. Wir können keines davon öffnen.
revocations bleibt
  • 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
Das Einzige, was wir unbegrenzt behalten. Es hält fest, dass ein Kontakt gekappt wurde, ohne eine lesbare Liste davon zu sein, wer wen kannte.
roster_changes bleibt
  • 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
Die zwei Nächte zwischen dem Moment, in dem jemand eine Änderung an den Erwachsenen eines Kindes signiert, und dem Moment, in dem sie wahr wird. Ein Handy, das zu einer Familie stößt, oder eines, das hinausgeworfen wird, wartet hier, wo jedes andere Handy auf dem Konto es sehen und widersprechen kann. Die Zeile bleibt, nachdem es entschieden ist, weil ein Handy, das aus war, prüfen können muss, was passiert ist, statt uns beim Wort zu nehmen. Sie hält das Konto und die beteiligten Schlüssel, und das ist mehr als die meisten Tabellen hier.
roster_change_votes bleibt
  • change_idwelche wartende Änderung
  • voter_keywelcher Erwachsene
  • decisiondurchlassen oder stoppen
  • recordihre Signatur
  • at
Eine Zeile pro Erwachsenem statt eines Zählers. Eine Mehrheit der Erwachsenen eines Kindes kann die zwei Nächte Wartezeit früher beenden, und ob es eine Mehrheit gibt, muss gegen die Erwachsenen neu gefragt werden, die es jetzt gibt. Wer gegangen ist, ist keine Stimme, und ein Zähler könnte das nicht erkennen.
device_revocations bleibt
  • 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
Ein gestohlenes Handy, und der Unterschied zwischen dem und dem Stilllegen. Stilllegen heißt, es kann von jetzt an nicht mehr handeln, und das ist die richtige Antwort für ein Handy, das jemand ersetzt hat. Das hier heißt, misstraue allem, was es je signiert hat, und das müssen andere Handys prüfen können, ohne uns zu fragen. Nur Diebstahl bekommt eine Zeile.
retirements bleibt
  • 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
Eine Liste von Abwesenheiten, und die gute Nachricht ist die zweite Spalte. Wenn jemand Rilo verlässt, bekommen die Handys seiner Freunde eine Signatur, die mit dem eigenen Schlüssel dieser Person gemacht wurde. Eine Familie erfährt aus einem Beweis, dass jemand weg ist, nicht daraus, dass wir es behaupten. Nichts, was wir von uns aus sagen könnten, nimmt ein Gesicht vom Bildschirm deines Kindes. Es ist die einzige Tabelle hier ohne Verbindung zurück zu einem Konto, weil sie das überleben muss, worüber sie spricht.
entitlements bleibt
  • 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
Nichts hier benennt eine Person. Kein Store-Konto, keine Apple-ID, kein Google-Konto, kein Name, keine E-Mail-Adresse, keine Karte. Welche Kinder eine Zahlung abdeckt, wird bei Bedarf aus der Tabelle der verantwortlichen Erwachsenen ermittelt und nie aufgeschrieben.
roster_notices aufgeräumt
  • 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
Eine Warteschlange, und der Grund, warum das Hinzufügen oder Entfernen eines Handys laut passiert. Jedes Handy in der Familie erfährt davon, und bei einem Kind auch jeder Erwachsene, der für es verantwortlich ist, samt dem Handy, das gerade entfernt wurde. So merkt jemand, der es nicht haben sollte, dass es dir aufgefallen ist. Eine Benachrichtigung enthält nichts, was die Änderung selbst nicht auch enthält, und sie wird beim Ablauf gelöscht, ob wir sie zustellen konnten oder nicht.
reports bleibt
  • 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
Die eine Tabelle hier, die es gibt, damit etwas passiert. Der größte Teil einer Meldung wird auf dem sendenden Handy versiegelt, und wir können ihn nicht öffnen. Lesbar bleibt, um wen es geht, denn eine Meldung, mit der niemand etwas anfangen kann, schützt niemanden. Sie überlebt das Konto, um das es geht. Sonst könnte sich jeder aus einer Meldung herauslöschen. Es gibt darin keine Aufnahme irgendeines Gesprächs, hier so wenig wie sonst wo, weil nie eine gemacht wird.

Spalten, die es nicht gibt

  • E-Mail
  • 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.