rilo
Maskotræven Rilo ved siden af et skjold med en hængelås på

Lad os blive tekniske.

Alt det, forsiden siger, skrevet ud som det, det er bygget af. Den rigtige database, hvordan en kontakt faktisk bliver til, og hvem andre der rører ved et opkald.

Du har ikke brug for denne side for at bruge Rilo, og intet her modsiger den enklere version. Samme produkt, bare beskrevet præcist.

Hele databasen

Alt, hvad vores server ved om din familie.

Ikke et resumé. Det her er de sytten tabeller, serveren har, med de kolonner de har. Fire handler om din familie. Hvem de er, hvem der må handle på et barns vegne, de telefoner de taler fra, og hvor de kan ringes op. Fire holder noget for en telefon, der var slukket, og alle fire sletter sig selv. Tre handler om, hvem der må handle på et barns vegne, og hvilken telefon der ikke længere er betroet. To er underskrevne spor af en afslutning, en kontakt der blev klippet over, eller en person der er væk. De bliver gemt, så en telefon, der var offline, kan tjekke dem i stedet for at tro på os. Én er brugte engangstal, ryddet op efterhånden som de udløber. Én er abonnementet, og der står intet i den, som nævner nogen. Én er en anmeldelse, som en voksen har sendt os, og det er den eneste tabel her, der findes for at få noget til at ske. Den sidste handler slet ikke om din familie.

accounts gemmes, indtil du sletter det
  • iden hash af den offentlige nøgle, ikke et navn
  • public_keytelefonens nøgle, som er kontoen
  • typevoksen eller barn
  • type_certunderskriften, der beviser det. En barnekonto er underskrevet af en forælder, så der er ikke noget flag at vende
  • created_at
  • last_activesidste gang en af dine telefoner sagde hej
  • dormant_warned_attom
  • consent_sealeddin e-mail fra oprettelsen, forseglet til en nøgle, der ligger på papir hos grundlæggeren. Ingen server kan læse den
  • uncovered_sincetom, medmindre dit abonnement ikke længere dækker dette barn — så dagen, hvor vi bemærkede det, så måneden før noget stopper begynder derfra
Din kontos række bliver stående, indtil du sletter den, og sletter du den i appen, ryger denne række og alt, hvad der hænger på den, med. Vi arbejder på at rydde ud i familier, der helt er holdt op med at bruge Rilo. Indtil det er slået til, forsvinder intet her af sig selv.
server_state gemmes
  • keyhvad der bliver husket
  • valueog hvad der står
Den eneste tabel her, der slet ikke handler om din familie. I dag står der én ting i den, nemlig det øjeblik hvor denne version af serveren startede første gang. Alle spørgsmål om, hvem der er blevet stille, måles fra da, så en database, der blev skrevet før vi kunne se det, aldrig kan læses som måneder af stilhed.
guardians gemmes
  • account_id
  • guardian_keyen nøgle, der må handle for dette barn
  • added_at
  • removed_at
At fjerne en værge bliver noteret, ikke slettet. Kontakter bliver tjekket mod, hvem der var værge, da kontakten blev underskrevet, så en forælder, der forlader kontoen, ikke i stilhed klipper hvert venskab over, som de nogensinde har godkendt.
devices gemmes
  • account_id
  • device_keyén telefons egen nøgle. En person kan tale fra mere end én
  • agreement_keyden nøgle, en besked bliver forseglet til, så kun den telefon kan åbne den
  • certunderskriften, der lukkede denne telefon ind, gemt ord for ord, så din telefon kan tjekke den i stedet for at tro på os
  • kinden telefon, eller det printede gendannelsesark
  • added_at
  • removed_at
De telefoner og tablets, én person taler fra. Den siger, hvor mange enheder din familie har, og absolut intet om, hvem du taler med, lige så lidt som de to tabeller over den. En telefon bliver lukket ind af en underskrift fra en enhed, der allerede står på listen, aldrig af os, og den underskrift ligger her, så enhver telefon kan tjekke den frem for at tro på listen. At tage en telefon ud af brug markerer rækken i stedet for at slette den, af samme grund som en voksen, der går, bliver markeret. Alt, hvad den underskrev, mens den var din, skal blive ved med at kunne tjekkes.
push_tokens gemmes
  • account_id
  • device_keyhvilken af dine telefoner denne ringer på
  • platformapns eller fcm
  • tokenet betydningsløst håndtag fra Apple eller Google
  • updated_at
Én pr. enhed, så et opkald kan ringe på en telefon, der sover. Push-beskeden bærer intet navn og intet indhold.
used_nonces ryddes op
  • nonce
  • expires_at
En liste over engangstal, der allerede er brugt, så en opsnappet forespørgsel ikke kan spilles igen. Slettes, når den udløber.
denied_edges ryddes op
  • edge_hashen hash af parret, ikke af de to personer
  • denied_at
  • expires_at
Når en voksen siger nej til en introduktion, husker denne nejet i tre dage, så den anden forælders telefon, der var slukket dengang, ikke ved et uheld kan gennemføre den alligevel. En ny scanning mellem de samme familier rydder den tidligt. Ingen navne, ingen nøgler, kun en hash og to datoer.
pending_grants ryddes op
  • edge_hashen hash af parret, ikke af de to personer
  • grant_recordden tilladelse, der bliver afgjort, og de underskrifter, der er samlet indtil nu
  • waiting_keyhvis underskrift der stadig mangler
  • requested_byden telefon, der spurgte, så én telefon ikke kan oversvømme en familie med spørgsmål
  • originscannet ansigt til ansigt, eller en forælder, der handler for sit barn
  • delivered_tohvilke telefoner der allerede har den
  • declaredden spørgende sides eget navn, forseglet så kun den familie, de scannede, kan læse det
  • created_at
  • expires_at
Det er det eneste sted, serveren har noget, der minder om et socialt net, og den har det kun, så længe en introduktion er uafsluttet. Ingen svarede inden for 72 timer, så falder den bort. Besvaret, men den telefon, den var til, kom aldrig online, 30 dage. Når begge telefoner har den færdige kontakt, bliver rækken slettet. Derfor er der ingen tabel med kontakter på denne side. Der findes ingen tabel med kontakter.
messages slettes ved levering
  • id
  • recipient_iddenne skal stå i klartekst, ellers kan beskeden ikke sendes videre
  • recipient_devicehvilken af deres telefoner æsken er forseglet til. Hver telefon har sin egen nøgle, så hver får sin egen æske
  • sender_idså telefonen ved, hvis nøgle der åbner den
  • sender_devicehvilken af deres telefoner der forseglede den, så den rigtige kopi finder den rigtige lås
  • edge_hashparret, hashet, så dette ikke kan læses som et kort over, hvem der taler med hvem
  • sealedkrypteret tekst. Der er ingen tekstkolonne, og den kommer der aldrig
  • sent_at
  • expires_at
En telefon er slukket det meste af dagen, og en besked, der stille forsvinder, er et ødelagt produkt. Så en forseglet æske venter her, højst 30 dage, og bliver slettet i det øjeblik modtageren bekræfter, at de har den. Vi kan ikke åbne nogen af dem.
revocations gemmes
  • edge_hashparret, hashet
  • revoked_at
  • recorddet underskrevne spor, så en telefon, der var offline, selv kan bekræfte, at kontakten blev klippet over, i stedet for at tage vores ord for det
Det eneste, vi gemmer uden tidsgrænse. Det viser at en kontakt blev klippet over, uden at være en læsbar liste over, hvem der kendte hvem.
roster_changes gemmes
  • id
  • account_idhvis liste over telefoner og voksne der ændrer sig
  • kindkommer til, eller bliver fjernet
  • subject_keyden telefon eller den voksne, det handler om
  • subject_kindhvilken af de to
  • agreement_keyden anden nøgle, en telefon har brug for, tom for papir
  • recordunderskriften selv, gemt ord for ord, så en telefon kan tjekke den i stedet for at tro på os
  • signed_byhvilken nøgle der underskrev den
  • by_authorityom et gendannelsesark underskrev den, som er det, der får den til at vente
  • issued_atdet øjeblik, underskriveren påstår, aldrig vores ur
  • reasontom, medmindre underskriveren skrev en
  • proposed_at
  • effective_athvornår den bliver sand, to nætter efter den blev foreslået
  • contested_at
  • contested_byhvem der protesterede, og den underskrift de protesterede med
  • contest_record
  • resolved_at
  • resolutiongennemført eller annulleret, når den er afgjort
De to nætter mellem at nogen underskriver en ændring af et barns voksne, og at ændringen er sand. En telefon, der kommer med i en familie, eller en der bliver smidt af, venter her, hvor hver anden telefon på kontoen kan se den og protestere. Rækken bliver stående, efter den er afgjort, fordi en telefon, der var slukket, skal kunne tjekke, hvad der skete, frem for at tage vores ord for det. Den indeholder kontoen og de nøgler, det handler om, og det er mere end de fleste tabeller her.
roster_change_votes gemmes
  • change_idhvilken ventende ændring
  • voter_keyhvilken voksen
  • decisionlad den gå igennem, eller stop den
  • recordderes underskrift
  • at
Én række per voksen frem for et tal. Et flertal af et barns voksne kan afslutte de to nætters ventetid tidligt, og om der er et flertal skal spørges igen mod de voksne, der er nu. Nogen, der er gået, er ikke en stemme, og en tæller kunne ikke se forskel.
device_revocations gemmes
  • account_idhvis telefon det var
  • device_keyden nøgle, der blev stjålet
  • revoked_at
  • recorddet underskrevne bevis, så en telefon kan tjekke det uden at spørge os
En stjålet telefon, og forskellen mellem det her og at tage en telefon ud af brug. Ud af brug betyder, at den ikke længere kan handle fra nu af, og det er det rigtige svar for en telefon, nogen har erstattet. Det her betyder, at alt hvad den nogensinde har underskrevet, ikke skal stoles på, og det skal andre telefoner kunne tjekke uden at spørge os. Kun tyveri får en række.
retirements gemmes
  • account_idden konto, der er væk
  • retired_at
  • recorddet underskrevne bevis, lavet med kontoens egen nøgle, før nøglen blev ødelagt
En liste over fravær, og den gode nyhed er den anden kolonne. Når nogen forlader Rilo, får deres venners telefoner en underskrift, der er lavet med den persons egen nøgle. En familie får at vide, at nogen er væk, ud fra et bevis, ikke fordi vi siger det. Intet, vi kan sige på egen hånd, kan tage et ansigt væk fra dit barns skærm. Det er den eneste tabel her uden en henvisning tilbage til en konto, fordi den skal overleve den konto, den handler om.
entitlements gemmes
  • account_id
  • storeapple, google eller på huset
  • store_refet betydningsløst håndtag fra butikken, det eneste vi kan spørge den om noget med senere
  • store_ref_hashet fingeraftryk af håndtaget ovenfor. Det er det, der forhindrer én kvittering i at dække to konti
  • environment
  • stateactive, grace, lapsed, lapsed_trial eller disabled
  • seatshvor mange børn det dækker. Et tal, aldrig deres navne
  • expires_at
  • acts_at
  • updated_at
Intet her peger på en person. Ingen butikskonto, intet Apple-id, ingen Google-konto, intet navn, ingen e-mail, intet kort. Hvilke børn en betaling dækker bliver regnet ud fra værgetabellen, når der bliver spurgt, og bliver aldrig skrevet ned.
roster_notices ryddes op
  • device_keyden telefon, der ikke har fået det at vide endnu
  • change_idhvilken ændring det handler om
  • whatforeslået, anfægtet eller afgjort
  • account_idhvis liste over telefoner der ændrede sig. Når en voksen får noget at vide om sit barn, er det barnet her
  • subject_keyden telefon, der blev tilføjet eller fjernet
  • effective_at
  • created_at
  • expires_at
  • delivered_athvornår vi fik det sagt, eller tom, fordi vi ikke har
En kø, og grunden til at det sker højt, når en telefon bliver tilføjet eller fjernet. Hver telefon i familien hører om det, og for et barn gør hver voksen med ansvar for dem det også, inklusive den telefon, der lige blev fjernet. Sådan finder nogen, der ikke burde have den, ud af, at du har lagt mærke til det. En besked indeholder intet, som ændringen ikke selv indeholder, og den bliver slettet, når den udløber, uanset om vi fik den leveret eller ikke.
reports gemmes
  • id
  • about_keyhvem anmeldelsen handler om. Læsbart, så nogen kan gøre noget ved det
  • reasonhvilke af seks ting der skete, sådan som den voksne, der anmelder, valgte det
  • csa
  • sealedhvad der blev skrevet, forseglet på den telefon, der sendte det, med en nøgle, der ligger på papir hos grundlæggeren. Ingen server kan læse det
  • sealed_digestet fingeraftryk af den forseglede del, så det, der bliver åbnet senere, påviseligt er det, der kom ind
  • received_at
  • edge_snapshothvem der havde fået lov at nå hvem, og hvilken voksen der gav lov, som det stod i det øjeblik. Denne kan ikke stykkes sammen bagefter
  • reporter_keyhvem der sendte den, eller slet ingenting, når den blev sendt uden navn
  • source
  • sealed_key
  • receiptdet kendetegn, afsenderen beholder. Det er den eneste måde, vi kan svare nogen om en anmeldelse, vi ikke kan åbne
  • acknowledged_at
  • decided_at
  • actioned_at
  • escalated_at
  • decided_by
  • outcome
Den eneste tabel her, der findes for at få noget til at ske. Det meste af en anmeldelse er forseglet på den telefon, der sendte den, og vi kan ikke åbne den. Det, der bliver læsbart, er hvem den handler om, for en anmeldelse, ingen kan gøre noget ved, er ingen beskyttelse. Den lever videre efter den konto, den handler om. Ellers kunne enhver slette sig ud af en. Der er ingen optagelse af nogen samtale i den, hverken her eller andre steder, for der bliver aldrig lavet en.

Kolonner, der ikke findes

  • e-mail
  • navn
  • alder
  • foto
  • beskedtekst
  • samtaleindhold
  • opkaldshistorik
  • kontaktliste
  • placering
  • telefonmodel

Din e-mail bliver tjekket én gang, når du opretter dig, og forseglet i samme åndedrag, til en nøgle, der ligger på papir hos grundlæggeren og aldrig har været i nærheden af en server. Loven beder os om at kunne bevise, at en voksen sagde ja. Vi kunne ikke selv læse den igen. Navne og billeder bliver sat på hver telefon og givet direkte til den anden telefon. De kommer aldrig frem til os, og det er også derfor, du kan kalde morfar “Bedste”, uden at vi nogensinde får det at vide. Vi kunne ikke vise noget af det til nogen, hvis vi ville, og vi kunne ikke tvinges til det.

Dette afsnit er genereret ud fra serverens eget skema, i accounts.ts og roster-changes.ts, de to filer, der laver databasen. Hvis de nogensinde er uenige, har filerne ret, og denne side er fejlen.

Kontakter

Sådan bliver en kontakt faktisk til.

Nogens telefon laver en engangsinvitation. Den anden telefon læser den, scannet fra en skærm i samme rum eller åbnet fra et link, som den voksne sendte. At læse den starter introduktionen og noterer i samme øjeblik den anden telefons offentlige nøgle, så begge telefoner fra da af ved præcis, hvilken nøgle der hører til hvem. Det er den del, der gør det umuligt at sætte sig ind i midten af et senere opkald, også for os. Intet af det bliver forbundet, før en voksen på den anden side har sagt ja.

Stadig ikke en kontakt. En voksen med ansvar skal underskrive kontakten på sin egen telefon, bag en biometrisk kontrol lavet i netop det øjeblik. Det, de skriver under på, er det hele. Hvem, med hvem, og i hvilken retning. Deres underskrift er det, serveren tjekker, før den vil sende noget videre. Serveren har ingen nøgle, der kan underskrive, så den kan ikke lave en kontakt, og det kan den, der stjæler databasen, heller ikke.

Når begge telefoner har den færdige kontakt, bliver rækken slettet, og kontakten findes kun på de to enheder. Klipper man den over senere, bliver der skrevet en underskrevet tilbagekaldelse, og det er det ene spor, der bliver gemt uden tidsgrænse. Den ligger som en hash af parret, så den siger, at en kontakt sluttede, uden at sige hvem der kendte hvem.

Hvem andre er involveret

Tre firmaer rører ved et opkald. Ingen af dem kan høre det.

Seks andre firmaer rører ved tjenesten, og de står alle i privatlivspolitikken. Tre af dem er med til at få et opkald til at ringe, og her står, hvad hver af de tre kan og ikke kan se.

  • Apple & Google

    Push-beskeder, så et opkald ringer på en telefon, der sover. Uundgåeligt på begge platforme. De bærer en betydningsløs identifikator og ellers ingenting. Intet navn, intet nummer, intet indhold.

  • Cloudflare

    Cirka hvert sjette opkald kan ikke forbinde de to telefoner direkte, på hotel-Wi-Fi eller nogle mobilnet, og bliver sendt gennem et relæ. Relæet sender krypterede pakker videre, som det ikke kan åbne, men det ser godt nok, at to anonyme id’er blev forbundet, hvornår, hvor længe, og fra hvilke adresser. Det er metadata, vi ikke gemmer, som ligger hos nogen andre.

  • Os

    Tabellen ovenfor. Én lille server i Holland, der introducerer to telefoner for hinanden og så går af vejen.