Dette websted er automatisk oversat til flere sprog med software udviklet af Kohei Koyanagi. Se den originale version på engelsk for størst nøjagtighed.

Splyncs dobbelte identifikator tilgang: UUID og auto-incrementeret int

Splync bruger to identifikatorer til følsomme ID'er

I Splyncs database bliver hver bruger – og hvert projekt – identificeret med to forskellige ID'er: en UUID og et auto-incrementeret heltal. Det auto-incrementerede heltal er det, de fleste kender – det er blot en tæller: 1, 2, 3 osv. Splync bruger disse heltal i serverdatabasen til at organisere næsten alle tabeller, da de er enkle, hurtige og effektive til joins. Vi viser dog aldrig disse interne numre i appen. For eksempel, hvis du tilfældigvis var den 42. bruger, der tilmeldte sig, ville dit interne ID i databasen være 42. Men din iOS-app ser aldrig "42." I stedet bruger appen en UUID til at repræsentere dig. Vi anvender samme tilgang til projekter – et projekt-ID kan være "7" i databasen, men appen refererer altid til det ved hjælp af en lang UUID.

Hvad er en UUID

UUID står for Universally Unique Identifier. Splync bruger version 4, variant 1 UUID'er, som er i overensstemmelse med RFC 4122 – en af de mest udbredte standarder. Det er en tilfældigt genereret streng, der ser ud som 949ca11c-a6ed-48a3-b40a-fa9727494917. En UUID skrives typisk som 32 hexadecimale tegn opdelt i fem sektioner adskilt af bindestreger. Den er designet til at være globalt unik, hvilket betyder, at den ikke kolliderer, selv på tværs af forskellige servere eller databaser. Matematisk set er der omkring 16^32 = 2^128 mulige kombinationer. Men da seks bits er reserveret til at angive variant og version, er det samlede antal af distinkte version-4, variant-1 UUIDs cirka 2^122, eller omkring 5.3 x 10^36 – et astronomisk stort tal, der sikrer praktisk unikhed.

Hvor lille er 1 / 5.300.000.000.000.000.000.000.000.000.000.000.000

Hvert par af UUIDv4'er har omkring 1 ud af 5.3 × 10^36 chance for at matche. Det tal er så lille, at det næsten ikke kan forestilles. For at visualisere det, forestil dig at kaste 47 terninger på én gang. Chancen for at få alle ét – hver eneste terning viser "1" – er omkring 1 ud af 6^47, eller omtrent 1 ud af 3.7 × 10^36. Det er i samme størrelsesorden som en UUID-kollision. Forestil dig nu, at hver person på jorden – omkring otte milliarder af os – kaster de 47 terninger hver millisekund i en trillion år. Det er omkring 2.5 × 10^32 samlede forsøg. Selv efter alt det ville chancen for, at nogen, et sted, får 47 ét-taller på én gang, stadig kun være én ud af ti tusind. Så usandsynligt er det for to UUIDv4'er at kollidere. Det er ikke "sjældent." Det er kosmisk absurd – en slags tilfældighed, der ville få matematikere til at tabe deres kaffe og tjekke universet for fejl.

Er det let at generere en UUID

Ved første øjekast kan det virke enkelt at generere en UUID – det er trods alt bare en tilfældig udseende alfanumerisk streng. Men prøv at skrive en selv med pen og papir. Du kan måske notere 36 tegn, men hvis du gentager øvelsen tusindvis af gange, vil der opstå klare mønstre. Måske favoriserer du visse cifre som 3 eller 8 og bruger sjældent bogstaver som x. En computer kan straks opdage disse tendenser. En ondsindet hacker kunne analysere dine vaner og indsnævre din "tilfældige" hemmelige streng inden for en dag. Hvad nu hvis du også bruger en computer og kalder rand(), den klassiske tilfældige funktion, til at generere hvert ciffer. Det er bedre – men ikke godt nok. Mange "tilfældige" talgeneratorer i almindelige programmeringsmiljøer er pseudotilfældige, hvilket betyder, at de følger en forudsigelig matematisk sekvens, der starter fra et internt seed, som typisk er baseret på systemtiden. Hvis nogen opdager eller gætter det seed, kan de genskabe hver værdi, din generator nogensinde har produceret.

Hvor perfekt tilfældig er en UUID

Perfekt tilfældighed findes ikke – ligesom en perfekt terning ikke findes, eller et perfekt tilfældigt terningekast ikke findes. Hver fysisk eller digital proces følger nogle underliggende regler. Alligevel har matematikere og ingeniører brugt årtier på at designe algoritmer, der kommer så tæt som muligt på ægte tilfældighed. Når Splync skaber en ny version-4 UUID, vælger den ikke bare "tilfældige tal" som at kaste terninger. Den beder operativsystemet om små spor af uforudsigelighed – for eksempel det præcise øjeblik, din CPU afslutter en opgave, svag elektrisk støj i hardware eller baggrundsfluktuationer i hukommelsen. Disse fragmenter af entropi samles og blandes til 128 bits data – en lang række af ettaller og nuller. Resultatet er en kode, der er praktisk talt umulig at gætte eller gentage for app-brugere eller potentielle ondsindede angribere.

Splyncs dobbelt-identifikator tilgang

Splync bruger UUID'er til følsomme identifikatorer såsom bruger-ID'er og projekt-ID'er, fordi de er ekstremt tilfældige og sikre. Samtidig konverterer Splync disse UUID'er til auto-incrementerede heltal på sin server for hurtigere søgning og analyser på store datasæt. Denne dobbelt-identifikator tilgang balancerer sikkerhed og bekvemmelighed – ekstern privatliv med intern ydeevne. Splyncs mål er at være en stressfri, enkel og sikker budgetsporingsapp. Bag den synlige brugerflade fortsætter vi med at forfine vores arkitektur for at holde tingene glidende, sikre og stille smarte.