Articles

Uniwersalnie unikalny identyfikator

dla obu wariantów 1 i 2 w normach zdefiniowano pięć „wersji”, a każda wersja może być bardziej odpowiednia niż pozostałe w określonych przypadkach użycia. Wersja jest wskazywana przezM w reprezentacji łańcucha.

identyfikatory uuid w wersji 1 są generowane na podstawie czasu i identyfikatora węzła (Zwykle adresu MAC); identyfikatory uuid w wersji 2 są generowane na podstawie identyfikatora (Zwykle identyfikatora grupy lub Użytkownika), czasu i identyfikatora węzła; wersje 3 i 5 generują deterministyczne identyfikatory uuid generowane przez haszowanie identyfikatora i nazwy przestrzeni nazw; a uuid w wersji-4 są generowane przy użyciu losowej lub pseudolosowej liczby.

Nil UUIDEdit

„nil” UUID, szczególnym przypadkiem, jest UUID00000000-0000-0000-0000-000000000000; oznacza to, że wszystkie bity ustawione na zero.

Wersja 1 (Data-Czas i adres MAC)Edycja

Wersja 1 łączy 48-bitowy adres MAC „węzła” (czyli komputera generującego UUID), z 60-bitowym znacznikiem czasu, będącym liczbą 100-nanosekundowych interwałów od północy 15 października 1582 Coordinated Universal Time (UTC), data, w której po raz pierwszy przyjęto Kalendarz gregoriański. RFC 4122 stwierdza, że wartość czasu przesuwa się wokół 3400 AD,: 3 w zależności od zastosowanego algorytmu, co oznacza, że 60-bitowy znacznik czasu jest liczbą podpisaną. Jednak niektóre programy, takie jak biblioteka libuuid, traktują znacznik czasu jako niepodpisany, umieszczając czas rollover w 5236 AD. Czas rolowania określony przez ITU-T Rec. X. 667 to 3603 AD.: v

13 – lub 14-bitowa Sekwencja zegara „uniquifying” rozszerza znacznik czasu w celu obsługi przypadków, w których zegar procesora nie postępuje wystarczająco szybko lub gdy na węzeł przypada wiele procesorów i generatorów UUID. Gdy uuid są generowane szybciej niż zegar systemowy może posunąć się naprzód, niższe bity pól znacznika czasu mogą być generowane przez zwiększanie go za każdym razem, gdy uuid jest generowany, aby symulować znacznik czasu o wysokiej rozdzielczości. Przy każdej wersji 1 UUID odpowiadającej pojedynczemu punktowi w przestrzeni (węzeł) i czasie (interwały i Sekwencja zegara), szansa na to, że dwa prawidłowo wygenerowane uuid w wersji 1 będą mimowolnie takie same, jest praktycznie zerowa. Od czasu i sekwencji zegara łącznie 74 bity, 274 (1.8×1022, lub 18 sekstylionów) Wersja-1 uuid może być generowany na identyfikator węzła, z maksymalną średnią szybkością 163 miliardów na sekundę na identyfikator węzła.

w przeciwieństwie do innych wersji UUID, identyfikatory uuid wersji-1 i -2 oparte na adresach MAC z kart sieciowych opierają się częściowo na identyfikatorze wydanym przez centralny organ rejestracyjny, a mianowicie części Organizationally Unique Identifier (Oui) adresu MAC, która jest wydawana przez IEEE producentom sprzętu sieciowego. Unikalność identyfikatorów uuid wersji 1 i wersji 2 opartych na adresach MAC kart sieciowych zależy również od tego, czy producenci kart sieciowych prawidłowo przypisują unikalne adresy MAC do swoich kart, które podobnie jak inne procesy produkcyjne są narażone na błędy.

użycie adresu MAC karty sieciowej węzła dla identyfikatora węzła oznacza, że uuid w wersji 1 może być śledzony z powrotem do komputera, który go utworzył. Dokumenty można czasami przypisać do komputerów, na których zostały utworzone lub edytowane za pomocą uuid osadzonych w nich przez oprogramowanie do edycji tekstu. Ta dziura Prywatności została użyta do zlokalizowania twórcy wirusa Melissa.

RFC 4122 pozwala na zastąpienie adresu MAC w uuid wersji 1 (lub 2) losowym 48-bitowym identyfikatorem węzła, ponieważ węzeł nie ma adresu MAC lub nie jest pożądane jego ujawnianie. W takim przypadku RFC wymaga, aby najmniej znaczący bit pierwszego oktetu ID węzła był ustawiony na 1. Odpowiada to bitowi multicastu w adresach MAC, a ustawienie służy do rozróżniania identyfikatorów uuid, w których identyfikator węzła jest losowo generowany z identyfikatorów uuid na podstawie adresów MAC z kart sieciowych, które zazwyczaj mają adresy MAC unicast.

Wersja 2 (Data-godzina i adres MAC, wersja bezpieczeństwa DCE)Edycja

RFC 4122 rezerwuje wersję 2 dla uuid „DCE security”; ale nie podaje żadnych szczegółów. Z tego powodu wiele implementacji UUID pomija wersję 2. Jednak Specyfikacja uuid wersji 2 jest dostarczana przez specyfikację DCE 1.1 Authentication and Security Services.

uuid wersji-2 są podobne do wersji 1, z wyjątkiem tego, że najmniej znaczące 8 bitów sekwencji zegara są zastępowane przez liczbę „domeny lokalnej”, a najmniej znaczące 32 bity znacznika czasu są zastępowane przez identyfikator całkowity mający znaczenie w podanej domenie lokalnej. W systemach POSIX numery domen lokalnych 0 i 1 są odpowiednio dla identyfikatorów użytkowników (UID) i identyfikatorów grup (GID), a inne numery domen lokalnych są definiowane przez witrynę. W systemach innych niż POSIX wszystkie lokalne numery domen są definiowane przez stronę.

możliwość włączenia 40-bitowej domeny/identyfikatora w UUID wiąże się z kompromitacją. Z jednej strony, 40 bitów pozwala na około 1 bilion wartości domeny / identyfikatora na identyfikator węzła. Z drugiej strony, z wartością zegara obciętą do 28 najważniejszych bitów, w porównaniu do 60 bitów w wersji 1, zegar w wersji 2 UUID „tyka” tylko raz na 429,49 sekundy, nieco więcej niż 7 minut, w przeciwieństwie do co 100 nanosekund w wersji 1. A przy sekwencji zegara wynoszącej tylko 6 bitów, w porównaniu do 14 bitów w wersji 1, tylko 64 unikalne uuid na węzeł/domenę/identyfikator można wygenerować za 7-minutowy tik zegara, w porównaniu do 16 384 wartości sekwencji zegara w wersji 1. W związku z tym Wersja 2 może nie być odpowiednia dla przypadków, w których wymagane są uuid, na węzeł/domenę/identyfikator, z szybkością przekraczającą jeden na siedem sekund.

Wersje 3 i 5 (oparte na nazwach)Edycja

identyfikatory uuid wersji 3 i wersji 5 są generowane przez zahaszowanie identyfikatora i nazwy przestrzeni nazw. Wersja 3 używa MD5 jako algorytmu haszującego, a wersja 5 używa SHA-1.

identyfikator przestrzeni nazw jest sam w sobie UUID. Specyfikacja zapewnia uuid do reprezentowania przestrzeni nazw dla adresów URL, w pełni kwalifikowanych nazw domen, identyfikatorów obiektów i wyróżnianych nazw X. 500; ale każdy pożądany UUID może być używany jako wyznacznik przestrzeni nazw.

aby określić uuid wersji-3 odpowiadający danej przestrzeni nazw i nazwie, UUID przestrzeni nazw jest przekształcany w ciąg bajtów, połączony z nazwą wejściową, a następnie zaszyfrowany za pomocą MD5, dając 128 bitów. Następnie 6 lub 7 bitów zastępuje się stałymi wartościami, wersja 4-bitowa (np. 00112 dla wersji 3) oraz 2-lub 3-bitowy „wariant” UUID (np. 102 wskazujący na RFC 4122 uuid lub 1102 wskazujący na starszy identyfikator GUID Microsoft). Ponieważ 6 lub 7 bitów jest z góry określonych, tylko 121 lub 122 bity przyczyniają się do wyjątkowości UUID.

uuid wersji-5 są podobne, ale zamiast MD5 używa się SHA-1. Ponieważ SHA-1 generuje 160-bitowe skróty, skrót jest obcinany do 128 bitów przed wymianą bitów wersji i wariantu.

uuid wersji-3 i wersji-5 mają właściwość, że ta sama przestrzeń nazw i nazwa będą mapowane do tego samego UUID. Jednak ani Przestrzeń nazw, ani nazwa nie mogą być określone z UUID, nawet jeśli jeden z nich jest określony, z wyjątkiem wyszukiwania brute-force. RFC 4122 zaleca wersję 5 (SHA-1) zamiast wersji 3 (MD5) i ostrzega przed używaniem uuid każdej z wersji jako poświadczeń bezpieczeństwa.

Wersja 4 (losowa)Edycja

losowo generowany jest UUID w wersji 4. Podobnie jak w innych uuid, 4 bity są używane do wskazania wersji 4, A 2 lub 3 bity do wskazania wariantu (102 lub 1102 odpowiednio dla wariantów 1 i 2). Tak więc, dla wariantu 1 (czyli większości uuid) losowa wersja-4 UUID będzie miała 6 z góry określonych bitów wariantu i wersji, pozostawiając 122 bity dla losowo wygenerowanej części, w sumie 2122, lub 5,3×1036 (5,3 undecillion) możliwej wersji-4 variant-1 uuid. Istnieje o połowę mniej możliwych identyfikatorów uuid wersji-4 variant-2 (starsze identyfikatory GUID), ponieważ dostępny jest jeden losowy bit Mniej, 3 bity są zużywane dla wariantu.