UUID

Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od verze recenzované 6. října 2014; kontroly vyžadují 44 úprav .

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.

Normy

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.

Formát

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-xxxxxxxxxxxx

4 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:

Struktura 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-426655440000

Microsoft 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.

Kódování

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.

Možnosti

Z historických důvodů má UUID několik variant, označených jedním, dvěma nebo třemi bity.

Možnost 0

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í.

Možnosti 1 a 2

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.

Možnost 3

V RFC 4122 je 111x 2 ( N = e..f) vyhrazeno pro budoucí použití.

Verze

Standard definuje pět verzí („verze“) UUID, z nichž každá může být v určitých situacích lepší nebo horší.

Žádné UUID

Zvláštní případ, kdy jsou všechny bity UUID nastaveny na nulu: 00000000-0000-0000-0000-000000000000.

Verze 1 (čas a MAC adresa)

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]

Verze 2 (čas, MAC adresa a verze zabezpečení DCE)

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.

Verze 3 a 5

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í.

Verze 4 (náhodné)

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.

Poznámky

  1. Globálně jedinečné identifikátory . Microsoft Developer Network . Microsoft _ Získáno 18. června 2019. Archivováno z originálu 13. února 2019.
  2. ext2/e2fsprogs.git - obslužné programy uživatelského prostoru souborového systému Ext2/3/4 . kernel.org . Staženo: 9. ledna 2017.  (nedostupný odkaz)
  3. The Institute of Electrical and Electronics Engineers, Incorporated (IEEE). Registrační autorita (neuvedeno) . — 1963.  
  4. Reiter, Luke sleduje Melissina alter ega . ZDNet . CBS Interactive (2. dubna 1999). Datum přístupu: 16. ledna 2017. Archivováno z originálu 21. října 2012.
  5. DCE 1.1: Autentizační a bezpečnostní služby . Otevřená skupina. Získáno 18. června 2019. Archivováno z originálu 7. prosince 2010.

Odkazy