UUID (Universally Unique Identifier, suom. universaalisti yksilöivä tunniste) on yleiseen käyttöön suunniteltu tunnistemuoto, jota noudattavien tunnisteiden perusteella jokaisen olion tietojärjestelmässä voi yksilöidä. UUID:t tunnetaan myös nimellä GUID (Globally Unique Identifier), jota käytetään etenkin Microsoftin järjestelmistä puhuttaessa.
UUID-tunnisteet ovat 128-bittisiä. Yleisin tekstiesitysmuoto on 32 heksadesimaalinumerona, jotka ryhmitetään yhdysviivoilla. Ryhmityksessä ensimmäinen ryhmä on kahdeksan merkkiä pitkä, seuraavat kolme neljä merkkiä pitkiä, ja viides viimeinen ryhmä kaksitoista merkkiä pitkä. Esimerkiksi tietty UUID tekstimuodossa on ca759773-5714-4bc1-a293-58064ecff9c4. GUID:t esitetään muuten samoin, mutta yleensä aaltosulkeissa (esimerkiksi {21EC2020-3AEA-4069-A2DD-08002B30309D}).
UUID:t kehitettiin alun perin 1980-luvulla Apollo Computerin Network Computing System (NCS) -hajautettua tietojärjestelmää varten. Myöhemmin Open Software Foundation otti ne käyttöön omassa Distributed Computing Environment (DCE) -järjestelmässään.
Nykyään UUID on standardoitu dokumentissa RFC 9562 (aiemmin RFC 4122). Standardi-UUID:eissa on aina kaksi kenttää, versio (version) ja muunnelma (variant).
Muunnelmabitit sijaitsevat kahdeksannen tavun yläbiteissä ja ovat yhdestä kolmeen bittiä pitkiä.
| Muunnelma | Bitit | Kuvaus |
|---|---|---|
| 0 | 0 | Apollo Computerin NCS-järjestelmän alkuperäiset UUID:t |
| 1 | 10 | Standardi-UUID:t |
| 2 | 110 | Varattu Microsoftin yhteensopivuuskäyttöön |
| 3 | 111 | Varattu |
Standardi-UUID:eiden versiokenttä sijaitsee kuudennen tavun neljässä yläbitissä, mistä sen tunnistaa helposti tekstimuodon kolmannen ryhmän ensimmäisenä merkkinä. Bitit esittävät lukua väliltä 0–15.
| Versio | Kuvaus |
|---|---|
| 0 | Ei käytetä |
| 1 | Aikaleimapohjainen UUID |
| 2 | Varattu DCE:n käyttöä varten |
| 3 | MD5-pohjainen UUID |
| 4 | Satunnaisesti generoitu UUID |
| 5 | SHA-1-pohjainen UUID |
| 6 | Aikaleimapohjainen UUID |
| 7 | Unix-aikaleimapohjainen UUID |
| 8 | Järjestelmäkohtainen UUID |
| 9–15 | Varattu |
Muiden bittien sisältö riippuu muunnelmasta ja versiosta.
Näistä versioista vain versioita 4, 5, 7 ja 8 suositetaan käytettäväksi uusissa järjestelmissä. Versioiden 1 ja 6 sijasta suositetaan versiota 7 ja version 3 sijasta versiota 5. Versio 2 ei ole yleisessä käytössä.
Versiossa 1 on useampi kenttä:
| Nimi | Koko | Kuvaus |
|---|---|---|
time_low | 32 bittiä | 60-bittisen aikaleiman 32 alinta bittiä |
time_mid | 16 bittiä | 60-bittisen aikaleiman bitit 47-32 |
ver | 4 bittiä | Versiokenttä, arvo = 1 |
time_high | 12 bittiä | 60-bittisen aikaleiman 12 ylintä bittiä |
var | 2 bittiä | Muunnelmakenttä, bitit 10 |
clock_seq | 14 bittiä | Kellosarja |
node | 48 bittiä | Laitekohtainen tunnus |
Aikaleima määritellään 100 nanosekunnin yksikköinä nollakohdasta, joka on gregoriaanisen kalenterin käyttöönottoajankohta, keskiyö 15. lokakuuta 1582 (UTC). Kellosarja on satunnaisluvuksi (tai vähintään laitekohtaisesta tunnuksesta riippumattomaksi luvuksi) alustettu arvo, joka alustetaan uudelleen laitekohtaisen tunnuksen muuttuessa. Jos laitteen kello siirtyy taaksepäin tai on saattanut siirtyä taaksepäin, kellosarjaa kuuluu kasvattaa yhdellä.
Laitekohtainen tunnus on alun perin ollut laitteen MAC-osoite, mutta nykyään suositellaan luotavaksi satunnaisesti.
Versio 6 on sama kuin versio 1, paitsi että aikaleimabittien järjestys on eri: versiossa 1 aikaleimabittien vähiten merkitsevä bitti on ensin, kun taas versiossa 6 aikaleimabittien eniten merkitsevä bitti on ensin. RFC 9562 suosittaa version 7 UUID:eiden käyttöä versioiden 1 ja 6 sijasta uusissa järjestelmissä.
Versiot 3 ja 5 ovat hyvin samanlaisia. Molemmissa luodaan tiiviste nimiavaruus-UUID:sta ja vapaavalintaisesta tavujonosta (nimiavaruuskohtaisesti voidaan määritellä tavujonoissa käytettävä sisältö). Versiossa 3 käytetään MD5-tiivistettä, jonka bitteihin sijoitetaan UUID:n vaatimat versio- ja muunnelmakentät. Sen sijasta suositetaan käytettävän versiota 5, jossa käytetään uudempaa SHA-1-tiivistettä. SHA-1-tiiviste on 160-bittinen, joiden ylimmästä 128 bitistä UUID muodostetaan. Tiivistepohjaiset UUID:t voidaan luoda toistetusti, toisin kuin esimerkiksi satunnaisesti generoidut (versio 4).
Version 4 UUID:eissa kaikki bitit muunnelma- ja versiokenttiä lukuun ottamatta generoidaan satunnaisesti. Satunnaisesti generoituja bittejä on yhteensä 122 bittiä. RFC 9562 kehottaa, että jos bitit luodaan näennäissatunnaislukugeneraattorilla, käytettävä generaattori on suunniteltu kryptografiseen käyttöön.
Version 7 UUID:eissa ylimmät 48 bittiä esittävät Unix-aikaleimaa millisekunteina. Aikaleiman jälkeen voi olla kaksi valinnaista lisäkenttää, aikaleiman tarkennuskenttä (aikaleiman esittämiseksi tarkemmin kuin millisekunnin tarkkuudella) ja alustettu laskuri. Loput biteistä luodaan satunnaisesti version 4 tavoin.
Versiolle 8 ei ole määritelty erikseen muotoa, vaan jokainen järjestelmä saa määritellä versio- ja muunnelmakenttiä lukuun ottamatta sisällön itse. UUIDv8:ita käyttävä järjestelmä joutuu itse määrittelemään, kuinka yksiselitteisyys toteutetaan. Näiden UUID:eiden ei saa siten yleisesti ottaen olettaa olevan yksiselitteisiä.
Täysin nolla UUID (engl. nil UUID) 00000000-0000-0000-0000-000000000000 esittää varsinaisen UUID:n puutetta. Maksimi-UUID:ta (engl. max UUID) FFFFFFFF-FFFF-FFFF-FFFF-FFFFFFFFFFFF voi käyttää esimerkiksi esittämään luettelon loppua.
urn:uuid:, esimerkiksi urn:uuid:ca759773-5714-4bc1-a293-58064ecff9c4.| UUID | Kuvaus |
|---|---|
| e2c1722e-b263-4979-8696-b909efa2f1b0 | Versio 4, satunnaisesti generoitu |
| 4b3c3593-9afe-5295-b649-7139e54e73ee | Versio 5, nimiavaruus-UUID on e2c1722e-b263-4979-8696-b909efa2f1b0 ja sen perään liitetty tavujono on teksti https://fi.wikipedia.org/wiki/UUID |
| 019c4941-a476-701e-8153-704698c5988a | Versio 7, generoitu Unix-aikaleimalla 1770755564.662 |