Deze website is automatisch in meerdere talen vertaald met software ontwikkeld door Kohei Koyanagi. Raadpleeg het originele artikel in Engels voor de meest nauwkeurige informatie.

Splync's Dual Identifier-aanpak: UUID en Auto-Incremented Int

Splync gebruikt twee ID's voor gevoelige gegevens

In de database van Splync wordt elke gebruiker — en elk project — geïdentificeerd door twee verschillende ID's: een UUID en een auto-incremented integer. De auto-incremented integer is degene die de meeste mensen kennen — het is gewoon een teller: 1, 2, 3, enzovoort. Splync gebruikt deze integers in de serverdatabase om bijna elke tabel te organiseren omdat ze eenvoudig, snel en efficiënt zijn voor joins. We stellen deze interne nummers echter nooit bloot aan de app. Als je bijvoorbeeld de 42e gebruiker zou zijn die zich aanmeldt, zou je interne ID in de database 42 zijn. Maar je iOS-app ziet nooit “42.” In plaats daarvan gebruikt de app een UUID om je te vertegenwoordigen. We passen dezelfde aanpak toe op projecten — een project-ID kan "7" zijn in de database, maar de app verwijst er altijd naar met een lange UUID.

Wat is een UUID

UUID staat voor Universally Unique Identifier. Splync gebruikt versie 4, variant 1 UUID's, in overeenstemming met RFC 4122 — een van de meest geaccepteerde standaarden. Het is een willekeurig gegenereerde reeks, die eruitziet als 949ca11c-a6ed-48a3-b40a-fa9727494917. Een UUID wordt meestal weergegeven als 32 hexadecimale tekens verdeeld in vijf secties gescheiden door streepjes. Het is ontworpen om wereldwijd uniek te zijn, wat betekent dat het niet zal botsen, zelfs niet tussen verschillende servers of databases. Wiskundig gezien zijn er ongeveer 16^32 = 2^128 mogelijke combinaties. Maar omdat zes bits gereserveerd zijn om de variant en versie aan te geven, is het totale aantal verschillende versie-4, variant-1 UUID's ongeveer 2^122, of ongeveer 5,3 x 10^36 — een astronomisch groot aantal dat praktische uniciteit garandeert.

Hoe klein is 1 / 5.300.000.000.000.000.000.000.000.000.000.000.000

Elke paar UUIDv4's heeft ongeveer 1 op 5,3 × 10^36 kans om overeen te komen. Dat getal is zo klein dat het bijna niet te bevatten is voor de menselijke verbeelding. Stel je voor dat je 47 dobbelstenen tegelijk gooit. De kans om allemaal enen te krijgen — elke dobbelsteen die “1” toont — is ongeveer 1 op 6^47, of ruwweg 1 op 3,7 × 10^36. Dat is dezelfde orde van grootte als een UUID-botsing. Stel je nu voor dat elke persoon op aarde — ongeveer acht miljard van ons — die 47 dobbelstenen elke milliseconde gedurende een biljoen jaar gooit. Dat zijn ongeveer 2,5 × 10^32 pogingen in totaal. Zelfs na al die tijd zou de kans dat iemand, ergens, 47 enen tegelijk krijgt nog steeds slechts één op tienduizend zijn. Dat is hoe onwaarschijnlijk het is dat twee UUIDv4's botsen. Het is niet “zeldzaam.” Het is kosmisch absurd — het soort toeval dat wiskundigen hun koffie zou doen laten vallen en het universum zou laten controleren op fouten.

Is het makkelijk om een UUID te genereren

Op het eerste gezicht lijkt het genereren van een UUID eenvoudig — uiteindelijk is het gewoon een willekeurig uitziende alfanumerieke reeks. Maar probeer er zelf eens een te schrijven met pen en papier. Je kunt 36 tekens opschrijven, zeker, maar als je de oefening duizenden keren herhaalt, zullen duidelijke patronen opduiken. Misschien geef je de voorkeur aan bepaalde cijfers zoals 3 of 8, en gebruik je zelden letters zoals x. Een computer kan die vooroordelen onmiddellijk detecteren. Een kwaadwillende hacker zou je gewoonten kunnen analyseren en je “willekeurige” geheime reeks binnen een dag kunnen verkleinen. Stel dat je ook een computer gebruikt en rand() aanroept, de klassieke random functie, om elk cijfer te genereren. Dat is beter — maar niet goed genoeg. Veel "willekeurige" getalgeneratoren in gangbare programmeeromgevingen zijn pseudorandom, wat betekent dat ze een voorspelbare wiskundige reeks volgen vanaf een interne seed, die meestal gebaseerd is op de systeemtijd. Als iemand die seed ontdekt of raadt, kan hij elke waarde die je generator ooit heeft geproduceerd reproduceren.

Hoe perfect willekeurig is een UUID

Perfecte willekeur bestaat eigenlijk niet — net zoals een perfecte dobbelsteen niet bestaat, of een perfecte willekeurige worp met de dobbelstenen niet bestaat. Elk fysiek of digitaal proces volgt enkele onderliggende regels. Toch hebben wiskundigen en ingenieurs tientallen jaren besteed aan het ontwerpen van algoritmen die zo dicht mogelijk bij echte willekeur komen. Wanneer Splync een nieuwe versie-4 UUID aanmaakt, kiest het niet simpelweg “willekeurig nummers” zoals bij het gooien van dobbelstenen. Het vraagt het besturingssysteem om kleine sporen van onvoorspelbaarheid — bijvoorbeeld het precieze moment waarop je CPU een taak voltooit, zwak elektrisch geluid binnen de hardware, of achtergrondtijdfluctuaties in het geheugen. Deze fragmenten van entropie worden verzameld en gemengd in 128 bits aan data — een lange reeks van enen en nullen. Het resultaat is een code die praktisch onmogelijk te raden of te herhalen is voor de app-gebruikers of potentiële kwaadwillende aanvallers.

Splync's Dual-Identifier-aanpak

Splync gebruikt UUID's voor gevoelige ID's zoals gebruikers-ID's en project-ID's, omdat ze extreem willekeurig en veilig zijn. Tegelijkertijd zet Splync die UUID's om in auto-incremented integers voor snellere zoekopdrachten en analyses van grote datasets op zijn server. Deze dual-identifier-aanpak vindt een balans tussen veiligheid en gemak — externe privacy met interne prestaties. Splync's doel is een stressvrije, eenvoudige en veilige app voor het bijhouden van budgetten. Achter de zichtbare UI blijven we onze architectuur verfijnen om alles soepel, veilig en stilletjes slim te houden.