UUID ( englanninkielinen universaali yksilöllinen tunniste "Universal Unique Identifier") on ohjelmistokehityksessä käytetty tunnistusstandardi , jonka Open Software Foundation (OSF) on standardoinut osana DCE - Distributed Computing Environment -ympäristöä . UUID:n päätarkoitus on antaa hajautetuille järjestelmille mahdollisuus yksilöidä tiedot ilman selvityskeskusta. Siten kuka tahansa voi luoda UUID:n ja käyttää sitä tunnistamaan jotain kohtuullisella varmuudella, että annettua tunnistetta ei vahingossa koskaan käytetä johonkin muuhun. Siksi UUID-tunnisteella merkittyjä tietoja voidaan sijoittaa myöhemmin jaettuun tietokantaan ilman, että tarvitsee ratkaista nimiristiriitoja. Tämän standardin yleisin käyttö on Microsoftin GUID (Globally Unique Identifier ) -tunnus . Muita merkittäviä käyttäjiä ovat Linux ( ext2 / ext3 -tiedostojärjestelmä , LUKS - salatut osiot, GNOME , KDE ) ja Mac OS X - jotka kaikki käyttävät toteutusta, joka on johdettu e2fsprogs-paketin uuid-kirjastosta.
UUID on dokumentoitu osana standardia ISO / IEC 11578:1996 " Informaatioteknologia - Open Systems Interconnection - Remote Procedure Call (RPC)" ja myöhemmin ITU-T Rec. X.667 | ISO / IEC 9834-8:2008. IETF on julkaissut ehdotetun standardin RFC 4122 , joka on teknisesti identtinen ITU-T Rec : n kanssa. X.667 | ISO/IEC 9834-8.
UUID on 16- tavuinen (128 - bittinen ) numero. Kanonisessa esityksessään UUID esitetään heksadesimaalilukuna , joka on erotettu yhdysviivalla viiteen ryhmään muodossa 8-4-4-4-12. Tämä esitys kestää 36 merkkiä:
123e4567-e89b-12d3-a456-426655440000 xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx4 bittiä Milmaisevat UUID:n version ("version") ja 1-3 tärkeintä bittiä Nilmaisevat UUID:n muunnelman ("variantti").
Tämä ryhmittely perustuu UUID-rakenteeseen:
Kenttä nimi | Pituus (tavuina) | Pituus (heksadesimaalilukujen määrä) | Sisältö |
---|---|---|---|
time_low | neljä | kahdeksan | kokonaisluku, joka ilmaisee ajan alempaa 32 bittiä |
time_mid | 2 | neljä | kokonaisluku, joka tarkoittaa keskimääräistä 16 bittiä aikaa |
time_hi_and_version | 2 | neljä | 4 tärkeintä bittiä ilmaisevat UUID:n version, vähiten merkitsevät bitit ajan merkittävimmät 12 bittiä |
clock_seq_hi_and_res clock_seq_low | 2 | neljä | 1-3 korkeaa bittiä ilmaisevat UUID-muunnoksen, loput 13-15 bittiä osoittavat kellosekvenssiä |
solmu | 6 | 12 | 48-bittinen isäntätunnus |
Nämä kentät vastaavat UUID-versioita 1 ja 2, jotka luodaan ajan perusteella, mutta 8-4-4-4-12-esitystä käytetään kaikille UUID-versioille.
RFC 4122 määrittää myös URN - nimiavaruuden UUID:ille:
urn:uuid:123e4567-e89b-12d3-a456-426655440000Microsoftin GUID -tunnusta käytetään joskus kiharoiden aaltosulkeiden kanssa:
{123e4567-e89b-12d3-a456-426655440000}Yksilöllisten UUID-avainten kokonaismäärä (pois lukien versiot) on 2128 = 25616 eli noin 3,4 × 1038 . Tämä tarkoittaa, että luomalla 1 biljoona avainta nanosekunnissa , kaikkien mahdollisten arvojen lajittelu kestää vain 10 miljardia vuotta.
Erityisellä tunnisteella varustettua UUID-tunnusta voidaan tarkoituksellisesti käyttää uudelleen saman entiteetin tunnistamiseen eri yhteyksissä. Esimerkiksi Microsoftin komponenttimallissa jokaisen komponentin on tuettava standardi " IUnknown " -liitäntää. Tätä varten luodaan UUID, joka edustaa " IUnknown ". Kaikissa tapauksissa, joissa käytetään " IUnknown " - kun käytetään prosesseja " IUnknown " -rajapinnalle komponentissa tai toteutetaan tuki " IUnknown " -rajapinnalle itse komponentilla - viitataan aina samaan tunnisteeseen: 00000000-0000-0000-C000-000000000046.
UUID:n binääriesitys vaihtelee eri järjestelmissä.
Useimmat järjestelmät koodaavat UUID:n kokonaan big-endian -kielellä . Esimerkiksi 00112233-4455-6677-8899-aabbccddeeffkoodattu tavuina 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff.
Joissakin järjestelmissä, kuten Microsoftin COM/OLE-kirjastojen yhdistämisessä , käytetään mix-endiania , jossa UUID:n kolme ensimmäistä komponenttia on koodattu little-endianiksi ja kaksi viimeistä big-endianiksi. Esimerkiksi 00112233-4455-6677-8899-aabbccddeefftässä tapauksessa se on koodattu muodossa 33 22 11 00 55 44 77 66 88 99 aa bb cc dd ee ff.
Historiallisista syistä UUID:llä on useita muunnelmia, jotka on merkitty yhdellä, kahdella tai kolmella bitillä.
Yksi RFC 4122 : ssa määritellyistä vaihtoehdoista , vaihtoehto 0 (merkitty yhdellä bitillä 0xxx 2 , N = 0..7), on olemassa taaksepäin yhteensopivuuden vuoksi vanhentuneen Apollo Network Computing System 1.5 UUID -muodon kanssa, joka kehitettiin noin 1988. Tässä muodossa UUID:n 6 ensimmäistä oktettia ovat 48-bittinen aikaleima (4 mikrosekunnin aikayksiköiden määrä, jotka ovat kuluneet 1. tammikuuta 1980 UTC jälkeen); seuraavat 2 oktettia on varattu; seuraava oktetti on "osoiteperhe"; viimeiset 7 oktettia ovat 56-bittinen isäntätunnus osoiteperheen määrittelemässä muodossa. Yksityiskohtaisista eroista huolimatta voidaan havaita samankaltaisuus nykyaikaisen UUID-version 1 kanssa. Nykyisen UUID-määrityksen varianttibitit ovat samat kuin NCS UUID:n osoiteperheen oktetin korkeat bitit. Vaikka osoiteperhe voi sisältää arvoja välillä 0..255, vain arvot 0..13 on määritelty. Näin ollen vaihtoehdon 0 määrittäminen 0xxxvälttää ristiriidat historiallisten NCS UUID -tunnusten kanssa, jos niitä on edelleen tietokannoista.
Näitä muunnelmia käytetään nykyisissä UUID-spesifikaatioissa. Vaihtoehto 1 (merkitty kahdella bitillä 10xx 2 N = 8..b) on päävaihtoehto ja se on kuvattu RFC 4122 :ssa . Vaihtoehto 2 (merkitty kolmella bitillä 110x 2 N = c..d) on kuvattu RFC:ssä varattuna taaksepäin yhteensopivuuteen Microsoft Windowsin varhaisten GUID-tunnusten kanssa .
Muut kuin muunnelmabitit, kaksi UUID-tunnusta ovat muutoin samat, paitsi että binäärimuotoon koodattuina tallennusta tai siirtoa varten variantin 1 UUID:t käyttävät verkon tavujärjestystä (big-endian), kun taas muunnelman 2 GUID:t käyttävät alkuperäistä tavujärjestystä. -endian) tavujärjestys. Kanonisessa tekstiesityksessä vaihtoehdot 1 ja 2 ovat samat vaihtoehtobittejä lukuun ottamatta.
Vaikka jotkin tärkeät GUID:t, kuten COM:n IUnknown-liitäntätunniste, ovat versio 2 UUID:itä, monet Microsoft Windows -ohjelmistossa luoduista ja käytetyistä tunnisteista, joita kutsutaan "GUID:iksi", ovat itse asiassa vakioversion 1 UUID:itä verkon tavujärjestyksessä. Microsoft-apuohjelman nykyinen versio guidgenluo vakioversion 1 UUID:t. Joissakin Microsoftin dokumentaatioissa sanotaan, että "GUID" on synonyymi sanalle "UUID", [1] kuten RFC 4122 :ssa on standardoitu . RFC 4122 :ssa itsessään todetaan, että UUID:t tunnetaan myös nimellä GUID ("tunnetaan myös nimellä GUID"). Kaikki tämä viittaa siihen, että "GUID", vaikka alun perin oli erillinen muunnos Microsoftin käyttämästä UUID:stä, on nyt tullut vain vaihtoehtoinen nimi tavalliselle UUID:lle.
RFC 4122 :ssa 111x 2 ( N = ) e..fon varattu tulevaa käyttöä varten.
Standardi määrittelee viisi UUID-versiota ("versio"), joista jokainen voi olla parempi tai huonompi tietyissä tilanteissa.
Erikoistapaus, jossa kaikki UUID-bitit asetetaan nollaan: 00000000-0000-0000-0000-000000000000.
Versio 1 sisältää sen solmun ("solmun") 48-bittisen MAC-osoitteen , jolle UUID luotiin, ja 60-bittisen aikaleiman (aikaleiman), joka osoittaa 100 ns:n aikavälien määrän, joka on kulunut lokakuun 15. päivän keskiyön jälkeen. 1582 UTC – gregoriaanisen kalenterin käytön alkamispäivä . RFC 4122 määrittelee maksimiajan noin 3400 CE. e., mikä tarkoittaa, että 60-bittinen aikaleima on allekirjoitettu. Jotkut ohjelmat, kuten libuuid-kirjasto, pitävät aikaleimaa kuitenkin allekirjoittamattomana [2] ja niille maksimiaika on noin 5236 CE. e.
13- tai 14-bittinen kellosekvenssi lisää aikaleiman tapauksissa, joissa järjestelmän kelloa ei päivitetä tarpeeksi nopeasti tai moniprosessorijärjestelmissä. Tällaisissa tapauksissa eri UUID-tunnuksilla voi olla sama aikaleima. Samojen UUID-tunnusten luomisen välttämiseksi käytetään kellosekvenssiä, joka päivitetään aina, kun uusi UUID luodaan, ja joka on erilainen eri UUID-tunnuksille, vaikka aikaleimat täsmäävät. Koska version 1 UUID:t vastaavat yhtä pistettä avaruudessa (solmu) ja aikaa (aikaleima ja kellosekvenssi), kahden oikein luodun UUID:n yhteensopivuuden mahdollisuus on käytännössä nolla. Koska aikaleima ja kellosekvenssi ovat yhdessä 74 bittiä, yhteen solmuun voidaan luoda yhteensä 2 74 (1,8⋅10 22 eli 18 sekstiljoonaa ) ainutlaatuista version 1 UUID:tä keskimääräisellä maksiminopeudella 163 miljardia UUID:tä sekunnissa.
Toisin kuin muut UUID:n versiot, NIC MAC-osoitteisiin perustuvien versioiden 1 ja 2 UUID-tunnusten ainutlaatuisuus riippuu osittain keskusrekisteröintiviranomaisen myöntämästä tunnisteesta, nimittäin MAC-osoitteen Organisaation Unique Identifier (OUI) -osasta, joka myönnetään. IEEE :n verkkolaitteiden valmistajat. [3] Ainutlaatuisuus riippuu myös NIC-valmistajien yksilöllisten MAC-osoitteiden oikeasta osoittamisesta, mikä, kuten muutkin valmistusprosessit, on virhealtista.
MAC-osoitteen käyttäminen tarkoittaa, että voit aina jäljittää UUID:n luoneen tietokoneen. Joskus on mahdollista löytää tietokone, jolla asiakirja on luotu tai muokattu, jos käytettävässä tekstinkäsittelyohjelmassa on tiedostoon upotettu UUID. Tätä tietosuoja-aukkoa käytettiin Melissa-viruksen tekijän löytämiseen . [neljä]
RFC 4122 varaa version 2 "DCE-suojauksen", mutta ei anna siitä mitään yksityiskohtia. Tästä syystä monissa UUID-toteutuksissa ei ole versiota 2. Version 2 UUID on kuitenkin kuvattu DCE 1.1 Authentication and Security Services -määrityksessä. [5]
Versio 2 on samanlainen kuin versio 1, mutta kellosekvenssin alemmat 8 bittiä on korvattu "paikallisen toimialueen" numerolla ja aikaleiman alemmat 32 bittiä korvataan kokonaislukutunnisteella, joka on merkityksellinen määritetyn paikallisen toimialueen sisällä.
Mahdollisuus sisällyttää 40-bittinen toimialue/tunniste on kompromissi. Toisaalta 40 bittiä mahdollistaa noin 1 biljoonaa verkkotunnus/tunnistearvoa yhdelle solmulle. Toisaalta, kun aikaleima on leikattu 28 MSB:hen 60 bitistä versiossa 1, UUID-versio 2 tikittää ajan vain 429,49 sekunnin välein (hieman yli 7 minuuttia), toisin kuin versiossa 1 100 nanosekuntia. -bitin kellosekvenssi, toisin kuin 14 bittiä versiossa 1, vain 64 yksilöllistä UUID-tunnusta voidaan luoda yhdelle isännälle/verkkotunnukselle/tunnukselle näiden 7 minuutin aikana. Siksi UUID-versio 2 ei ole sopiva, jos haluat luoda UUID:n useammin kuin kerran 7 minuutin välein.
Versioiden 3 ja 5 UUID-tunnukset luodaan tiivistämällä nimitilan tunniste ja nimi. Versio 3 käyttää MD5 - hajautusalgoritmia , versio 5 käyttää SHA-1: tä .
Spesifikaatio tarjoaa UUID:n edustamaan URL- , FQDN-, OID- ja X.500 -eroteltujen nimien nimiavaruuksia , mutta mitä tahansa haluttua UUID-tunnusta voidaan käyttää nimitilan tunnisteena.
Annettua nimiavaruutta ja nimeä vastaavan version 3 UUID:n laskemiseksi nimitilan UUID muunnetaan tavuksi, ketjutetaan nimeen ja tiivistetään MD5-algoritmilla, jolloin saadaan 128 bittiä. 6 tai 7 bittiä korvataan sitten kiinteillä arvoilla: 4-bittinen versio (esimerkiksi 0011 2 versiolle 3) ja UUID:n 2- tai 3-bittinen variantti (esimerkiksi 10 2 , joka tarkoittaa RFC :tä 4122 UUID tai 110 2 , joka tarkoittaa vanhaa Microsoftin GUID-tunnusta). Koska 6 tai 7 bittiä on siten ennalta määritetty, vain 121 tai 122 bittiä myötävaikuttavat UUID:n ainutlaatuisuuteen.
Versio 5 UUID on samanlainen, mutta käyttää SHA-1:tä MD5:n sijaan. Koska SHA-1 antaa 160-bittisen hajautusarvon, se on valmiiksi katkaistu 128-bittiseksi.
UUID-versioiden 3 ja 5 olemus on, että sama pari nimiavaruudesta ja nimestä yhdistetään samaan UUID:hen. Tässä tapauksessa nimiavaruutta tai nimeä ei voida saada takaisin UUID:stä, paitsi raa'alla voimalla.
RFC 4122 suosittelee version 5 käyttöä version 3 sijasta, eikä se suosittele kummankaan version käyttöä suojaustunnuksena.
Version 4 UUID luodaan satunnaisesti. Kuten muissakin UUID-versioissa, versiota käytetään 4 bittiä ja 2 tai 3 bittiä varianttia. Joten versiossa 1 (jota useimmat UUID:t käyttävät) on 122 bittiä satunnaisesti luotua osaa kohden, mikä antaa 2122 tai 5.3⋅10 36 (5.3 undecillion ) mahdollista UUID:tä variantin 1 versiosta 4. Variantin version 4 UUID 2:lla on puolet vähemmän mahdollisia vaihtoehtoja, koska yhtä enemmän bittiä käytetään muunnelman osoittamiseen.