Splync bruker to identifikatorer for sensitive ID-er
I Splyncs database identifiseres hver bruker — og hvert prosjekt — med to forskjellige ID-er: en UUID og et auto-inkrementert heltall. Det auto-inkrementerte heltallet er det de fleste kjenner til — det er bare en teller: 1, 2, 3, og så videre. Splync bruker disse heltallene i serverdatabasen for å organisere nesten alle tabeller fordi de er enkle, raske og effektive for koblinger. Men vi avslører aldri disse interne numrene til appen. For eksempel, hvis du var den 42. brukeren som registrerte deg, ville din interne ID i databasen vært 42. Men iOS-appen din ser aldri "42." I stedet bruker appen en UUID for å representere deg. Vi bruker samme tilnærming til prosjekter — en prosjekt-ID kan være "7" i databasen, men appen refererer alltid til den med en lang UUID.
Hva er en UUID
UUID står for Universally Unique Identifier. Splync bruker versjon 4, variant 1 UUID-er, i samsvar med RFC 4122 — en av de mest brukte standardene. Det er en tilfeldig generert streng, som ser slik ut: 949ca11c-a6ed-48a3-b40a-fa9727494917. En UUID er vanligvis skrevet som 32 heksadesimale tegn delt inn i fem seksjoner adskilt av bindestreker. Den er designet for å være globalt unik, noe som betyr at den ikke kolliderer selv på tvers av forskjellige servere eller databaser. Matematisk er det omtrent 16^32 = 2^128 mulige kombinasjoner. Men siden seks biter er reservert for å indikere varianten og versjonen, er det totale antallet distinkte versjon-4, variant-1 UUID-er omtrent 2^122, eller omtrent 5.3 x 10^36 — et astronomisk stort tall som sikrer praktisk unikhet.
Hvor liten er 1 / 5,300,000,000,000,000,000,000,000,000,000,000,000
Hvert par av UUIDv4-er har omtrent 1 i 5.3 × 10^36 sjanse for å matche. Det tallet er så lite at det nesten ikke eksisterer i menneskelig fantasi. For å forestille seg det, tenk deg å kaste 47 terninger samtidig. Sannsynligheten for å få bare ett-tall — hver eneste terning viser "1" — er omtrent 1 i 6^47, eller omtrent 1 i 3.7 × 10^36. Det er samme størrelsesorden som en UUID-kollisjon. Nå, se for deg at hver person på jorden — omtrent åtte milliarder av oss — kaster de 47 terningene hvert millisekund i en billion år. Det er omtrent 2.5 × 10^32 totale forsøk. Selv etter alt det ville sjansen for at noen, et sted, får 47 ett-tall samtidig, fortsatt bare være en av ti tusen. Så usannsynlig er det for to UUIDv4-er å kollidere. Det er ikke "sjeldent." Det er kosmisk absurd — den typen tilfeldighet som ville fått matematikere til å slippe kaffen og sjekke universet for feil.
Er det lett å generere en UUID
Ved første øyekast kan det virke enkelt å generere en UUID — tross alt er det bare en tilfeldig utseende alfanumerisk streng. Men prøv å skrive en selv med penn og papir. Du kan notere 36 tegn, sikkert, men hvis du gjentar øvelsen tusenvis av ganger, vil klare mønstre dukke opp. Kanskje du foretrekker visse tall som 3 eller 8, og sjelden bruker bokstaver som x. En datamaskin kan oppdage disse skjevhetene umiddelbart. En ondsinnet hacker kan analysere vanene dine og begrense din "tilfeldige" hemmelige streng innen en dag. Så hva om du også henvender deg til en datamaskin og kaller rand(), den klassiske tilfeldige funksjonen, for å generere hvert siffer. Det er bedre — men ikke godt nok. Mange "tilfeldige" tallgeneratorer i vanlige programmeringsmiljøer er pseudotilfeldige, noe som betyr at de følger en forutsigbar matematisk sekvens som starter fra et internt frø, som vanligvis er basert på systemtiden. Hvis noen oppdager eller gjetter det frøet, kan de gjenskape hver verdi generatoren din noen gang har produsert.
Hvor perfekt tilfeldig er en UUID
Perfekt tilfeldighet eksisterer egentlig ikke — akkurat som en perfekt terning ikke eksisterer, eller et perfekt tilfeldig terningkast ikke eksisterer. Hver fysisk eller digital prosess følger noen underliggende regler. Likevel har matematikere og ingeniører brukt tiår på å designe algoritmer som kommer så nær som mulig sann tilfeldighet. Når Splync lager en ny versjon-4 UUID, velger den ikke bare "tall tilfeldig" som å kaste terninger. Den spør operativsystemet om små spor av uforutsigbarhet — for eksempel det presise øyeblikket CPU-en din fullfører en oppgave, svak elektrisk støy inne i maskinvaren, eller bakgrunnstidsfluktuasjoner i minnet. Disse fragmentene av entropi samles og blandes til 128 bits med data — en lang sekvens av ett-ere og nuller. Resultatet er en kode som er praktisk talt umulig å gjette eller gjenskape for appbrukere eller potensielle ondsinnede angripere.
Splyncs tosidige identifikatorstrategi
Splync bruker UUID-er for sensitive identifikatorer som bruker-ID-er og prosjekt-ID-er, fordi de er ekstremt tilfeldige og sikre. Samtidig, inne i serveren, konverterer Splync disse UUID-ene til auto-inkrementerte heltall for raskere søk og analyser på store datasett. Denne tosidige identifikatorstrategien balanserer mellom sikkerhet og bekvemmelighet — ekstern personvern med intern ytelse. Splyncs mål er å være en stressfri, enkel og sikker budsjettsporingsapp. Bak den synlige UI-en fortsetter vi å forbedre arkitekturen for å holde ting jevne, sikre og diskret smarte.