A Splync két azonosítót használ érzékeny ID-khez
A Splync adatbázisában minden felhasználót és projektet két különböző ID azonosít: egy UUID és egy automatikusan növekvő szám.
Az automatikusan növekvő szám a legtöbb ember számára ismerős — ez csak egy számláló: 1, 2, 3, és így tovább. A Splync ezeket a számokat használja a szerver adatbázisában, hogy szinte minden táblát rendezzen, mivel egyszerűek, gyorsak és hatékonyak a kapcsolásokhoz. Ezeket a belső számokat azonban soha nem tesszük elérhetővé az alkalmazás számára. Például, ha Ön lenne a 42. felhasználó, aki regisztrál, a belső ID az adatbázisban 42 lenne. De az iOS alkalmazás soha nem látja a „42”-t. Ehelyett az alkalmazás egy UUID-t használ, hogy képviselje Önt. Ugyanezt az elvet alkalmazzuk a projektekre is — egy projekt ID lehet a „7” az adatbázisban, de az alkalmazás mindig egy hosszú UUID-t használ.
Mi az a UUID
A UUID az Universally Unique Identifier rövidítése. A Splync 4-es verziójú, 1-es változatú UUID-ket használ, amelyek megfelelnek az RFC 4122 követelményeknek — ez az egyik legszélesebb körben alkalmazott szabvány. Ez egy véletlenszerűen generált karakterlánc, amely így néz ki: 949ca11c-a6ed-48a3-b40a-fa9727494917. Egy UUID tipikusan 32 hexadecimális karakterből áll, öt szakaszra osztva, kötőjelekkel elválasztva. Globális egyediségre tervezték, ami azt jelenti, hogy még különböző szerverek vagy adatbázisok között sem ütközik. Matematikailag körülbelül 16^32 = 2^128 lehetséges kombináció van. Azonban mivel hat bitet a változat és verzió jelölésére tartanak fenn, a 4-es verziójú, 1-es változatú UUID-k összes kombinációja körülbelül 2^122, vagyis körülbelül 5,3 x 10^36 — egy csillagászatilag nagy szám, ami biztosítja a gyakorlati egyediséget.
Mennyire kicsi az 1 / 5,300,000,000,000,000,000,000,000,000,000,000,000
Minden UUIDv4 párnak körülbelül 1 a 5,3 × 10^36-ból az esélye, hogy megegyeznek. Ez a szám annyira kicsi, hogy szinte elképzelhetetlen az emberi elmének. Képzelje el, hogy egyszerre 47 kockával dobunk. Az esély, hogy mindegyik kocka „1”-et mutat, körülbelül 1 a 6^47-ből, vagyis körülbelül 1 a 3,7 × 10^36-ból. Ez ugyanaz a nagyságrend, mint egy UUID ütközés. Most képzelje el, hogy minden ember a Földön — körülbelül nyolc milliárdan vagyunk — minden ezredmásodpercben dobja ezeket a 47 kockát egy trillió éven át. Ez körülbelül 2,5 × 10^32 összes próbálkozást jelent. Még mindezek után is, annak az esélye, hogy valaki, valahol egyszerre 47 egyest kap, még mindig csak egy a tízezerből. Ez mutatja, mennyire valószínűtlen két UUIDv4 ütközése. Ez nem „ritka”, hanem kozmikusan abszurd — olyan véletlen, ami miatt a matematikusok leejtenék a kávéjukat és ellenőriznék az univerzumot hibák után.
Könnyű egy UUID-t generálni
Első pillantásra az UUID generálása egyszerűnek tűnhet — végül is, ez csak egy véletlenszerűnek tűnő alfanumerikus karakterlánc. De próbáljon meg egyet papíron és tollal megírni. Lehet, hogy leír 36 karaktert, de ha több ezer alkalommal megismétli a gyakorlatot, egyértelmű mintázatok fognak megjelenni. Talán bizonyos számokat, mint a 3 vagy a 8, előnyben részesít, és ritkán használ betűket, mint az x. Egy számítógép azonnal észlelné ezeket az elfogultságokat. Egy rosszindulatú hacker elemzi a szokásait, és egy napon belül szűkítheti az „véletlenszerű” titkos karakterláncát. Mi van akkor, ha egy számítógépet is használ, és a rand() függvényt hívja, hogy minden számjegyet generáljon. Ez jobb — de nem elég jó. Sok „véletlen” számgenerátor a közös programozási környezetekben álvéletlen, ami azt jelenti, hogy követnek egy kiszámítható matematikai sorozatot, amely egy belső magból indul, amely jellemzően a rendszeridőn alapul. Ha valaki felfedezi vagy kitalálja ezt a magot, reprodukálni tudja minden értéket, amit a generátor valaha is előállított.
Mennyire tökéletesen véletlenszerű egy UUID
Tökéletes véletlenség nem létezik — ahogy tökéletes kocka sem létezik, vagy tökéletesen véletlenszerű kockadobás sem. Minden fizikai vagy digitális folyamat követ valamilyen alapvető szabályokat. Ennek ellenére a matematikusok és mérnökök évtizedeken át dolgoztak olyan algoritmusok tervezésén, amelyek a lehető legközelebb állnak az igazi véletlenséghez. Amikor a Splync létrehoz egy új 4-es verziójú UUID-t, nem egyszerűen „véletlenszerűen választ számokat”, mint a kockadobás. Az operációs rendszertől kér apró nyomokat az előrejelezhetetlenséghez — például a pontos pillanatot, amikor a CPU befejez egy feladatot, halvány elektromos zajt a hardver belsejében, vagy a memória háttéridőzítésének ingadozásait. Ezeket az entrópia töredékeket összegyűjtik és 128 bitnyi adatba keverik — egy hosszú egyesekből és nullákból álló sorozatba. Az eredmény egy olyan kód, amely gyakorlatilag lehetetlen kitalálni vagy megismételni az alkalmazás felhasználói vagy potenciális rosszindulatú támadók számára.
A Splync kettős azonosító megközelítése
A Splync UUID-ket használ érzékeny azonosítókhoz, mint például a felhasználói és projektazonosítók, mert rendkívül véletlenszerűek és biztonságosak.
Ugyanakkor a szerverén belül a Splync ezeket az UUID-ket automatikusan növekvő számokká alakítja, hogy gyorsabb keresést és elemzést végezzen a nagy adathalmazokon. Ez a kettős azonosító megközelítés egyensúlyt teremt a biztonság és a kényelem között — külső adatvédelem belső teljesítménnyel. A Splync célja, hogy stresszmentes, egyszerű és biztonságos költségkövető alkalmazás legyen. A látható felhasználói felület mögött folyamatosan finomítjuk az architektúránkat, hogy az dolgok simán, biztonságosan és csendesen okosak maradjanak.