Splync använder två identifierare för känslig information
I Splyncs databas identifieras varje användare och projekt med två olika ID: en UUID och ett auto-inkrementerat heltal. Det auto-inkrementerade heltalet är det de flesta känner till — det är bara en räknare: 1, 2, 3 och så vidare. Splync använder dessa heltal i serverns databas för att organisera nästan alla tabeller eftersom de är enkla, snabba och effektiva för kopplingar. Dock visar vi aldrig dessa interna nummer i appen. Till exempel, om du råkar vara den 42:a användaren som anmält dig, skulle ditt interna ID i databasen vara 42. Men iOS-appen ser aldrig "42". Istället använder appen en UUID för att representera dig. Vi tillämpar samma metod på projekt — ett projekt-ID kan vara "7" i databasen, men appen refererar alltid till det med en lång UUID.
Vad är en UUID
UUID står för Universellt Unik Identifierare. Splync använder version 4, variant 1 UUID:er, som följer RFC 4122 — en av de mest använda standarderna. Det är en slumpmässigt genererad sträng, som ser ut som 949ca11c-a6ed-48a3-b40a-fa9727494917. En UUID skrivs vanligtvis som 32 hexadecimala tecken uppdelade i fem sektioner separerade med bindestreck. Den är designad för att vara globalt unik, vilket innebär att den inte kolliderar även mellan olika servrar eller databaser. Matematiskt finns det cirka 16^32 = 2^128 möjliga kombinationer. Eftersom sex bitar är reserverade för att ange variant och version, är det totala antalet distinkta version 4, variant 1 UUID:er ungefär 2^122, eller cirka 5,3 x 10^36 — ett astronomiskt stort antal som säkerställer praktisk unikhet.
Hur liten är 1 / 5 300 000 000 000 000 000 000 000 000 000 000 000
Varje par av UUIDv4 har ungefär en chans på 5,3 × 10^36 att matcha. Det numret är så litet att det nästan inte existerar i den mänskliga fantasin. För att föreställa sig det, tänk dig att rulla 47 tärningar samtidigt. Oddsen för att få alla ettor — att varje tärning visar "1" — är ungefär 1 på 6^47, eller cirka 1 på 3,7 × 10^36. Det är samma storleksordning som en UUID-kollision. Föreställ dig nu att varje person på jorden — cirka åtta miljarder av oss — rullar de där 47 tärningarna varje millisekund i en biljon år. Det är ungefär 2,5 × 10^32 totala försök. Även efter allt detta skulle chansen för att någon, någonstans, skulle få 47 ettor på en gång fortfarande bara vara en på tiotusen. Så osannolikt är det för två UUIDv4 att kollidera. Det är inte "sällsynt." Det är kosmiskt absurt — den typ av slump som skulle få matematiker att tappa kaffet och kontrollera universum för buggar.
Är det lätt att generera en UUID
Vid första anblick kan det verka enkelt att generera en UUID — det är trots allt bara en slumpmässigt utseende alfanumerisk sträng. Men försök att skriva en själv med penna och papper. Du kan skriva ner 36 tecken, men om du upprepar övningen tusentals gånger kommer tydliga mönster att dyka upp. Kanske föredrar du vissa siffror som 3 eller 8, och använder sällan bokstäver som x. En dator kan upptäcka dessa fördomar direkt. En illvillig hackare skulle kunna analysera dina vanor och begränsa din "slumpmässiga" hemliga sträng inom en dag. Om du också använder en dator och anropar rand(), den klassiska slumpfunktionen, för att generera varje siffra. Det är bättre — men inte tillräckligt bra. Många "slumpmässiga" talgeneratorer i vanliga programmeringsmiljöer är pseudoslumpmässiga, vilket innebär att de följer en förutsägbar matematisk sekvens som börjar från ett internt frö, som vanligtvis är baserat på systemtiden. Om någon upptäcker eller gissar det fröet kan de återskapa varje värde din generator någonsin producerat.
Hur perfekt slumpmässig är en UUID
Perfekt slumpmässighet finns egentligen inte — precis som en perfekt tärning inte finns, eller ett perfekt slumpmässigt kast av tärningar inte finns. Varje fysisk eller digital process följer vissa underliggande regler. Ändå har matematiker och ingenjörer spenderat decennier på att designa algoritmer som kommer så nära sann slumpmässighet som möjligt. När Splync skapar en ny version-4 UUID, "väljer" den inte helt enkelt nummer slumpmässigt som att rulla tärningar. Den ber operativsystemet om små spår av oförutsägbarhet — till exempel det exakta ögonblicket din CPU avslutar en uppgift, svag elektrisk brus inuti hårdvaran eller bakgrundstidsfluktuationer i minnet. Dessa fragment av entropi samlas och blandas till 128 bitar av data — en lång sekvens av ettor och nollor. Resultatet är en kod som är praktiskt taget omöjlig att gissa eller upprepa för appanvändare eller potentiella illvilliga angripare.
Splyncs dubbla identifieringsmetod
Splync använder UUID:er för känsliga identifierare som användar-ID och projekt-ID, eftersom de är extremt slumpmässiga och säkra. Samtidigt konverterar Splync dessa UUID:er till auto-inkrementerade heltal i sin server för snabbare sökningar och analyser av stora datamängder. Denna dubbelidentifieringsmetod balanserar säkerhet och bekvämlighet — extern integritet med intern prestanda. Splyncs mål är att vara en stressfri, enkel och säker app för budgetuppföljning. Bakom det synliga användargränssnittet fortsätter vi att förfina vår arkitektur för att hålla saker smidiga, säkra och tyst smarta.