Articles

Universally unique identifier

Für beide Varianten 1 und 2 sind in den Standards fünf „Versionen“ definiert, und jede Version kann in bestimmten Anwendungsfällen besser geeignet sein als die anderen. Version wird durch die M in der Zeichenfolgendarstellung angezeigt.

Version-1-UUIDs werden aus einer Zeit und einer Knoten-ID (normalerweise der MAC-Adresse) generiert; Version-2-UUIDs werden aus einer Kennung (normalerweise einer Gruppen- oder Benutzer-ID), einer Zeit und einer Knoten-ID generiert; Die Versionen 3 und 5 erzeugen deterministische UUIDs, die durch Hashing einer Namespace-Kennung und; und Version-4-UUIDs werden mit einer zufälligen oder Pseudozufallszahl generiert.

Nil UUIDEdit

Die „nil“ UUID, ein Sonderfall, ist die UUID 00000000-0000-0000-0000-000000000000; das heißt, alle Bits auf Null gesetzt.

Version 1 (Datum-Uhrzeit und MAC-Adresse)Bearbeiten

Version 1verkettet die 48-Bit-MAC-Adresse des „Knotens“ (dh des Computers, der die UUID generiert) mit einem 60-Bit-Zeitstempel, der die Anzahl der 100-Nanosekunden-Intervalle seit Mitternacht 15 October 1582 Coordinated Universal Time (UTC), dem Datum, an dem der Gregorianische Kalender zum ersten Mal angenommen wurde. RFC 4122 gibt an, dass der Zeitwert je nach verwendetem Algorithmus um 3400 AD: 3 rollt, was bedeutet, dass der 60-Bit-Zeitstempel eine vorzeichenbehaftete Größe ist. Einige Software, z. B. die libuuid-Bibliothek, behandelt den Zeitstempel jedoch als vorzeichenlos und gibt die Rollover-Zeit in 5236 AD an. Die Rollover-Zeit gemäß ITU-T Rec. X.667 ist 3603 n. Chr.:v

Eine „eindeutige“ 13- oder 14-Bit-Taktfolge erweitert den Zeitstempel, um Fälle zu behandeln, in denen der Prozessortakt nicht schnell genug voranschreitet oder in denen mehrere Prozessoren und UUID-Generatoren pro Knoten vorhanden sind. Wenn UUIDs schneller generiert werden, als die Systemuhr voranschreiten könnte, können die unteren Bits der Zeitstempelfelder generiert werden, indem sie jedes Mal inkrementiert werden, wenn eine UUID generiert wird, um einen hochauflösenden Zeitstempel zu simulieren. Da jede UUID der Version 1 einem einzelnen Punkt im Raum (dem Knoten) und der Zeit (Intervallen und Taktfolge) entspricht, ist die Wahrscheinlichkeit, dass zwei ordnungsgemäß generierte UUIDs der Version 1 unbeabsichtigt gleich sind, praktisch gleich Null. Da die Zeit- und Taktfolge insgesamt 74 Bit beträgt, werden 274 (1.8 × 1022 oder 18 Sextillionen) Version-1-UUIDs können pro Knoten-ID mit einer maximalen Durchschnittsrate von 163 Milliarden pro Sekunde pro Knoten-ID generiert werden.

Im Gegensatz zu anderen UUID-Versionen beruhen UUIDs der Versionen 1 und 2, die auf MAC-Adressen von Netzwerkkarten basieren, für ihre Eindeutigkeit teilweise auf einer Kennung, die von einer zentralen Registrierungsstelle ausgegeben wird, nämlich dem Organizationally Unique Identifier (OUI) Teil der MAC-Adresse, die vom IEEE an Hersteller von Netzwerkgeräten ausgegeben wird. Die Eindeutigkeit von Version-1- und Version-2-UUIDs basierend auf Netzwerkkarten-MAC-Adressen hängt auch davon ab, dass Netzwerkkartenhersteller ihren Karten ordnungsgemäß eindeutige MAC-Adressen zuweisen, was wie bei anderen Herstellungsprozessen fehlerbehaftet ist.

Die Verwendung der Netzwerkkarten-MAC-Adresse des Knotens für die Knoten-ID bedeutet, dass eine Version-1-UUID zu dem Computer zurückverfolgt werden kann, der sie erstellt hat. Dokumente können manchmal zu den Computern zurückverfolgt werden, auf denen sie erstellt oder bearbeitet wurden, und zwar über UUIDs, die von Textverarbeitungssoftware in sie eingebettet wurden. Dieses Datenschutzloch wurde verwendet, um den Ersteller des Melissa-Virus zu lokalisieren.RFC 4122 erlaubt es, die MAC-Adresse in einer UUID der Version 1 (oder 2) durch eine zufällige 48-Bit-Knoten-ID zu ersetzen, entweder weil der Knoten keine MAC-Adresse hat oder weil es nicht wünschenswert ist, sie verfügbar zu machen. In diesem Fall verlangt der RFC, dass das niedrigstwertige Bit des ersten Oktetts der Knoten-ID auf 1 gesetzt wird. Dies entspricht dem Multicast-Bit in MAC-Adressen und die Einstellung dient zur Unterscheidung von UUIDs, bei denen die Knoten-ID zufällig aus UUIDs basierend auf MAC-Adressen von Netzwerkkarten generiert wird, die normalerweise Unicast-MAC-Adressen haben.

Version 2 (Datum-Uhrzeit und MAC-Adresse, DCE-Sicherheitsversion)Bearbeiten

RFC 4122 reserviert Version 2 für „DCE-Sicherheits“ -UUIDs; Es werden jedoch keine Details angegeben. Aus diesem Grund lassen viele UUID-Implementierungen Version 2 weg. Die Spezifikation von Version-2-UUIDs wird jedoch von der DCE 1.1 Authentication and Security Services Specification bereitgestellt.

Version-2-UUIDs ähneln Version 1, mit der Ausnahme, dass die niedrigstwertigen 8 Bits der Taktsequenz durch eine „local Domain“ -Nummer ersetzt werden und die niedrigstwertigen 32 Bits des Zeitstempels durch eine ganzzahlige Kennung ersetzt werden, die innerhalb der angegebenen lokalen Domäne sinnvoll ist. Auf POSIX-Systemen stehen die lokalen Domänennummern 0 und 1 für Benutzer-IDs (UIDs) bzw. Gruppen-IDs (GIDs), und andere lokale Domänennummern sind standortdefiniert. Auf Nicht-POSIX-Systemen sind alle lokalen Domänennummern standortdefiniert.

Die Möglichkeit, eine 40-Bit-Domäne / Kennung in die UUID aufzunehmen, ist mit einem Kompromiss verbunden. Einerseits erlauben 40 Bits etwa 1 Billion Domain / Identifier-Werte pro Knoten-ID. Auf der anderen Seite „tickt“ der Takt in einer UUID der Version 2, wenn der Taktwert im Vergleich zu 60 Bits in Version 1 auf die 28 höchstwertigen Bits abgeschnitten ist, nur einmal alle 429,49 Sekunden, etwas mehr als 7 Minuten, im Gegensatz zu alle 100 Nanosekunden für Version 1. Und mit einer Taktfolge von nur 6 Bit im Vergleich zu 14 Bit in Version 1 können nur 64 eindeutige UUIDs pro Knoten / Domäne / Kennung pro 7-Minuten-Takttick generiert werden, verglichen mit 16.384 Taktsequenzwerten für Version 1. Daher ist Version 2 möglicherweise nicht für Fälle geeignet, in denen UUIDs pro Knoten / Domäne / Kennung mit einer Rate von mehr als einer alle sieben Sekunden erforderlich sind.

Versionen 3 und 5 (Namespace-basiert)Bearbeiten

UUIDs der Versionen 3 und 5 werden durch Hashing einer Namespace-ID und eines Namens generiert. Version 3 verwendet MD5 als Hashing-Algorithmus und Version 5 verwendet SHA-1.

Der Namespace-Bezeichner ist selbst eine UUID. Die Spezifikation stellt UUIDs bereit, um die Namespaces für URLs, vollqualifizierte Domänennamen, Objektbezeichner und X.500 Distinguished Names darzustellen.

Um die Version-3-UUID zu bestimmen, die einem bestimmten Namespace und Namen entspricht, wird die UUID des Namespaces in eine Zeichenfolge von Bytes transformiert, mit dem Eingabenamen verkettet und dann mit MD5 gehasht, was 128 Bit ergibt. Dann werden 6 oder 7 Bit durch feste Werte ersetzt, die 4-Bit-Version (z. 00112 für Version 3) und die 2- oder 3-Bit-UUID „Variante“ (z. B. 102 für eine RFC 4122-UUID oder 1102 für eine ältere Microsoft-GUID). Da also 6 oder 7 Bit vorgegeben sind, tragen nur 121 oder 122 Bit zur Eindeutigkeit der UUID bei.

Version-5-UUIDs sind ähnlich, aber SHA-1 wird anstelle von MD5 verwendet. Da SHA-1 160-Bit-Digests generiert, wird der Digest auf 128 Bit abgeschnitten, bevor die Versions- und Variantenbits ersetzt werden.

Version-3- und Version-5-UUIDs haben die Eigenschaft, dass derselbe Namespace und derselbe Name derselben UUID zugeordnet werden. Aus der UUID können jedoch weder der Namespace noch der Name ermittelt werden, selbst wenn einer von ihnen angegeben ist, außer durch Brute-Force-Suche. RFC 4122 empfiehlt Version 5 (SHA-1) gegenüber Version 3 (MD5) und warnt vor der Verwendung von UUIDs beider Versionen als Sicherheitsanmeldeinformationen.

Version 4 (zufällig)Bearbeiten

Eine Version 4 UUID wird zufällig generiert. Wie in anderen UUIDs werden 4 Bits verwendet, um Version 4 anzuzeigen, und 2 oder 3 Bits, um die Variante anzuzeigen (102 oder 1102 für Varianten 1 bzw. 2). Somit hat für Variante 1 (dh die meisten UUIDs) eine zufällige Version-4-UUID 6 vorbestimmte Varianten- und Versionsbits, wobei 122 Bits für den zufällig generierten Teil übrig bleiben, was insgesamt 2122 oder 5,3 × 1036 (5,3 Undezillionen) mögliche Version-4-Variante-1-UUIDs ergibt. Es gibt halb so viele mögliche Version-4-Variante-2-UUIDs (Legacy-GUIDs), da ein zufälliges Bit weniger verfügbar ist, wobei 3 Bits für die Variante verbraucht werden.