Az UUID ( angolul univerzálisan egyedi azonosító "Universal Unique Identifier") a szoftverfejlesztésben használt azonosítási szabvány , amelyet az Open Software Foundation (OSF) szabványosított a DCE - Distributed Computing Environment részeként . Az UUID fő célja, hogy lehetővé tegye az elosztott rendszerek számára az információk egyedi azonosítását elszámolóház nélkül. Így bárki létrehozhat egy UUID-t, és annak segítségével azonosíthat valamit, ésszerű bizonyossággal, hogy az adott azonosítót véletlenül soha nem fogják használni másra. Ezért az UUID-vel megcímkézett információk később elhelyezhetők egy megosztott adatbázisban anélkül, hogy fel kellene oldani a névütközéseket. Ennek a szabványnak a leggyakoribb használata a Microsoft Globally Unique Identifier ( GUID ) azonosítója . További jelentős felhasználók a Linux ( ext2 / ext3 fájlrendszer , LUKS titkosított partíciók, GNOME , KDE ) és a Mac OS X – ezek mindegyike az e2fsprogs csomagban található uuid könyvtárból származó implementációt használ.
Az UUID az ISO / IEC 11578:1996 „ Információtechnológia – Nyílt rendszerek összekapcsolása – Távoli eljáráshívás (RPC)” részeként, majd később az ITU-T Rec. X.667 | ISO / IEC 9834-8:2008. Az IETF közzétett egy javasolt szabványt , az RFC 4122 -t, amely műszakilag megegyezik az ITU-T Rec. X.667 | ISO/IEC 9834-8.
Az UUID egy 16 bájtos (128 bites ) szám. Kanonikus ábrázolásában az UUID hexadecimális számként van ábrázolva, amelyet kötőjellel választanak el öt csoportra, 8-4-4-4-12 formátumban. Ez az ábrázolás 36 karakterből áll:
123e4567-e89b-12d3-a456-426655440000 xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxxA 4 bit Maz UUID verzióját ("verzió"), az 1-3 legjelentősebb bit Npedig az UUID változatát ("változatát") jelzi.
Ez a csoportosítás az UUID-struktúrán alapul:
UUID szerkezetMező neve | Hossz (bájtban) | Hossz (hexadecimális számjegyek száma) | Tartalom |
---|---|---|---|
time_low | négy | nyolc | egy egész szám, amely az idő alsó 32 bitjét jelöli |
time_mid | 2 | négy | egy egész szám, amely az átlagos 16 bites időt jelöli |
time_hi_and_version | 2 | négy | A 4 legjelentősebb bit az UUID verzióját jelzi, a legkisebb jelentőségű bit az idő legjelentősebb 12 bitjét |
clock_seq_hi_and_res clock_seq_low | 2 | négy | 1-3 magas bit jelzi az UUID változatot, a fennmaradó 13-15 bit az órajelet |
csomópont | 6 | 12 | 48 bites gazdagép-azonosító |
Ezek a mezők az 1. és 2. UUID-verziónak felelnek meg, amelyek az idő alapján jönnek létre, de a 8-4-4-4-12 ábrázolást minden UUID-verzióhoz használják.
Az RFC 4122 URN névteret is meghatároz az UUID-k számára:
urn:uuid:123e4567-e89b-12d3-a456-426655440000A Microsoft GUID -t néha kapcsos zárójelekkel használják:
{123e4567-e89b-12d3-a456-426655440000}Az egyedi UUID-kulcsok teljes száma (a verziók nélkül) 2128 = 25616 , azaz körülbelül 3,4 × 1038 . Ez azt jelenti, hogy nanomásodpercenként 1 billió kulcs generálásával mindössze 10 milliárd évbe telik az összes lehetséges érték rendezése.
Egy speciális azonosítóval rendelkező UUID szándékosan újra felhasználható ugyanazon entitás azonosítására különböző kontextusokban. Például a Microsoft Component Object Modelben minden összetevőnek támogatnia kell a szabványos " IUnknown " interfészt. Ehhez létrejön egy UUID, amely az " IUnknown "-t képviseli. Minden olyan esetben, amikor „ IUnknown ”-t használunk – amikor folyamatokhoz férünk hozzá az „ IUnknown ” interfészhez a komponensben, vagy ha az „ IUnknown ” interfész támogatását az összetevő maga valósítja meg –, mindig ugyanarra az azonosítóra hivatkozunk: 00000000-0000-0000-C000-000000000046.
Az UUID bináris ábrázolása a különböző rendszereken eltérő.
A legtöbb rendszer az UUID-t teljes egészében big-endian nyelven kódolja . Például 00112233-4455-6677-8899-aabbccddeeffbájtokban kódolva 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff.
Egyes rendszerek, mint például a Microsoft COM/OLE könyvtárakban a rendszerezés , vegyes végződést használnak , ahol az UUID első három összetevője little-endianként, az utolsó kettő pedig big-endianként van kódolva. Például 00112233-4455-6677-8899-aabbccddeeffebben az esetben a kódolása 33 22 11 00 55 44 77 66 88 99 aa bb cc dd ee ff.
Történelmi okokból az UUID-nek több változata van, amelyeket egy, kettő vagy három bit jelöl.
Az RFC 4122 -ben definiált opciók egyike, a 0. opció (egyetlen 0xxx 2 , N = jelölésű 0..7) jelen van az 1988 körül kifejlesztett elavult Apollo Network Computing System 1.5 UUID formátummal való visszafelé kompatibilitás érdekében. Ebben a formátumban az UUID első 6 oktettje 48 bites időbélyeg (az 1980. január 1. UTC óta eltelt 4 mikroszekundumos időegységek száma); a következő 2 oktett le van foglalva; a következő oktett a „címcsalád”; az utolsó 7 oktett az 56 bites állomásazonosító a címcsalád által meghatározott formában. A részletekben mutatkozó különbségek ellenére látható a hasonlóság a modern 1-es verziójú UUID-vel.A jelenlegi UUID specifikáció változatbitjei megegyeznek az NCS UUID címcsalád oktettjének magas bitjeivel. Bár egy címcsalád tartalmazhat értékeket a 0..255 tartományban, csak a 0..13 értékeket határozták meg. Így a 0-s opció megjelölése 0xxxelkerüli az ütközéseket a korábbi NCS UUID-kkel, ha azok továbbra is léteznek az adatbázisokban.
Ezeket a változatokat a jelenlegi UUID specifikációk használják. Az 1. lehetőség (két 10xx 2 N = bittel jelölve 8..b) a fő, és az RFC 4122 -ben van leírva . A 2. opciót (amelyet a három bit 110x2 N = jelöl ) az RFC úgy írja le, mint amely a Microsoft Windowsc..d korai GUID-jaival való visszafelé kompatibilitásra van fenntartva .
A variáns biteken kívül a két UUID egyébként ugyanaz, kivéve, hogy tárolás vagy átvitel céljából bináris formátumba kódolva az 1. változat UUID-k hálózati bájtsorrendet (big-endian), míg a 2. változat GUID-k natív bájtsorrendet használnak. -endian) bájtsorrend. A kanonikus szöveges ábrázolásban az 1. és 2. opció az opcióbitek kivételével megegyezik.
Míg néhány fontos GUID, például a COM-hoz tartozó IUnknown interfész azonosító 2. változatú UUID, a Microsoft Windows szoftverben létrehozott és használt azonosítók közül sok, amelyeket "GUID-ként" neveznek, valójában szabványos 1. változatú UUID, hálózati bájt sorrendben. A Microsoft segédprogram jelenlegi verziója guidgenszabványos 1. változatú UUID-ket állít elő. Egyes Microsoft-dokumentumok szerint a „GUID” az „UUID” [1] szinonimája, az RFC 4122 szabvány szerint . Az RFC 4122 maga is kimondja, hogy az UUID-k GUID-ként is ismertek ("GUID-ként is ismertek"). Mindez arra utal, hogy a "GUID", bár eredetileg a Microsoft által használt UUID különálló változata volt, mára csak a szabványos UUID alternatív neve lett.
Az RFC 4122 szabványban a 111x2 ( N = ) e..fjövőbeli használatra van fenntartva.
A szabvány az UUID-k öt verzióját ("verzióját") határozza meg, amelyek mindegyike bizonyos helyzetekben jobb vagy rosszabb lehet.
Egy speciális eset, amikor az összes UUID bit nullára van állítva: 00000000-0000-0000-0000-000000000000.
Az 1-es verzió tartalmazza annak a csomópontnak ("csomópont") 48 bites MAC-címét , amelyen az UUID-t létrehozták, és egy 60 bites időbélyeget (időbélyeget), amely jelzi az október 15-e éjfél óta eltelt 100 ns-os intervallumok számát. 1582 UTC – a Gergely-naptár használatának kezdete . Az RFC 4122 a maximális lehetséges időt 3400 CE körül határozza meg. e., ami azt jelenti, hogy a 60 bites időbélyeg alá van írva. Egyes programok, például a libuuid könyvtár azonban előjel nélkülinek tekintik az időbélyeget [2] , és számukra a maximális idő 5236 körül van. e.
A 13 vagy 14 bites órajelsorozat kiegészíti az időbélyeget olyan esetekben, amikor a rendszeróra nem frissül elég gyorsan, vagy többprocesszoros rendszereken. Ilyen esetekben a különböző UUID-k ugyanazzal az időbélyeggel rendelkezhetnek. Az azonos UUID-k generálásának elkerülése érdekében egy órajelsorozatot használnak, amely minden új UUID létrehozásakor frissül, és amely akkor is eltérő lesz a különböző UUID-k esetében, ha az időbélyegek egyeznek. Mivel az 1-es verziójú UUID-k egyetlen térbeli pontnak (csomópontnak) és időnek (időbélyegző és órajelsorozat) felelnek meg, gyakorlatilag nulla az esélye annak, hogy két helyesen generált UUID egyezik. Mivel az időbélyeg és az órajelsorozat együtt 74 bites, összesen 2 74 (1,8⋅10 22 vagy 18 szextillió ) egyedi 1. verziójú UUID generálható egyetlen csomóponton, legfeljebb 163 milliárd UUID másodpercenkénti átlagos sebességgel.
Az UUID más verzióitól eltérően a NIC MAC-címeken alapuló 1-es és 2-es verziójú UUID-k egyedisége részben egy központi regisztrációs hatóság által kiadott azonosítótól függ, nevezetesen a MAC-cím szervezeti egyedi azonosítójától (OUI), amelyet kiadnak. az IEEE hálózati berendezések gyártói által. [3] Az egyediség attól is függ, hogy a hálózati kártyák gyártói helyesen hozzárendelték-e az egyedi MAC-címeket, ami más gyártási folyamatokhoz hasonlóan hibás.
A MAC-cím használata azt jelenti, hogy mindig nyomon követheti az UUID-t létrehozó számítógépet. Néha meg lehet találni azt a számítógépet, amelyen a dokumentumot létrehozták vagy szerkesztették, ha a használt szövegszerkesztőben az UUID be van ágyazva a fájlba. Ezt az adatvédelmi lyukat használták a Melissa vírus szerzőjének megtalálására . [négy]
Az RFC 4122 fenntartja a 2. verziójú "DCE biztonságot", de nem ad róla részleteket. Emiatt sok UUID-megvalósítás nem rendelkezik 2-es verzióval. A 2-es verziójú UUID azonban a DCE 1.1 hitelesítési és biztonsági szolgáltatások specifikációjában található. [5]
A 2-es verzió hasonló az 1-es verzióhoz, de az órajelsor alsó 8 bitje helyére egy "helyi tartomány" szám kerül, az időbélyeg alsó 32 bitje pedig egy egész szám azonosítóval van helyettesítve, amely a megadott helyi tartományon belül értelmes.
A 40 bites tartomány/azonosító megadásának lehetősége kompromisszum. Egyrészt a 40 bit körülbelül 1 billió tartomány/azonosító értéket tesz lehetővé egyetlen csomópont számára. Másrészt, mivel az 1. verzióban az időbélyeget 28 MSB-re csökkentették 60 bitről, az UUID 2. verziója csak 429,49 másodpercenként (valamivel több mint 7 percenként) ketyeg, szemben az 1. verzió 100 nanoszekundumával. És a 6. -bites órajelsorozat, szemben az 1. verzió 14 bitjével, csak 64 egyedi UUID generálható egyetlen gazdagéphez/domainhez/azonosítóhoz a 7 perc alatt. Így az UUID 2. verziója nem megfelelő, ha 7 percenként többször szeretne UUID-t létrehozni.
A 3-as és 5-ös verziójú UUID-k egy névtér-azonosító és egy név kivonatolásával jönnek létre. A 3-as verzió az MD5 -ös kivonatolási algoritmust , az 5-ös verzió az SHA-1-et használja .
A specifikáció egy UUID-t biztosít az URL , FQDN , OID és X.500 megkülönböztetett nevek névtereinek reprezentálására , de bármely kívánt UUID használható névtér azonosítóként.
Az adott névtérnek és névnek megfelelő 3-as verziójú UUID kiszámításához a névtér UUID-jét bájttá alakítja, összefűzi a névvel, és az MD5 algoritmussal kivonatolja, ami 128 bitet eredményez. A 6 vagy 7 bitet ezután rögzített értékekkel helyettesítjük: egy 4 bites verzióval (például 0011 2 a 3-as verziónál) és az UUID 2 vagy 3 bites változatával (például 10 2 , ami az RFC rövidítése ). 4122 UUID vagy 110 2 , amely az örökölt Microsoft GUID-t jelöli). Mivel így 6 vagy 7 bit előre meghatározott, csak 121 vagy 122 bit járul hozzá az UUID egyediségéhez.
Az 5-ös verzió UUID hasonló, de az MD5 helyett SHA-1-et használ. Mivel az SHA-1 160 bites hash-t ad, az előre 128 bitesre van csonkolva.
Az UUID 3. és 5. verziójának lényege, hogy a névtérből és névből ugyanaz a pár lesz leképezve ugyanarra az UUID-re. Ebben az esetben sem a névteret, sem a nevet nem lehet visszakapni az UUID-től, csak nyers erővel.
Az RFC 4122 az 5-ös verzió használatát javasolja a 3-as verzió helyett, és egyik verziót sem javasolja biztonsági hitelesítő adatként.
A 4-es verziójú UUID véletlenszerűen jön létre. Az UUID többi verziójához hasonlóan 4 bitet használnak a verzió jelzésére, 2 vagy 3 bitet a változat jelzésére. Tehát az 1. változatnál (amelyet a legtöbb UUID használ) véletlenszerűen generált részenként 122 bit van, ami 2122 vagy 5.3⋅10 36 (5.3 undecillion ) lehetséges UUID-t ad az 1. változat 4. verziójának. A változat 4. verziójának UUID A 2-ben feleannyi lehetőség van, mivel még egy bitet használnak egy változat kijelölésére.