UUID

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 6 oktober 2014; kontroller kräver 44 redigeringar .

UUID ( engelsk  universally unique identifier "Universal Unique Identifier") är en identifieringsstandard som används i mjukvaruutveckling , standardiserad av Open Software Foundation (OSF) som en del av DCE - Distributed Computing Environment. Huvudsyftet med UUID är att tillåta distribuerade system att unikt identifiera information utan ett clearinghus. Således kan vem som helst skapa ett UUID och använda det för att identifiera något med en rimlig nivå av förtroende för att den givna identifieraren av misstag aldrig kommer att användas för något annat. Därför kan information taggad med ett UUID placeras senare i en delad databas utan att namnkonflikter behöver lösas. Den vanligaste användningen av denna standard är Microsofts Globally Unique Identifier ( GUID ) . Andra betydande användare är Linux ( ext2 / ext3 filsystem , LUKSkrypterade partitioner, GNOME , KDE ) och Mac OS X  använder alla en implementering som kommer från uuid-biblioteket som finns i paketet e2fsprogs.

Standarder

UUID är dokumenterat som en del av ISO / IEC 11578:1996 " Informationsteknologi  - Öppna system sammankoppling  - Remote Procedure Call (RPC)" och senare i ITU-T Rec. X.667 | ISO / IEC 9834-8:2008. IETF har publicerat en föreslagen standard , RFC 4122 , som är tekniskt identisk med ITU-T Rec. X.667 | ISO/IEC 9834-8.

Format

UUID är ett 16- byte (128 -bitars ) nummer. I sin kanoniska representation representeras ett UUID som ett hexadecimalt tal separerat med bindestreck i fem grupper i formatet 8-4-4-4-12. Denna representation tar 36 tecken:

123e4567-e89b-12d3-a456-426655440000 xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

De 4 bitarna Mindikerar versionen ("versionen") av UUID, och de 1-3 mest signifikanta bitarna Nindikerar varianten ("varianten") av UUID.

Denna gruppering är baserad på UUID-strukturen:

UUID-struktur
Fält namn Längd (i byte) Längd (antal hexadecimala siffror) Innehåll
time_low fyra åtta ett heltal som anger de lägre 32 bitarna av tiden
time_mid 2 fyra ett heltal som anger genomsnittet av 16 bitar av tiden
time_hi_and_version 2 fyra De 4 mest signifikanta bitarna indikerar versionen av UUID, de minst signifikanta bitarna indikerar de mest signifikanta 12 bitarna av tiden
clock_seq_hi_and_res clock_seq_low 2 fyra 1-3 höga bitar indikerar UUID-varianten, de återstående 13-15 bitar indikerar klocksekvensen
nod 6 12 48-bitars värd-ID

Dessa fält motsvarar UUID-versionerna 1 och 2, som genereras baserat på tid, men representationen 8-4-4-4-12 används för alla UUID-versioner.

RFC 4122 definierar också ett URN - namnområde för UUID:

urn:uuid:123e4567-e89b-12d3-a456-426655440000

Microsoft GUID används ibland med lockiga hängslen:

{123e4567-e89b-12d3-a456-426655440000}

Det totala antalet unika UUID-nycklar (exklusive versioner) är 2128 = 25616 eller cirka 3,4 × 1038 . Det betyder att genom att generera 1 biljon nycklar varje nanosekund tar det bara 10 miljarder år att sortera igenom alla möjliga värden.

Ett UUID med en speciell identifierare kan avsiktligt återanvändas för att identifiera samma enhet i olika sammanhang. Till exempel, i Microsoft Component Object Model måste varje komponent stödja standardgränssnittet " IUnknown ". För att göra detta skapas ett UUID som representerar " IUnknown ". I alla fall där " IUnknown " används - vid åtkomst till processer till " IUnknown "-gränssnittet i komponenten, eller för att implementera stöd för " IUnknown "-gränssnittet av själva komponenten - refereras alltid till samma identifierare: 00000000-0000-0000-C000-000000000046.

Kodning

Den binära representationen av ett UUID varierar på olika system.

De flesta system kodar UUID helt i big-endian . Till exempel 00112233-4455-6677-8899-aabbccddeeffkodad i byte 00 11 22 33 44 55 66 77 88 99 aa bb cc dd ee ff.

Vissa system, såsom marshaling i Microsoft COM/OLE-biblioteken , använder mixed-endian , där de tre första komponenterna i UUID är kodade som little-endian och de två sista som big-endian. Till exempel, 00112233-4455-6677-8899-aabbccddeeffi det här fallet är den kodad som 33 22 11 00 55 44 77 66 88 99 aa bb cc dd ee ff.

Alternativ

Av historiska skäl har UUID flera varianter, betecknade med en, två eller tre bitar.

Alternativ 0

Ett av alternativen som definieras i RFC 4122 , alternativ 0 (betecknas med en enda bit 0xxx 2 , N = 0..7), finns för bakåtkompatibilitet med det föråldrade Apollo Network Computing System 1.5 UUID-formatet som utvecklades runt 1988. I detta format är de första 6 oktetterna av UUID en 48-bitars tidsstämpel (antalet 4 mikrosekunders tidsenheter som har förflutit sedan 1 januari 1980 UTC); nästa 2 oktetter är reserverade; nästa oktett är "adressfamilj"; de sista 7 oktetterna är 56-bitars värd-ID i den form som anges av adressfamiljen. Trots skillnaden i detaljer kan man se likheten med den moderna versionen UUID 1. Variantbitarna i den nuvarande UUID-specifikationen är desamma som de höga bitarna i adressfamiljens oktetten i NCS UUID. Även om en adressfamilj kan innehålla värden i intervallet 0..255, har endast värdena 0..13 definierats. Genom att markera alternativet 0 som 0xxxundviker konflikter med historiska NCS UUID om de fortfarande finns i databaserna.

Alternativ 1 och 2

Dessa varianter används i de nuvarande UUID-specifikationerna. Alternativ 1 (betecknat med två bitar 10xx 2 N = 8..b) är det huvudsakliga och beskrivs i RFC 4122 . Alternativ 2 (betecknas med de tre bitarna 110x 2 N = c..d) beskrivs i RFC som reserverat för bakåtkompatibilitet med tidiga GUID:er från Microsoft Windows .

Förutom variantbitarna är de två UUID:erna i övrigt desamma, förutom att när de kodas till binär form för lagring eller överföring, använder variant 1 UUID nätverksbyteordning (big-endian), medan variant 2 GUID använder inbyggd byteordning. (lite -endian) byteordning. I kanonisk textrepresentation är alternativ 1 och 2 desamma förutom alternativbitarna.

Medan vissa viktiga GUID, såsom IUnknown gränssnittsidentifieraren för COM, är variant 2 UUID, är många av de identifierare som skapats och används i Microsoft Windows-programvara och kallas "GUIDs" i själva verket standardvariant 1 UUID i nätverksbyteordning. Den nuvarande versionen av Microsoft-verktyget guidgengenererar UUID:er av standardvariant 1. Viss Microsoft-dokumentation säger att "GUID" är en synonym för "UUID", [1] som standardiserat i RFC 4122 . RFC 4122 anger själv att UUID också är kända som GUIDs ("är även kända som GUIDs"). Allt detta tyder på är att "GUID", även om det ursprungligen var en separat variant av UUID som används av Microsoft, nu bara har blivit ett alternativt namn för standard UUID.

Alternativ 3

I RFC 4122 är 111x 2 ( N = e..f) reserverad för framtida användning.

Versioner

Standarden definierar fem versioner ("version") av UUID, som var och en kan vara bättre eller sämre i vissa situationer.

Noll UUID

Ett specialfall där alla UUID-bitar är nollställda: 00000000-0000-0000-0000-000000000000.

Version 1 (tid och MAC-adress)

Version 1 inkluderar 48-bitars MAC-adressen för noden ("noden") där UUID genererades, och en 60-bitars tidsstämpel (tidsstämpel) som indikerar antalet 100-ns intervaller som har förflutit sedan midnatt den 15 oktober, 1582 UTC — datum för början av användningen av den gregorianska kalendern . RFC 4122 anger en maximalt möjlig tid runt 3400 CE. e., vilket betyder att 60-bitars tidsstämpel är signerad. Vissa program, såsom libuuid-biblioteket, anser dock att tidsstämpeln är osignerad [2] , och för dem är den maximala tiden runt 5236 CE. e.

En 13- eller 14-bitars klocksekvens fyller ut tidsstämpeln i fall där systemklockan inte uppdateras tillräckligt snabbt, eller på flerprocessorsystem. I sådana fall kan olika UUID ha samma tidsstämpel. För att undvika generering av samma UUID används en klocksekvens, som uppdateras varje gång ett nytt UUID skapas, och som kommer att vara olika för olika UUID även om tidsstämplarna matchar. Eftersom version 1 UUID motsvarar en enda punkt i rymden (nod) och tid (tidsstämpel och klocksekvens), är chansen att två korrekt genererade UUID matchar praktiskt taget noll. Eftersom tidsstämpeln och klocksekvensen tillsammans är 74 bitar, kan totalt 2 74 (1,8⋅10 22 , eller 18 sexbiljoner ) unika version 1 UUID genereras på en enda nod med en maximal genomsnittlig hastighet av 163 miljarder UUID per sekund.

Till skillnad från andra versioner av UUID beror unikheten hos version 1 och version 2 UUID baserade på NIC MAC-adresser delvis på en identifierare som utfärdats av en central registreringsmyndighet, nämligen Organization Unique Identifier (OUI) delen av MAC-adressen, som utfärdas av IEEE. -tillverkare av nätverksutrustning. [3] Unikhet beror också på korrekt tilldelning av unika MAC-adresser av NIC-tillverkare, som, liksom andra tillverkningsprocesser, är felbenägen.

Att använda MAC-adressen innebär att du alltid kan spåra datorn som skapade UUID. Det är ibland möjligt att hitta datorn där ett dokument skapades eller redigerades om ordbehandlaren som används har UUID inbäddat i filen. Detta sekretesshål användes för att hitta författaren till Melissa-viruset . [fyra]

Version 2 (tid, MAC-adress och DCE-säkerhetsversion)

RFC 4122 reserverar version 2 "DCE-säkerhet" men ger inga detaljer om det. Av denna anledning har många UUID-implementeringar inte version 2. Däremot beskrivs version 2 UUID i specifikationen för DCE 1.1 Authentication and Security Services. [5]

Version 2 liknar version 1, men de lägre 8 bitarna i klocksekvensen ersätts med ett "lokal domän"-nummer och de lägre 32 bitarna av tidsstämpeln ersätts med en heltalsidentifierare som är meningsfull inom den angivna lokala domänen.

Möjligheten att inkludera en 40-bitars domän/identifierare är en kompromiss. Å ena sidan tillåter 40 bitar cirka 1 biljon domän-/identifieringsvärden för en enda nod. Å andra sidan, med tidsstämpeln trimmad ned till 28 MSB från 60 bitar i version 1, kommer UUID version 2 bara att tickla tiden var 429,49:e sekund (drygt 7 minuter), i motsats till 100 nanosekunder i version 1. Och med 6 -bitars klocksekvens, i motsats till de 14 bitarna i version 1, kan endast 64 unika UUID genereras för en enda värd/domän/id under dessa 7 minuter. UUID version 2 är alltså inte lämplig om du vill generera ett UUID mer än en gång var 7:e minut.

Versioner 3 och 5

Version 3 och 5 UUID genereras genom att hasha en namnområdesidentifierare och ett namn. Version 3 använder hashalgoritmen MD5 , version 5 använder SHA-1 .

Specifikationen tillhandahåller ett UUID för att representera URL , FQDN , OID och X.500 distinguished names namespaces , men vilket UUID som helst kan användas som en namnområdesidentifierare.

För att beräkna version 3 UUID som motsvarar ett givet namnområde och namn, konverteras namnutrymmets UUID till en byte, sammanlänkas med namnet och hashas med MD5-algoritmen, vilket resulterar i 128 bitar. De 6 eller 7 bitarna ersätts sedan med fasta värden: en 4-bitarsversion (till exempel 0011 2 för version 3) och en 2- eller 3-bitars variant av UUID (till exempel 10 2 , som står för RFC 4122 UUID, eller 110 2 , som betecknar det äldre Microsoft GUID). Eftersom 6 eller 7 bitar alltså är fördefinierade, bidrar endast 121 eller 122 bitar till UUID:s unika karaktär.

Version 5 UUID är liknande men använder SHA-1 istället för MD5. Eftersom SHA-1 ger en 160-bitars hash är den förtrunkerad till 128 bitar.

Kärnan i UUID version 3 och 5 är att samma par från namnområdet och namnet kommer att mappas till samma UUID. I det här fallet kan varken namnutrymmet eller namnet erhållas tillbaka från UUID, förutom genom brute force.

RFC 4122 rekommenderar att du använder version 5 istället för version 3 och rekommenderar inte att du använder någon av versionerna som säkerhetsuppgifter.

Version 4 (slumpmässig)

Version 4 UUID genereras slumpmässigt. Som med andra versioner av UUID används 4 bitar för att indikera versionen, 2 eller 3 bitar indikerar varianten. Så för variant 1 (som används av de flesta UUID) finns det 122 bitar per slumpmässigt genererad del, vilket ger 2122, eller 5,3⋅10 36 (5,3  undecilion ) möjliga UUID för version 4 av variant 1. UUID för version 4 av variant 1. 2 har hälften så många möjliga alternativ, eftersom ytterligare en bit används för att beteckna en variant.

Anteckningar

  1. Globalt unika identifierare . Microsofts utvecklarnätverk . Microsoft . Hämtad 18 juni 2019. Arkiverad från originalet 13 februari 2019.
  2. ext2/e2fsprogs.git - Ext2/3/4 filsystems användarutrymmesverktyg . kernel.org . Hämtad: 9 januari 2017.  (inte tillgänglig länk)
  3. Institutet för elektriska och elektroniska ingenjörer, Incorporated (IEEE). Registreringsmyndighet (ospecificerad) . — 1963.  
  4. Reiter, Luke som spårar Melissas alter ego . ZDNet . CBS Interactive (2 april 1999). Tillträdesdatum: 16 januari 2017. Arkiverad från originalet 21 oktober 2012.
  5. DCE 1.1: Autentiserings- och säkerhetstjänster . Den öppna gruppen. Hämtad 18 juni 2019. Arkiverad från originalet 7 december 2010.

Länkar