UUID-generaattori – Luo yksilöllisiä tunnisteita verkossa

Mikä on UUID?

UUID (Universally Unique Identifier) on 128-bittinen tunniste, jota käytetään tietojärjestelmissä tietojen yksilöimiseen. UUID on standardoitu RFC 4122 -standardin mukaisesti, ja sen valtava entropia takaa käytännössä nollakollisiotodennäköisyyden – tämä tarkoittaa, että kaksi itsenäisesti generoituja UUID:itä ovat lähes varmasti yksilöllisiä.

UUID:llä on vakiomuoto: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, missä jokainen x on heksadesimaaliluku (0-9, a-f), M osoittaa UUID:n version ja N osoittaa variantin.

UUID-versiot

UUID v1 (Aikaleima + MAC-osoite)

UUID v1 perustuu nykyiseen aikaleimaan ja satunnaiseen arvoon (selaimessa MAC-osoitteen sijaan). Se käyttää 100 nanosekunnin aikavälejä alkaen 15. lokakuuta 1582 (gregoriaaninen kalenteri).

Käyttö:

  • Tilanteet, joissa tarvitaan UUID:n kronologista järjestystä
  • Virheenkorjaus ja lokitus (UUID sisältää tiedon luontiajasta)
  • Hajautetut järjestelmät aikataulun synkronoinnilla

Esimerkki: 6ba7b810-9dad-11d1-80b4-00c04fd430c8

Edut:

  • UUID:t voidaan järjestää kronologisesti luomisajan mukaan
  • Hyödyllinen auditoinnissa ja virheenkorjauksessa
  • Sisältää aikaleimatiedon

Haitat:

  • Mahdollinen tietoturvariski – sisältää aikaleiman
  • Selaimessa ei sisällä todellista MAC-osoitetta (korvattu satunnaisella arvolla)
  • Huono DB-lokaliteetti (aikaleima on matala-asteisissa biteissä)

UUID v3 (MD5-tiiviste)

UUID v3 luodaan käyttämällä MD5-tiivistettä nimiavaruuden UUID:stä ja nimestä. Deterministinen – sama nimiavaruus + nimi luovat aina saman UUID:n.

Käyttö:

  • URL-osoitteiden, DNS-nimien tai muiden tunnisteiden muuntaminen UUID:ksi
  • Tilanteet, joissa tarvitaan toistettavissa olevaa UUID:tä
  • Kartoitus eri tunnistusjärjestelmien välillä

Esimerkki: a3bb189e-8bf9-3888-9912-ace4e6543002

Edut:

  • Deterministinen (sama syöte = sama tuloste)
  • Ihanteellinen tunnettujen tunnisteiden muuntamiseen
  • Ei kollisiota eri syötteille

Haitat:

  • MD5 on vanhentunut algoritmi (suosi v5:tä)
  • Vaatii nimiavaruuden ja nimen
  • Alkuperäistä syötettä ei voi palauttaa

UUID v4 (Satunnainen) - SUOSITELTU

Yleisimmin käytetty UUID-versio. UUID v4 generoidaan puhtaasti satunnaisesti käyttämällä kryptografisesti turvallista satunnaislukugeneraattoria (crypto.getRandomValues()).

Käyttö:

  • Tietokantojen perusavaimet
  • Istunnon tunnisteet (session IDs)
  • Yksilölliset tiedostonimet
  • API-tunnukset
  • Yleiskäyttö, kun tarvitaan taatusti yksilöllistä tunnusta

Esimerkki: f47ac10b-58cc-4372-a567-0e02b2c3d479

Edut:

  • Suurin entropia ja turvallisuus
  • Ei riippuvuutta ajasta tai järjestelmäparametreista
  • Yksinkertaisin toteutus

Kollisiotodennäköisyys: Jos generoidaan miljardi UUID:tä sekunnissa 100 vuoden ajan, kollision todennäköisyys on noin 0,00000006%.

UUID v5 (SHA-1-tiiviste)

UUID v5 on sama kuin v3, mutta se käyttää SHA-1:tä MD5:n sijaan. Nykyaikaisempi ja turvallisempi vaihtoehto v3:lle.

Käyttö:

  • Sama kuin v3, mutta paremmalla turvallisuudella
  • Suositeltavampi kuin v3 uusissa projekteissa
  • UUID:n generointi URL-osoitteista, DNS-nimistä, OID:eistä, X.500 DN:istä

Esimerkki: 886313e1-3b8a-5372-9b90-0c9aee199e5d

Edut:

  • Deterministinen
  • SHA-1 on vankempi kuin MD5
  • Soveltuu järjestelmien väliseen kartoitukseen

Haitat:

  • SHA-1:tä pidetään myös vanhentuneena (mutta silti turvallisempi kuin MD5)
  • Vaatii nimiavaruuden ja nimen

UUID v6 (Järjestetty aikaleima)

UUID v6 on parannettu versio v1:stä, jossa aikabittejä on järjestetty uudelleen paremman DB-indeksoinnin vuoksi. Suunniteltu ratkaisemaan lokaliteettiongelmia tietokannoissa.

Käyttö:

  • Tietokantojen perusavaimet aikajärjestyksellä
  • Järjestelmät, jotka vaativat kronologista järjestystä ja DB-suorituskykyä
  • Nykyaikaisempi vaihtoehto v1:lle

Esimerkki: 1ec9414c-232a-6b00-b3c8-9e6bdeced846

Edut:

  • Parempi DB-lokaliteetti kuin v1 (aikaleima korkea-asteisissa biteissä)
  • Kronologinen järjestys
  • Yhteensopiva UUID-standardin kanssa

Haitat:

  • Harvemmin käytetty kuin v1/v4
  • Sisältää edelleen aikatietoja (tietoturvariski)

UUID v7 (Unix-aikaleima)

UUID v7 käyttää Unix-aikaleimaa (millisekunteina vuodesta 1970) + satunnaisia bittejä. Uusin UUID-versio parhaalla DB-lokaliteetilla.

Käyttö:

  • Nykyaikaiset tietokantojen perusavaimet
  • Järjestelmät, jotka vaativat suorituskykyä + aikajärjestystä
  • Korvaaja v1/v6:lle uusissa projekteissa

Esimerkki: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f

Edut:

  • Paras DB-lokaliteetti kaikista versioista
  • Unix-aikaleima on standardi
  • Yhdistää satunnaisuuden ja aikajärjestyksen edut

Haitat:

  • Suhteellisen uusi spesifikaatio (RFC 4122bis)
  • Vähemmän tuettu vanhemmissa järjestelmissä

Mikä UUID-versio kannattaa valita?

Päätösohje

Tarvitsetko maksimaalista turvallisuutta ja satunnaisuutta? → Käytä UUID v4 (yleisin valinta)

Tarvitsetko aikajärjestystä ja DB-suorituskykyä? → Käytä UUID v7 (moderni) tai UUID v6 (standardi)

Tarvitsetko toistettavissa olevia UUID:itä olemassa olevista tunnisteista? → Käytä UUID v5 (SHA-1) tai UUID v3 (MD5, vanhentunut)

Tarvitsetko aikaleiman ja auditointipolun? → Käytä UUID v1 (vanhentunut, heikompi DB-suorituskyky)

Tietokannat

Uusiin projekteihin: UUID v7 tai v4

  • v7 on ihanteellinen aikajärjestykseen + suorituskykyyn
  • v4 maksimaaliseen satunnaisuuteen ilman aikatietoja

Vanhoihin järjestelmiin: UUID v1 tai v6

  • v6:lla on parempi DB-lokaliteetti kuin v1:llä
  • v1 on laajasti tuettu

UUID:n edut perusavaimena:

  • Globaali yksilöllisyys – Voit yhdistää tietoja eri tietokannoista ilman konflikteja
  • Turvallisuus – Toisin kuin peräkkäisiä tunnuksia (1, 2, 3…) ei voi arvata seuraavia arvoja
  • Hajautetut järjestelmät – UUID:itä voidaan generoida itsenäisesti useilla palvelimilla ilman koordinointia
  • Tietokantojen yhdistäminen – Kahden tietokannan yhdistämisessä ei synny konflikteja

Haitat:

  • Suurempi koko (16 tavua vs. 4-8 tavua kokonaisluvulle)
  • Hitaampi indeksointi joissakin tietokannoissa (käytä v6/v7 parempaan suorituskykyyn)
  • Vähemmän luettavissa ihmiselle

API:t ja verkkopalvelut

  • REST API – Yksilölliset tunnisteet resursseille
  • GraphQL – Globaalit tunnisteet solmuille
  • Webhookit – Pyyntöjen ja vastausten seuranta
  • Tunnukset – Istunnon tunnisteet, päivitystunnukset

Tiedostot ja tallennustilat

  • Tiedostonimet – Kollision estäminen latauksen yhteydessä
  • S3/Pilvitallennus – Yksilölliset polut objekteille
  • Välimuistin avaimet – Tunnisteet välimuistijärjestelmissä

Frontend-sovellukset

  • React/Vue-komponentit – Yksilölliset avaimet listoille
  • Väliaikaiset tunnisteet – Tunnisteet ennen tallennusta tietokantaan
  • Paikallinen tallennustila – Avaimet tallennetuille tiedoille
  • Offline-first-sovellukset – Tunnisteiden generointi ilman palvelinyhteyttä

Generaattorin edistyneet toiminnot

UUID:n generointi omalla ajalla

Aikaan perustuvissa versioissa (v1, v6, v7) voit valita minkä tahansa aikaleiman päivämäärä- ja aikavalitsimen avulla. Tämä on hyödyllistä:

Testaukseen:

  • Menneisyydessä luotujen UUID:iden simulointi
  • Aikajärjestyksen testaus tietokannoissa
  • UUID:iden toistaminen virheenkorjausta varten

Tietojen siirtoon:

  • UUID:iden generointi historiallisilla aikaleimoilla
  • Tietojen täyttäminen oikeilla aikaleima-arvoilla
  • Tietojen tuonti eri ajanjaksoilta

Auditoinnin ja vaatimustenmukaisuuden varmistamiseen:

  • UUID:iden rekonstruointi tietueen luomisajan mukaan
  • Tunnisteiden retroaktiivinen generointi

Esimerkkikäyttö:

  1. Valitse versio v1, v6 tai v7
  2. Aseta päivämäärä ja aika päivämäärä- ja aikavalitsimen avulla
  3. Generoi UUID omalla aikaleimallasi

Tiivisteeseen perustuvat UUID:t (v3, v5)

Deterministisiin UUID:ihin voit käyttää versioita v3 (MD5) tai v5 (SHA-1):

Käyttö:

  1. Valitse nimiavaruus tunnisteen tyypin mukaan
  2. Anna nimi/arvo
  3. Generoi UUID

Esimerkit:

NimiavaruusNimi (syöte)Käyttö
DNSexample.comVerkkotunnuksen muuntaminen UUID:ksi
DNSgoogle.comJokaisella verkkosivulla on yksilöllinen UUID
URLhttps://example.com/pageURL-osoitteen muuntaminen UUID:ksi
URLhttps://api.example.com/users/123API-päätepiste UUID:ksi
OID1.3.6.1.4.1.343Objektitunniste UUID:ksi
X.500CN=John Doe,O=CompanyDistinguished Name UUID:ksi

Tärkeät ominaisuudet:

  • Deterministinen: Sama syöte = aina sama UUID
  • Toistettavissa: Voit luoda UUID:n uudelleen milloin tahansa
  • Yhdenmukainen: Sama UUID eri järjestelmissä
  • Ei voida dekoodata: UUID:stä ei voi palauttaa alkuperäistä nimeä
  • ℹ️ Yksi UUID: V3/v5:lle generoidaan aina vain yksi UUID (sama syöte = sama tuloste)

Käytännön käyttö:

// Esimerkki: URL:n muuntaminen UUID v5:ksi
Namespace: URL
Nimi: https://example.com/api/users/123
Tulos: 886313e1-3b8a-5372-9b90-0c9aee199e5d

// Sama syöte = aina sama UUID
Namespace: DNS
Nimi: google.com
Tulos: aina sama UUID google.com:lle

Kuinka käyttää UUID:tä turvallisesti?

Kryptografinen turvallisuus

Generaattorimme käyttää crypto.getRandomValues() -funktiota, joka on kryptografisesti turvallinen satunnaislukugeneraattori. Toisin kuin Math.random(), joka on ennustettavissa eikä sovellu turvallisuustarkoituksiin, crypto.getRandomValues() tarjoaa todellisen entropian, joka soveltuu:

  • Turvallisuustunnusten generointiin
  • Istunnon tunnisteisiin
  • API-avaimiin
  • Kryptografisiin sovelluksiin

UUID-versioiden vertailu

VersioPerustaKollisiotAikajärjestysDB-suorituskykyKäyttö
v1Aikaleima + MACMatala✅ Kyllä❌ HuonompiVanhentunut, auditointi
v3MD5-tiivisteEi (deterministinen)❌ Ei⚠️ KeskinkertainenMuunnokset (vanhentunut)
v4SatunnainenErittäin matala❌ Ei⚠️ KeskinkertainenYleiskäyttö
v5SHA-1-tiivisteEi (deterministinen)❌ Ei⚠️ KeskinkertainenMuunnokset (suositeltu)
v6Järjestetty aikaleimaMatala✅ Kyllä✅ ParempiModerni DB ajalla
v7Unix-aikaleimaMatala✅ Kyllä✅ ParasUudet projektit

UUID vs. muut tunnisteet

TyyppiKokoKollisiotAikajärjestysKäyttö
Auto-increment ID4-8 tavuaTaatusti yksilöllinen taulukossaYksinkertaiset sovellukset, paikallinen DB
UUID v416 tavuaKäytännössä mahdotontaHajautetut järjestelmät, API
UUID v716 tavuaKäytännössä mahdotontaModerni DB suorituskyvyllä
ULID16 tavuaKäytännössä mahdotontaUUID + leksikografinen järjestys
Snowflake ID8 tavuaTaatusti yksilöllinen oikealla konfiguraatiollaTwitter, hajautetut järjestelmät
NanoIDKonfiguroitavissaRiippuu pituudestaURL-ystävälliset tunnukset

Toteutus eri kielillä

JavaScript/TypeScript

// UUID v4 - Yksinkertaisin tapa (nykyaikaiset selaimet)
const uuid = crypto.randomUUID();

// UUID v4 - Manuaalinen toteutus
function generateUUIDv4() {
  return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
    const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) >> (c === 'x' ? 0 : 2);
    const v = c === 'x' ? r : (r & 0x3) | 0x8;
    return v.toString(16);
  });
}

// UUID v7 - Suositeltu tietokannoille
function generateUUIDv7() {
  const timestamp = Date.now();
  const timeHi = (timestamp >> 16).toString(16).padStart(8, '0');
  const timeLow = (timestamp & 0xFFFF).toString(16).padStart(4, '0');

  const randomBytes = crypto.getRandomValues(new Uint8Array(10));
  const randomHex = Array.from(randomBytes)
    .map(b => b.toString(16).padStart(2, '0'))
    .join('');

  return `${timeHi}-${timeLow}-7${randomHex.substr(0, 3)}-${randomHex.substr(3, 4)}-${randomHex.substr(7)}`;
}

Python

import uuid

# UUID v4
uuid_v4 = str(uuid.uuid4())
# Tuloste: '6ba7b810-9dad-11d1-80b4-00c04fd430c8'

# UUID v1
uuid_v1 = str(uuid.uuid1())

Java

import java.util.UUID;

// UUID v4
String uuidV4 = UUID.randomUUID().toString();

PHP

// UUID v4 (PHP 7+)
function generateUUID() {
    return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
        mt_rand(0, 0xffff), mt_rand(0, 0xffff),
        mt_rand(0, 0xffff),
        mt_rand(0, 0x0fff) | 0x4000,
        mt_rand(0, 0x3fff) | 0x8000,
        mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
    );
}

C#

using System;

// UUID v4
Guid uuid = Guid.NewGuid();
string uuidString = uuid.ToString();

Parhaat käytännöt

UUID:n tallentaminen tietokantaan

PostgreSQL:

CREATE TABLE users (
    id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT NOW()
);

MySQL 8.0+:

CREATE TABLE users (
    id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),
    email VARCHAR(255) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

Vinkki: MySQL:ssä tallenna UUID BINARY(16)-muodossa CHAR(36):n sijaan tilan säästämiseksi ja nopeamman indeksoinnin vuoksi.

UUID:n validointi

function isValidUUID(uuid) {
  const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
  return regex.test(uuid);
}

UUID:n muuntaminen

// Viivojen poistaminen
const compact = uuid.replace(/-/g, '');

// Viivojen lisääminen takaisin
function formatUUID(compactUuid) {
  return [
    compactUuid.substring(0, 8),
    compactUuid.substring(8, 12),
    compactUuid.substring(12, 16),
    compactUuid.substring(16, 20),
    compactUuid.substring(20, 32)
  ].join('-');
}

Ongelmanratkaisu (Troubleshooting)

UUID v3/v5 ei toimi

Ongelma: Kun v3 tai v5 on valittu, mitään ei generoidu

Ratkaisu:

  1. ✅ Tarkista, että olet täyttänyt “Nimi” -kentän – se on pakollinen!
  2. ✅ Valitse oikea nimiavaruus syötteesi tyypin mukaan
  3. ✅ Esimerkkejä kelvollisista syötteistä:
    • DNS: example.com, google.com
    • URL: https://example.com/page
    • Mikä tahansa teksti: minun-sovellukseni-v1

Vinkki: Kokeile ensin yksinkertaista arvoa, kuten test, ja nimiavaruutta DNS.

Aikaan perustuvalla UUID:llä (v1, v6, v7) on outo aika

Ongelma: Generoidulla UUID:llä on odottamaton aikaleima

Ratkaisu:

  1. ✅ Tarkista päivämäärä- ja aikavalitsin – onko oikea aika asetettu?
  2. ✅ Päivämäärä- ja aikavalitsin käyttää paikallista aikavyöhykettäsi
  3. ✅ Jätä päivämäärä- ja aikavalitsin tyhjäksi nykyistä aikaa varten

UUID:tä ei voi kopioida

Ongelma: “Kopioi kaikki” -painike ei toimi

Ratkaisu:

  1. ✅ Tarkista, että olet generoinut UUID:itä (ne eivät ole tyhjiä)
  2. ✅ Jotkut selaimet vaativat HTTPS-yhteyden leikepöydän API:lle
  3. ✅ Vaihtoehtoisesti valitse teksti tekstialueelta ja kopioi manuaalisesti (Ctrl+C)

Usein kysytyt kysymykset (FAQ)

Voiko UUID:ssä tapahtua kollisiota? Teoreettisesti kyllä, mutta todennäköisyys on tähtitieteellisen pieni. Kun generoidaan miljardi UUID v4:ää sekunnissa 100 vuoden ajan, kollision todennäköisyys on noin 0,00000006%. Käytännössä kollisiota ei koskaan tapahdu.
Sopiiko UUID tietokannan perusavaimeksi? Riippuu käyttötapauksesta. UUID on ihanteellinen hajautettuihin järjestelmiin ja tilanteisiin, joissa tarvitaan globaalia yksilöllisyyttä. Yksinkertaisiin sovelluksiin, joissa on yksi tietokanta, auto-increment voi olla tehokkaampi.
Ovatko tämän työkalun generoimat UUID:t turvallisia? Kyllä, käytämme Web Crypto API:ta (`crypto.getRandomValues()`), joka tarjoaa kryptografisesti turvallisia satunnaisia arvoja. Kaikki tapahtuu paikallisesti selaimessasi.
Mitä eroa on UUID-versioiden välillä? - **v1**: Aikaleima + MAC/satunnainen - kronologinen järjestys, heikompi DB-suorituskyky - **v3/v5**: Tiivisteeseen perustuva - deterministinen, tunnettujen tunnisteiden muuntamiseen - **v4**: Satunnainen - turvallisin, yleisimmin käytetty - **v6**: Järjestetty aikaleima - parempi DB-suorituskyky kuin v1 - **v7**: Unix-aikaleima - paras DB-suorituskyky + aikajärjestys
Mitä UUID-versiota minun tulisi käyttää? Useimmissa tapauksissa käytä **v4** (satunnainen). Tietokannoissa, joissa tarvitaan aikajärjestystä, käytä **v7** (moderni) tai **v6** (standardi). Tunnettujen tunnisteiden (URL, DNS) muuntamiseen käytä **v5** (SHA-1).
Voinko käyttää UUID:tä tunnuksiin ja API-avaimiin? UUID v4 soveltuu istuntotunnuksiin ja vastaaviin tunnuksiin. API-avaimiin harkitse pidempien satunnaisten merkkijonojen (esim. 256-bittiset arvot) tai erikoistuneiden kirjastojen käyttöä.
Kuinka suuria UUID:t ovat? UUID on 128-bittinen (16 tavua). Merkkijonona viivojen kanssa se vie 36 merkkiä. Ilman viivoja 32 heksadesimaalimerkkiä.

Vaihtoehtoja UUID:lle

ULID (Universally Unique Lexicographically Sortable Identifier)

  • 128-bittinen tunniste (kuten UUID)
  • Leksikografisesti järjestettävissä luomisajan mukaan
  • Tiiviimpi esitys (26 merkkiä 36:n sijaan)
  • Isot ja pienet kirjaimet salliva base32-enkoodaus

Esimerkki: 01ARZ3NDEKTSV4RRFFQ69G5FAV

NanoID

  • Pienempi koko kuin UUID (yleensä 21 merkkiä)
  • URL-ystävällinen (ei erikoismerkkejä)
  • Nopeampi generointi
  • Konfiguroitavissa oleva pituus ja aakkoset

Esimerkki: V1StGXR8_Z5jdHi6B-myT

Snowflake ID (Twitter)

  • 64-bittinen tunniste (pienempi kuin UUID)
  • Ajallisesti järjestettävissä
  • Sisältää worker ID:n ja järjestysnumeron
  • Vaatii keskitetyn konfiguraation

Esimerkki: 1234567890123456789

Suorituskyky ja optimointi

Generointinopeus

Generaattorimme pystyy generoimaan:

  • 1 UUID: < 1 ms
  • 100 UUID: ~10-20 ms
  • 1000 UUID: ~100-200 ms

Vinkkejä suorituskykyyn

  1. Erägenerointi – Jos tarvitset paljon UUID:itä, generoi ne kerralla yhden sijaan
  2. Tallennus DB:hen – Indeksoi UUID-sarakkeet nopeaa hakua varten
  3. Pakkaus – Tallenna UUID:t binäärimuodossa (16 tavua) merkkijonon (36 tavua) sijaan
  4. Välimuistitallennus – Joissakin tapauksissa voit esigeneroida ja välimuistitallentaa UUID:itä

Kehittäjille

UUID v4:n rakenne

xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
|        |    |    |    |
|        |    |    |    └─ 48 bittiä satunnaista dataa (solmu)
|        |    |    └────── 16 bittiä satunnaista dataa variantin kanssa (kello_järjestyksen_numero)
|        |    └─────────── 12 bittiä satunnaista dataa + 4 bittiä versiota (aika_yläosa_ja_versio)
|        └──────────────── 16 bittiä satunnaista dataa (aika_keski)
└───────────────────────── 32 bittiä satunnaista dataa (aika_ala)
  • Versio (4 bittiä): aina 0100 (binääri) = 4 (heksa)
  • Variantit (2-3 bittiä): aina 10 (binääri) RFC 4122:lle

UUID:n testaus

// Jest-testi
describe('UUID Generator', () => {
  test('generates valid UUID v4', () => {
    const uuid = generateUUIDv4();
    const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
    expect(regex.test(uuid)).toBe(true);
  });

  test('generates unique UUIDs', () => {
    const uuid1 = generateUUIDv4();
    const uuid2 = generateUUIDv4();
    expect(uuid1).not.toBe(uuid2);
  });
});

Turvallisuusnäkökohdat

Mitä ei pidä tehdä UUID:n kanssa

Älä käytä UUID v1:tä arkaluonteisissa sovelluksissa – Se sisältää aikaleiman, mikä voi olla tietoturvariski

Älä käytä Math.random()-funktiota UUID:n generointiin – Se ei ole kryptografisesti turvallinen

Älä luota UUID:hin valtuutuksessa – UUID voidaan arvata (vaikka erittäin pienellä todennäköisyydellä)

Älä tallenna UUID:tä evästeisiin ilman salausta – Käytä allekirjoitettuja evästeitä tai JWT:tä

Mitä tehdä

Käytä UUID v4:ää useimmissa tapauksissa – Suurin entropia ja turvallisuus

Yhdistä UUID muihin turvallisuuskeinoihin – Istunnonhallinnassa käytä HTTPS:ää, HttpOnly-evästeitä ja lyhyttä vanhenemisaikaa

Validoi UUID palvelimella – Tarkista aina UUID:n muoto ja versio

Käytä kryptografisesti turvallisia satunnaislähteitäcrypto.getRandomValues() selaimessa, /dev/urandom Linuxissa

Mielenkiintoisia faktoja

  • Mahdollisten UUID v4:n määrä: 2^122 ≈ 5.3 × 10^36 (340 undeciljoonaa)
  • Tarvittava kollision todennäköisyys: 50 %:n kollision todennäköisyyden saavuttamiseksi on generoitava 2.71 × 10^18 UUID:tä (2.71 kvintiljoonaa)
  • Kaikkien mahdollisten UUID:iden koko: Jos jokainen UUID tallennettaisiin 16 tavun kokoisena, koko tila veisi 85 zettatavua (85 miljardia teratavua)
  • Alkuperä: UUID standardoitiin osana DCE:tä (Distributed Computing Environment) vuonna 1990