UUID ( anglicky universally unique identifier "Universal Unique Identifier") je identifikační standard používaný při vývoji softwaru , standardizovaný Open Software Foundation (OSF) jako součást DCE - Distributed Computing Environment .. Hlavním účelem UUID je umožnit distribuovaným systémům jednoznačně identifikovat informace bez clearingového centra. Každý si tedy může vytvořit UUID a použít jej k identifikaci něčeho s přiměřenou mírou jistoty, že daný identifikátor nebude nedopatřením nikdy použit pro něco jiného. Proto lze informace označené UUID později umístit do sdílené databáze bez nutnosti řešit konflikty názvů. Nejběžnějším použitím tohoto standardu je Globálně jedinečný identifikátor ( GUID ) společnosti Microsoft . Dalšími významnými uživateli jsou Linux ( ext2 / ext3 file system , LUKSšifrované oddíly, GNOME , KDE ) a Mac OS X používají implementaci odvozenou z knihovny uuid nalezené v balíčku e2fsprogs.
UUID je zdokumentováno jako součást normy ISO / IEC 11578:1996 „ Informační technologie – propojení otevřených systémů – vzdálené volání procedur (RPC)“ a později v doporučení ITU-T. X.667 | ISO / IEC 9834-8:2008. IETF zveřejnila navrhovanou normu RFC 4122 , která je technicky identická s doporučením ITU-T Rec. X.667 | ISO/IEC 9834-8.
UUID je 16bajtové (128bitové ) číslo. Ve své kanonické reprezentaci je UUID reprezentováno jako hexadecimální číslo oddělené pomlčkami do pěti skupin ve formátu 8-4-4-4-12. Tato reprezentace má 36 znaků:
123e4567-e89b-12d3-a456-426655440000 xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx4 bity Moznačují verzi ("verze") UUID a 1-3 nejvýznamnější bity Noznačují variantu ("variantu") UUID.
Toto seskupení je založeno na struktuře UUID:
Název pole | Délka (v bajtech) | Délka (počet hexadecimálních číslic) | Obsah |
---|---|---|---|
time_low | čtyři | osm | celé číslo označující nižších 32 bitů času |
time_mid | 2 | čtyři | celé číslo označující průměrných 16 bitů času |
time_hi_and_version | 2 | čtyři | 4 nejvýznamnější bity označují verzi UUID, nejméně významné bity označují nejvýznamnějších 12 bitů času |
clock_seq_hi_and_res clock_seq_low | 2 | čtyři | 1–3 vysoké bity označují variantu UUID, zbývajících 13–15 bitů značí sekvenci hodin |
uzel | 6 | 12 | 48bitové ID hostitele |
Tato pole odpovídají UUID verze 1 a 2, které jsou generovány na základě času, ale reprezentace 8-4-4-4-12 se používá pro všechny verze UUID.
RFC 4122 také definuje jmenný prostor URN pro UUID:
urn:uuid:123e4567-e89b-12d3-a456-426655440000Microsoft GUID se někdy používá se složenými závorkami:
{123e4567-e89b-12d3-a456-426655440000}Celkový počet jedinečných klíčů UUID (kromě verzí) je 2128 = 25616 nebo přibližně 3,4 × 1038 . To znamená, že při generování 1 bilionu klíčů každou nanosekundu zabere řazení všech možných hodnot pouze 10 miliard let.
UUID se speciálním identifikátorem lze záměrně znovu použít k identifikaci stejné entity v různých kontextech. Například v Microsoft Component Object Model musí každá komponenta podporovat standardní rozhraní „ IUnknown “. K tomu je vytvořen UUID, který představuje " IUnknown ". Ve všech případech, kdy je použito „ IUnknown “ – při přístupu k procesům k rozhraní „ IUnknown “ v komponentě nebo k implementaci podpory rozhraní „ IUnknown “ samotnou komponentou – se vždy odkazuje na stejný identifikátor: 00000000-0000-0000-C000-000000000046.
Binární reprezentace UUID se v různých systémech liší.
Většina systémů kóduje UUID výhradně v big-endian . Například 00112233-4455-6677-8899-aabbccddeeffzakódované v bajtech 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff.
Některé systémy, jako je zařazování v knihovnách Microsoft COM/OLE , používají mixed-endian , kde jsou první tři součásti UUID kódovány jako little-endian a poslední dvě jako big-endian. Například 00112233-4455-6677-8899-aabbccddeeffv tomto případě je kódován jako 33 22 11 00 55 44 77 66 88 99 aa bb cc dd ee ff.
Z historických důvodů má UUID několik variant, označených jedním, dvěma nebo třemi bity.
Jedna z možností definovaných v RFC 4122 , možnost 0 (označená jedním bitem 0xxx 2 , N = 0..7), je přítomna pro zpětnou kompatibilitu se zastaralým formátem Apollo Network Computing System 1.5 UUID vyvinutým kolem roku 1988. V tomto formátu je prvních 6 oktetů UUID 48bitové časové razítko (počet 4 mikrosekundových časových jednotek, které uplynuly od 1. ledna 1980 UTC); další 2 oktety jsou rezervovány; další oktet je "rodina adres"; posledních 7 oktetů je 56bitové ID hostitele ve tvaru určeném rodinou adres. Přes rozdíl v detailech je vidět podobnost s moderním UUID verze 1. Variantní bity v aktuální specifikaci UUID jsou stejné jako vysoké bity oktetu rodiny adres v NCS UUID. Ačkoli rodina adres může obsahovat hodnoty v rozsahu 0..255, byly definovány pouze hodnoty 0..13. Označení možnosti 0 tak 0xxxzabrání konfliktům s historickými NCS UUID, pokud v databázích stále existují.
Tyto varianty se používají v aktuálních specifikacích UUID. Možnost 1 (označená dvěma bity 10xx 2 N = 8..b) je hlavní a je popsána v RFC 4122 . Možnost 2 (označená třemi bity 110x 2 N = c..d) je v RFC popsána jako rezervovaná pro zpětnou kompatibilitu s dřívějšími GUID z Microsoft Windows .
Kromě variantních bitů jsou dva UUID jinak stejné, až na to, že když jsou zakódovány do binární formy pro ukládání nebo přenos, UUID varianty 1 používají síťové pořadí bajtů (big-endian), zatímco GUID varianty 2 používají nativní pořadí bajtů. -endian) pořadí bajtů. V kanonické textové reprezentaci jsou volby 1 a 2 stejné kromě bitů voleb.
Zatímco některé důležité identifikátory GUID, jako je identifikátor rozhraní IUnknown pro COM, jsou UUID varianty 2, mnoho identifikátorů vytvořených a používaných v softwaru Microsoft Windows a označovaných jako „GUID“ jsou ve skutečnosti standardní UUID varianty 1 v pořadí bajtů sítě. Aktuální verze nástroje Microsoft guidgengeneruje standardní UUID varianty 1. Některá dokumentace společnosti Microsoft říká, že „GUID“ je synonymem pro „UUID“, [1] jak je standardizováno v RFC 4122 . Samotný RFC 4122 uvádí, že UUID jsou také známé jako GUID ("jsou také známé jako GUID"). Vše nasvědčuje tomu, že „GUID“, ačkoli původně šlo o samostatnou variantu UUID používané společností Microsoft, se nyní stalo pouze alternativním názvem pro standardní UUID.
V RFC 4122 je 111x 2 ( N = e..f) vyhrazeno pro budoucí použití.
Standard definuje pět verzí („verze“) UUID, z nichž každá může být v určitých situacích lepší nebo horší.
Zvláštní případ, kdy jsou všechny bity UUID nastaveny na nulu: 00000000-0000-0000-0000-000000000000.
Verze 1 obsahuje 48bitovou MAC adresu uzlu ("uzel"), na kterém bylo vygenerováno UUID, a 60bitové časové razítko (timestamp), které udává počet 100 ns intervalů, které uplynuly od půlnoci 15. října, 1582 UTC — datum zahájení používání gregoriánského kalendáře . RFC 4122 specifikuje maximální možnou dobu kolem roku 3400 CE. e., což znamená, že 60bitové časové razítko je podepsané. Některé programy, jako je knihovna libuuid, však považují časové razítko za nepodepsané [2] , a pro ně je maximální čas kolem 5236 CE. E.
13bitová nebo 14bitová sekvence hodin doplní časové razítko v případech, kdy se systémové hodiny neaktualizují dostatečně rychle, nebo na víceprocesorových systémech. V takových případech mohou mít různá UUID stejné časové razítko. Aby se zabránilo generování stejných UUID, používá se sekvence hodin, která se aktualizuje pokaždé, když je vytvořen nový UUID, a která se bude lišit pro různá UUID, i když se časové značky shodují. Protože UUID verze 1 odpovídají jedinému bodu v prostoru (uzlu) a času (časové razítko a sekvence hodin), šance na shodu dvou správně vygenerovaných UUID je prakticky nulová. Vzhledem k tomu, že časové razítko a sekvence hodin jsou dohromady 74 bitů, lze na jediném uzlu vygenerovat celkem 2 74 (1,8⋅10 22 nebo 18 sextilionů ) jedinečných UUID verze 1 při maximální průměrné rychlosti 163 miliard UUID za sekundu.
Na rozdíl od jiných verzí UUID závisí jedinečnost UUID verze 1 a verze 2 na základě MAC adresy NIC zčásti na identifikátoru vydaném centrálním registračním úřadem, konkrétně na části MAC adresy organizace Unique Identifier (OUI), která je vydána. od výrobců síťových zařízení IEEE . [3] Jedinečnost závisí také na správném přiřazení jedinečných MAC adres výrobci NIC, které je stejně jako ostatní výrobní procesy náchylné k chybám.
Použití MAC adresy znamená, že můžete vždy vyhledat počítač, který vytvořil UUID. Někdy je možné najít počítač, na kterém byl dokument vytvořen nebo upraven, pokud použitý textový procesor má UUID vložené do souboru. Tato díra v soukromí byla použita k nalezení autora viru Melissa . [čtyři]
RFC 4122 vyhrazuje verzi 2 "zabezpečení DCE", ale neposkytuje o ní žádné podrobnosti. Z tohoto důvodu mnoho implementací UUID nemá verzi 2. Verze 2 UUID je však popsána ve specifikaci DCE 1.1 Authentication and Security Services. [5]
Verze 2 je podobná verzi 1, ale spodních 8 bitů hodinové sekvence je nahrazeno číslem "lokální domény" a spodních 32 bitů časové značky je nahrazeno celočíselným identifikátorem, který má význam v rámci zadané lokální domény.
Možnost zahrnout 40bitovou doménu/identifikátor je kompromisem. Na jedné straně 40 bitů umožňuje přibližně 1 bilion hodnot domény/identifikátoru pro jeden uzel. Na druhou stranu, s časovým razítkem zkráceným na 28 MSB z 60 bitů ve verzi 1, UUID verze 2 bude čas tikat pouze každých 429,49 sekund (něco přes 7 minut), na rozdíl od 100 nanosekund ve verzi 1. A s 6 -bitová sekvence hodin, na rozdíl od 14 bitů ve verzi 1, lze během těchto 7 minut vygenerovat pouze 64 jedinečných UUID pro jednoho hostitele/doménu/id. Proto UUID verze 2 není vhodný, pokud chcete generovat UUID více než jednou za 7 minut.
UUID verze 3 a 5 se generují hašováním identifikátoru oboru názvů a názvu. Verze 3 používá hashovací algoritmus MD5 , verze 5 používá SHA-1 .
Specifikace poskytuje UUID pro reprezentaci jmenných prostorů URL , FQDN , OID a X.500 , ale jako identifikátor jmenného prostoru lze použít libovolný požadovaný UUID.
Pro výpočet UUID verze 3 odpovídající danému jmennému prostoru a názvu se UUID jmenného prostoru převede na bajt, zřetězí se s názvem a hashuje pomocí algoritmu MD5, což má za následek 128 bitů. 6 nebo 7 bitů je pak nahrazeno pevnými hodnotami: 4bitová verze (například 0011 2 pro verzi 3) a 2bitová nebo 3bitová varianta UUID (například 102 , což znamená RFC 4122 UUID nebo 110 2 označující starší Microsoft GUID). Protože je takto předdefinováno 6 nebo 7 bitů, přispívá k jedinečnosti UUID pouze 121 nebo 122 bitů.
Verze 5 UUID je podobná, ale místo MD5 používá SHA-1. Protože SHA-1 poskytuje 160bitový hash, je předem zkrácen na 128 bitů.
Podstatou UUID verze 3 a 5 je, že stejný pár z jmenného prostoru a názvu bude mapován na stejný UUID. V tomto případě nelze z UUID získat zpět jmenný prostor ani název, s výjimkou hrubé síly.
RFC 4122 doporučuje používat verzi 5 místo verze 3 a nedoporučuje používat žádnou z verzí jako pověření zabezpečení.
UUID verze 4 se generuje náhodně. Stejně jako u jiných verzí UUID se pro označení verze používají 4 bity, pro variantu 2 nebo 3 bity. Takže pro variantu 1 (kterou používá většina UUID) je 122 bitů na náhodně vygenerovanou část, což dává 2122 nebo 5,3⋅10 36 (5,3 undecillion ) možných UUID verze 4 varianty 1. UUID verze 4 varianty 2 má polovinu možných možností, protože k označení varianty se používá jeden bit navíc.