rilo
Maskotreven Rilo står ved siden av et skjold med en hengelås på

La oss ta det tekniske.

Alt forsiden sier, skrevet ut som det den er bygget av. Den virkelige databasen, hvordan en kontakt faktisk blir til, og hvem andre som er innom en samtale.

Du trenger ikke denne siden for å bruke Rilo, og ingenting her motsier den enklere versjonen. Det er samme produkt, beskrevet nøyaktig.

Hele databasen

Alt serveren vår vet om familien din.

Ikke et sammendrag. Dette er de sytten tabellene serveren har, med kolonnene de har. Fire er familien din, altså hvem de er, hvem som får handle for et barn, telefonene de snakker fra, og hvor de skal ringes. Fire holder på noe for en telefon som var slått av, og alle fire sletter seg selv. Tre handler om hvem som får handle for et barn og hvilken telefon som ikke lenger er til å stole på. To er signerte spor av en slutt, en kontakt som er brutt, eller noen som er borte. De blir liggende slik at en telefon som var uten nett kan kontrollere dem selv i stedet for å tro på oss. Én er oppbrukte engangsnumre, ryddet bort etter hvert som de går ut. Én er abonnementet, og der står ingenting som navngir noen. Én er en rapport en voksen sendte oss, og det er den eneste tabellen her som finnes for å få noe til å skje. Den siste handler ikke om familien din i det hele tatt.

accounts beholdes til du sletter den
  • iden hash av den offentlige nøkkelen, ikke et navn
  • public_keyenhetsnøkkelen som er kontoen
  • typevoksen eller barn
  • type_certsignaturen som beviser det. En barnekonto er signert av en forelder, så det finnes ingen bryter å vippe på
  • created_at
  • last_activesist en av telefonene dine sa hei
  • dormant_warned_attom
  • consent_sealede-postadressen du registrerte deg med, forseglet til en nøkkel som ligger på papir hos grunnleggeren. Ingen server kan lese den
  • uncovered_sincetom, med mindre abonnementet ditt slutta å dekke dette barnet — da dagen vi merka det, slik at måneden før noko stoppar begynner der
Kontoraden din blir stående til du sletter den, og å slette den i appen tar denne raden og alt som henger i den med seg. Vi jobber med å rydde bort familier som har sluttet å bruke Rilo helt. Til det er slått på, forsvinner ingenting her av seg selv.
server_state beholdes
  • keyhva som blir husket
  • valueog hva det sier
Den eneste tabellen her som ikke handler om familien din i det hele tatt. I dag står det én ting i den, nemlig øyeblikket da denne versjonen av serveren startet første gang. Alle spørsmål om hvem som har blitt stille, måles fra da, slik at en database som ble skrevet før vi kunne se det, aldri kan leses som måneder med stillhet.
guardians beholdes
  • account_id
  • guardian_keyen nøkkel som får handle for dette barnet
  • added_at
  • removed_at
En fjerning blir merket, ikke visket ut. Kontakter kontrolleres mot hvem som var foresatt da kontakten ble signert, slik at en forelder som forlater kontoen ikke i stillhet klipper over hvert vennskap de noen gang har godkjent.
devices beholdes
  • account_id
  • device_keyén telefons egen nøkkel. En person kan snakke fra mer enn én
  • agreement_keynøkkelen en melding forsegles til, slik at bare den telefonen kan åpne den
  • certsignaturen som slapp denne telefonen inn, bevart ord for ord slik at telefonen din kan kontrollere den i stedet for å tro på oss
  • kinden telefon, eller det utskrevne gjenopprettingsarket
  • added_at
  • removed_at
Telefonene og nettbrettene én person snakker fra. Den sier hvor mange enheter familien din har, og ikke noe som helst om hvem du snakker med, like lite som de to tabellene over. En telefon slippes inn av en signatur fra en enhet som allerede står på listen, aldri av oss, og signaturen ligger her slik at enhver telefon kan kontrollere den i stedet for å tro på listen. Å ta en telefon ut av bruk merker raden i stedet for å viske den ut, av samme grunn som når en voksen går. Alt den signerte mens den var din, må fortsatt kunne kontrolleres.
push_tokens beholdes
  • account_id
  • device_keyhvilken av telefonene dine denne ringer på
  • platformapns eller fcm
  • tokenet ugjennomsiktig håndtak fra Apple eller Google
  • updated_at
Én per enhet, slik at en samtale kan få en sovende telefon til å ringe. Varselet bærer ingen navn og ingenting av innholdet.
used_nonces ryddes bort
  • nonce
  • expires_at
En liste over engangsnumre som allerede er brukt, slik at en oppsnappet forespørsel ikke kan spilles av på nytt. Slettes etter hvert som den går ut.
denied_edges ryddes bort
  • edge_hashen hash av paret, ikke av de to personene
  • denied_at
  • expires_at
Når en voksen sier nei til en introduksjon, husker dette nei-et i tre dager, slik at telefonen til den andre forelderen, som var slått av den gangen, ikke kan fullføre den ved et uhell. En ny skanning mellom de samme familiene rydder det bort tidligere. Ingen navn, ingen nøkler, bare en hash og to datoer.
pending_grants ryddes bort
  • edge_hashen hash av paret, ikke av de to personene
  • grant_recordtillatelsen det avgjøres om, og signaturene som er samlet så langt
  • waiting_keyhvem sin signatur som fortsatt mangler
  • requested_bytelefonen som spurte, slik at én telefon ikke kan oversvømme en familie med spørsmål
  • originskannet ansikt til ansikt, eller en forelder som handler for barnet sitt
  • delivered_tohvilke telefoner som allerede har den
  • declarednavnet til den som spør, forseglet slik at bare familien de skannet kan lese det
  • created_at
  • expires_at
Dette er det ene stedet serveren har noe som ligner et sosialt nettverk, og den har det bare så lenge en introduksjon er uferdig. Ingen svarte innen 72 timer, og da faller den bort. Besvart, men telefonen den var ment for kom aldri på nett, og da venter den 30 dager. Så snart begge telefonene har den ferdige kontakten, slettes raden. Derfor står det ingen tabell over kontakter på denne siden. Det finnes ingen tabell over kontakter.
messages slettes ved levering
  • id
  • recipient_iddenne må ligge åpent for at meldingen skal finne veien
  • recipient_devicehvilken av telefonene deres esken er forseglet for. Hver telefon har sin egen nøkkel, så hver telefon får sin egen eske
  • sender_idslik at telefonen vet hvem sin nøkkel som åpner den
  • sender_devicehvilken av telefonene deres som forseglet den, slik at rett kopi finner rett lås
  • edge_hashparet, hashet, slik at dette ikke kan leses som et kart over hvem som snakker med hvem
  • sealedkryptert tekst. Det finnes ingen tekstkolonne, og det kommer det aldri til å gjøre
  • sent_at
  • expires_at
En telefon står avslått det meste av dagen, og en melding som stille forsvinner er et ødelagt produkt. Så en forseglet eske venter her, i høyst 30 dager, og slettes i det øyeblikket mottakeren bekrefter at den er kommet fram. Vi kan ikke åpne noen av dem.
revocations beholdes
  • edge_hashparet, hashet
  • revoked_at
  • recorddet signerte beviset, slik at en telefon som var uten nett kan kontrollere bruddet selv i stedet for å ta oss på ordet
Det ene vi beholder på ubestemt tid. Den viser at en kontakt ble brutt, uten å være en lesbar liste over hvem som kjente hvem.
roster_changes beholdes
  • id
  • account_idhvem sin liste over telefoner og voksne som endrer seg
  • kindkommer til, eller blir fjernet
  • subject_keytelefonen eller den voksne det handler om
  • subject_kindhvilken av de to
  • agreement_keyden andre nøkkelen en telefon trenger, tom for papir
  • recordselve signaturen, bevart ord for ord slik at en telefon kan kontrollere den i stedet for å tro på oss
  • signed_byhvilken nøkkel som signerte den
  • by_authorityom et gjenopprettingsark signerte den, og det er det som får den til å vente
  • issued_atøyeblikket den som signerer oppgir, aldri klokken vår
  • reasontom, med mindre den som signerte skrev en
  • proposed_at
  • effective_atnår det blir sant, to netter etter at det ble foreslått
  • contested_at
  • contested_byhvem som protesterte, og signaturen de protesterte med
  • contest_record
  • resolved_at
  • resolutiongjennomført eller avbrutt, når det først har landet
De to nettene mellom at noen signerer en endring i et barns voksne og at endringen blir sann. En telefon som kommer inn i en familie, eller en som kastes ut, venter her der hver annen telefon på kontoen kan se den og protestere. Raden blir stående etter at det har landet, for en telefon som var slått av må kunne kontrollere hva som skjedde i stedet for å ta oss på ordet. Den inneholder kontoen og nøklene det gjelder, og det er mer enn de fleste tabellene her.
roster_change_votes beholdes
  • change_idhvilken ventende endring
  • voter_keyhvilken voksen
  • decisionslippe den gjennom, eller stoppe den
  • recordsignaturen deres
  • at
Én rad per voksen i stedet for en teller. Et flertall av et barns voksne kan avslutte ventetiden på to netter tidligere, og om det er et flertall må spørres på nytt mot de voksne som finnes nå. Noen som har gått er ikke en stemme, og en teller ville ikke visst det.
device_revocations beholdes
  • account_idhvem sin telefon det var
  • device_keynøkkelen som ble stjålet
  • revoked_at
  • recorddet signerte beviset, slik at en telefon kan kontrollere det uten å spørre oss
En stjålet telefon, og forskjellen mellom dette og å ta en ut av bruk. Å ta den ut av bruk betyr at den slutter å kunne handle fra nå av, og det er riktig svar for en telefon noen har byttet ut. Dette betyr: mistro alt den noen gang har signert, og det må andre telefoner kunne kontrollere uten å spørre oss. Bare tyveri får en rad.
retirements beholdes
  • account_idkontoen som er borte
  • retired_at
  • recorddet signerte beviset, laget med kontoens egen nøkkel før nøkkelen ble ødelagt
En liste over fravær, og den gode nyheten er den andre kolonnen. Når noen slutter i Rilo, får telefonene til vennene deres en signatur laget med denne personens egen nøkkel. En familie får vite at noen er borte fra et bevis, ikke fordi vi sier det. Ingenting vi kan si på egen hånd kan ta et ansikt bort fra skjermen til barnet ditt. Det er den eneste tabellen her uten en lenke tilbake til en konto, for den må leve lenger enn den kontoen den handler om.
entitlements beholdes
  • account_id
  • storeapple, google, eller på huset
  • store_refet ugjennomsiktig håndtak fra butikken. Det er det eneste som lar oss stille den et spørsmål senere
  • store_ref_hashet fingeravtrykk av håndtaket over. Det er det som hindrer at én kvittering dekker to kontoer
  • environment
  • stateactive, grace, lapsed, lapsed_trial eller disabled
  • seatshvor mange barn det dekker. Et antall, aldri navnene deres
  • expires_at
  • acts_at
  • updated_at
Ingenting her identifiserer en person. Ingen butikkonto, ingen Apple-ID, ingen Google-konto, ingen navn, ingen e-post, ingen kort. Hvilke barn en betaling dekker, regnes ut fra tabellen over foresatte når det blir spurt, og skrives aldri ned.
roster_notices ryddes bort
  • device_keytelefonen som ennå ikke har fått det å vite
  • change_idhvilken endring dette handler om
  • whatforeslått, bestridt eller avgjort
  • account_idhvem sin liste over telefoner som endret seg. Når en voksen får høre noe om barnet sitt, er dette barnet
  • subject_keytelefonen som kom til eller gikk bort
  • effective_at
  • created_at
  • expires_at
  • delivered_atnår vi fikk sagt det, eller tom fordi vi ikke har fått det
En kø, og grunnen til at det skjer høyt når en telefon legges til eller fjernes. Alle telefonene i familien får høre om det, og for et barn gjør hver voksen med ansvar for dem det også, inkludert telefonen som nettopp ble fjernet. Det er slik noen som ikke skulle hatt den, får vite at du la merke til det. Et varsel inneholder ingenting endringen ikke inneholder selv, og det slettes når det går ut, enten vi fikk levert det eller ikke.
reports beholdes
  • id
  • about_keyhvem rapporten handler om. Lesbart, slik at noen kan gjøre noe med den
  • reasonhvilke av seks ting som skjedde, slik den voksne som melder valgte det
  • csa
  • sealeddet som ble skrevet, forseglet på telefonen som sendte det, med en nøkkel som ligger på papir hos grunnleggeren. Ingen server kan lese det
  • sealed_digestet fingeravtrykk av den forseglede delen, slik at det som åpnes senere beviselig er det som kom inn
  • received_at
  • edge_snapshothvem som hadde fått lov til å nå hvem, og hvilken voksen som tillot det, slik det sto i det øyeblikket. Denne kan ikke settes sammen igjen senere
  • reporter_keyhvem som sendte den, eller ingenting i det hele tatt når den ble sendt uten navn
  • source
  • sealed_key
  • receiptreferansen avsenderen beholder. Det er den eneste måten vi kan svare noen om en rapport vi ikke kan åpne
  • acknowledged_at
  • decided_at
  • actioned_at
  • escalated_at
  • decided_by
  • outcome
Den ene tabellen her som finnes for å få noe til å skje. Det meste av en rapport er forseglet på telefonen som sendte den, og vi kan ikke åpne den. Det som ligger lesbart, er hvem den handler om, for en rapport ingen kan gjøre noe med er ikke et vern. Den lever videre etter kontoen den handler om. Ellers kunne hvem som helst slette seg selv ut av en. Det er ikke noe opptak av noen samtale i den, verken her eller andre steder, for det blir aldri gjort noe.

Kolonner som ikke finnes

  • e-post
  • navn
  • alder
  • bilde
  • meldingstekst
  • samtaleinnhold
  • samtalehistorikk
  • kontaktliste
  • posisjon
  • enhetsmodell

E-postadressen din kontrolleres én gang når du registrerer deg, og forsegles i samme åndedrag, til en nøkkel som ligger på papir hos grunnleggeren og aldri har vært i nærheten av en server. Loven ber oss om å kunne bevise at en voksen sa ja. Vi kunne ikke lest den tilbake selv om vi ville. Navn og bilder settes på hver telefon og gis rett til den andre telefonen. De kommer aldri til oss, og derfor kan du kalle bestefar “Farfar” uten at vi noen gang får vite det. Vi kunne ikke vist noe av dette til noen om vi ville, og vi kan ikke tvinges til det heller.

Denne delen er generert fra serverens eget skjema, i accounts.ts og roster-changes.ts, de to filene som lager databasen. Skulle de noen gang være uenige, har filene rett og denne siden er en feil.

Kontakter

Hvordan en kontakt faktisk blir til.

Telefonen til noen lager en engangsinvitasjon. Den andre telefonen leser den, skannet fra en skjerm i samme rom eller åpnet fra en lenke den voksne sendte. Å lese den starter introduksjonen og fanger i samme øyeblikk den offentlige nøkkelen til den andre telefonen, slik at begge telefonene fra da av vet nøyaktig hvilken nøkkel som hører til hvem. Det er den biten som gjør det umulig å sitte midt i en samtale senere, også for oss. Ingenting av det kobles sammen før en voksen på den andre siden har sagt ja.

Fortsatt ingen kontakt. En ansvarlig voksen må signere kontakten på sin egen telefon, bak en biometrisk kontroll gjort i det øyeblikket. Det de signerer er det hele. Hvem, med hvem, og i hvilken retning. Signaturen deres er det serveren kontrollerer før den sender noe videre. Serveren har ingen nøkkel som kan signere, så den kan ikke lage en kontakt, og det kan heller ikke den som stjeler databasen.

Når begge telefonene har den ferdige kontakten, slettes raden og kontakten finnes bare på de to enhetene. Å bryte den senere skriver en signert tilbakekalling, og det er det ene sporet som beholdes på ubestemt tid. Det lagres som en hash av paret, så det sier at en kontakt tok slutt uten å si hvem som kjente hvem.

Hvem andre er involvert

Tre selskaper er innom en samtale. Ingen av dem kan høre den.

Seks andre selskaper er innom tjenesten, og alle står i personvernerklæringen. Tre av dem er med på å få en samtale til å ringe, og her står det hva hver av de tre kan og ikke kan se.

  • Apple & Google

    Push-varsler, slik at en samtale får en sovende telefon til å ringe. Umulig å komme rundt på begge plattformene. De bærer en ugjennomsiktig kode og ingenting annet. Ingen navn, ingen nummer, ingenting av innholdet.

  • Cloudflare

    Omtrent én samtale av seks får ikke koblet de to telefonene direkte, på hotell-Wi-Fi eller på noen mobilnett, og blir sendt via et mellomledd. Mellomleddet sender videre krypterte pakker det ikke kan åpne, men det ser at to anonyme id-er var koblet sammen, når, hvor lenge, og fra hvilke adresser. Det er metadata vi ikke lagrer, men som noen andre har.

  • Oss

    Tabellen over. Én liten server i Nederland som presenterer to telefoner for hverandre og deretter går ut av veien.