Splync käyttää kahta tunnistetta herkille tunnuksille
Splync:n tietokannassa jokainen käyttäjä ja projekti tunnistetaan kahdella eri tunnisteella: UUID:lla ja automaattisesti kasvavalla kokonaisluvulla. Automatisoitu kokonaisluku on se, johon useimmat ovat tottuneet – se on vain laskuri: 1, 2, 3 ja niin edelleen. Splync käyttää näitä lukuja palvelimen tietokannan sisällä lähes kaikkien taulukoiden järjestämiseen, koska ne ovat yksinkertaisia, nopeita ja tehokkaita yhdistämisessä. Emme kuitenkaan koskaan näytä näitä sisäisiä numeroita sovelluksessa. Esimerkiksi, jos olet 42. käyttäjä, joka liittyy, sisäinen tunnisteesi tietokannassa olisi 42. Mutta iOS-sovelluksesi ei koskaan näe "42". Sen sijaan sovellus käyttää UUID:tä edustamaan sinua. Sovellamme samaa lähestymistapaa projekteihin – projektin tunniste saattaa olla "7" tietokannassa, mutta sovellus viittaa siihen aina pitkällä UUID:llä.
Mikä on UUID
UUID tarkoittaa maailmanlaajuisesti ainutlaatuista tunnistetta. Splync käyttää version 4, variantin 1 UUID:tä, joka on RFC 4122:n mukainen – yksi laajimmin käytössä olevista standardeista. Se on satunnaisesti luotu merkkijono, joka näyttää tältä: 949ca11c-a6ed-48a3-b40a-fa9727494917. UUID kirjoitetaan yleensä 32 heksadesimaalisena merkkinä, jotka on jaettu viiteen osaan yhdysmerkein erotettuna. Se on suunniteltu olemaan maailmanlaajuisesti ainutlaatuinen, mikä tarkoittaa, että se ei törmää edes eri palvelimien tai tietokantojen välillä. Matemaattisesti mahdollisia yhdistelmiä on noin 16^32 = 2^128. Koska kuusi bittiä on varattu variantille ja versiolle, erillisten version-4, variantti-1 UUID:ien kokonaismäärä on noin 2^122 eli noin 5,3 x 10^36 – astronomisen suuri luku, joka takaa käytännön ainutlaatuisuuden.
Kuinka pieni on 1 / 5 300 000 000 000 000 000 000 000 000 000 000 000
Kahden UUIDv4:n osumatodennäköisyys on noin 1 5,3 × 10^36:sta. Se luku on niin pieni, ettei sitä voi oikeastaan edes kuvitella. Kuvittele heittäväsi 47 noppaa kerralla. Todennäköisyys saada kaikki ykköset — jokainen noppa näyttää "1" — on noin 1 6^47:stä, eli noin 1 3,7 × 10^36:sta. Se on samaa suuruusluokkaa kuin UUID-törmäys. Kuvittele nyt, että jokainen maapallon ihminen — noin kahdeksan miljardia meistä — heittäisi nuo 47 noppaa joka millisekunti biljoonan vuoden ajan. Tämä on noin 2,5 × 10^32 yritystä. Tämän jälkeenkin jollakin olisi silti vain yksi kymmenestätuhannesta mahdollisuus saada 47 ykköstä kerralla. Näin epätodennäköistä on, että kaksi UUIDv4:ää törmäisi. Se ei ole "harvinaista". Se on kosmisesti absurdia — sellainen sattuma, joka saisi matemaatikot pudottamaan kahvinsa ja tarkistamaan universumista virheitä.
Onko UUID:n luominen helppoa
Ensi silmäyksellä UUID:n luominen saattaa vaikuttaa helpolta — onhan se vain satunnaisen näköinen aakkosnumeerinen merkkijono. Mutta yritäpä kirjoittaa yksi käsin paperille. Voit kyllä kirjoittaa 36 merkkiä, mutta jos toistat harjoituksen tuhansia kertoja, selvät mallit alkavat näkyä. Ehkä suosit tiettyjä numeroita, kuten 3 tai 8, ja käytät harvoin kirjaimia kuten x. Tietokone voi havaita nämä vinoumat heti. Haitallinen hakkeri voisi analysoida tavat ja kaventaa "satunnaisen" salaisen merkkijonosi päivän aikana. Entä jos käytät tietokonetta ja kutsut rand() -toimintoa, klassista satunnaistoimintoa, joka luo jokaisen numeron? Se on parempi — muttei tarpeeksi hyvä. Monet "satunnaiset" lukugeneraattorit yleisissä ohjelmointiympäristöissä ovat pseudorandomia, mikä tarkoittaa, että ne seuraavat ennustettavaa matemaattista sekvenssiä, joka alkaa sisäisestä siemenestä, joka perustuu tyypillisesti järjestelmän aikaan. Jos joku löytää tai arvaa sen siemenen, hän voi toistaa kaikki arvosi, jotka generaattorisi on koskaan tuottanut.
Kuinka täydellisen satunnainen UUID on
Täydellistä satunnaisuutta ei oikeastaan ole olemassa — aivan kuten täydellistä noppaa tai täydellistä satunnaista noppien heittoa ei ole. Jokainen fyysinen tai digitaalinen prosessi noudattaa joitakin taustalla olevia sääntöjä. Silti matemaatikot ja insinöörit ovat vuosikymmeniä kehittäneet algoritmeja, jotka tulevat mahdollisimman lähelle todellista satunnaisuutta. Kun Splync luo uuden version-4 UUID:n, se ei yksinkertaisesti "valitse numeroita satunnaisesti" kuten noppia heitettäessä. Se pyytää käyttöjärjestelmältä pieniä jälkiä arvaamattomuudesta — esimerkiksi, milloin prosessori tarkalleen ottaen suorittaa tehtävän, laitteiston sisäinen heikko sähköinen kohina tai taustalla tapahtuvat aikavaihtelut muistissa. Nämä entropian palaset kerätään ja sekoitetaan 128 bittiin dataa — pitkä jono ykkösiä ja nollia. Tulos on koodi, jota on käytännössä mahdotonta arvata tai toistaa sovelluksen käyttäjien tai mahdollisten haitallisten hyökkääjien toimesta.
Splync:n kaksoistunnistejärjestelmä
Splync käyttää UUID:tä herkille tunnisteille, kuten käyttäjä- ja projektitunnuksille, koska ne ovat äärimmäisen satunnaisia ja turvallisia. Samalla Splync muuntaa palvelimellaan nämä UUID:t automaattisesti kasvaviksi kokonaisluvuiksi nopeampaa hakua ja analytiikkaa varten suurissa tietokannoissa. Tämä kaksoistunnistejärjestelmä tasapainottaa turvallisuuden ja helppokäyttöisyyden – ulkoinen yksityisyys yhdistettynä sisäiseen suorituskykyyn. Splync:n tavoite on olla stressitön, yksinkertainen ja turvallinen budjetointisovellus. Näkyvän käyttöliittymän takana me jatkamme arkkitehtuurimme hiomista pitääksemme asiat sujuvina, turvallisina ja hiljaisen älykkäinä.