Universally Unique Identifier

Universally Unique Identifier

Ein Universally Unique Identifier (UUID) ist ein Standard für Identifikatoren, der in der Softwareentwicklung verwendet wird. Er ist von der Open Software Foundation (OSF) als Teil des Distributed Computing Environment (DCE) standardisiert. Die Absicht hinter UUIDs ist, Informationen in verteilten Systemen ohne zentrale Koordination eindeutig kennzeichnen zu können.

Ein UUID besteht aus einer 16-Byte-Zahl, die hexadezimal notiert und in fünf Gruppen unterteilt wird. In ihrer Normalform sieht eine UUID beispielsweise so aus:

550e8400-e29b-11d4-a716-446655440000

Inhaltsverzeichnis

Aufbau

RFC 4122 beschreibt den Aufbau einer UUID. Die Namen der einzelnen Felder orientieren sich an der ursprünglichen UUID-Version 1 und sind bei den heute vorwiegend verwendeten zufällig generierten UUIDs nur noch von historischem Interesse.

Aufbau einer UUID nach RFC 4122
Offset Feldname Datentyp Beschreibung
0 time_low uint32_t Zeitstempel, niederwertigste 32 Bits
4 time_mid uint16_t Zeitstempel, mittlere 16 Bits
6 time_hi_and_version uint16_t Oberste Bits des Zeitstempels in den unteren 12 Bits des Feldes, die oberen 4 Bits dienen als Versionsbezeichner
8 clock_seq_high_and_reserved uint8_t Oberste 6 Bits der Clocksequenz (die obersten 2 Bits des Feldes sind in der hier beschriebenen UUID-Variante stets 1 0)
9 clock_seq_low uint8_t Untere 8 Bits der Clocksequenz
10 node uint48_t Eindeutige Node-Identifikationsnummer

Die obersten 4 Bits im Feld time_hi_and_version geben dabei die sogenannte Version der UUID an. Strenggenommen ist dies keine Version, sondern eine Art UUID-Subtyp. Folgende 5 Versionen sind bisher definiert worden:

UUID-Versionen nach RFC 4122
Version Beschreibung
1 ursprüngliche, zeitstempelbasierte UUID
2 DCE Security version
3 namensbasiert, MD5-gehasht
4 zufällig oder pseudozufällige UUID
5 namensbasiert, SHA1-gehasht

Zeitstempelbasierte UUIDs

Der Zeitstempel ist ein 60-Bit-Wert, der die seit dem 15. Oktober 1582 (Einführung des heutigen Gregorianischen Kalenders) vergangenen 100-ns-Intervalle zählt. Um die Zeitstempel eindeutig zu halten, falls die Systemzeit mal zurückgestellt werden muss, existiert ein Feld "Clock sequence", welches in diesem Fall entweder um 1 erhöht wird oder auf einen neuen (pseudo)zufälligen Wert gesetzt werden soll. Die Node-ID soll die MAC-Adresse einer der im System verbauten Netzwerkkarten sein oder ein pseudozufälliger Wert, falls das System keine MAC-Adresse besitzt.

(Pseudo)zufällig generierte UUIDs (Version 4)

Hierbei werden sämtliche Bits, die nicht vom UUID-Format auf feste Werte gesetzt werden, durch (pseudo-)zufällige Werte besetzt.

Obwohl die Eindeutigkeit für eine so generierte UUID nicht garantiert ist, ist die Gesamtzahl der zufällig generierten UUIDs mit 2^{122} \approx 5{,}3169 \cdot 10^{36} so groß, dass die Wahrscheinlichkeit der Erzeugung zweier gleicher UUIDs sehr klein ist, sofern die verwendeten Zufallszahlenalgorithmen gleichverteilte Zufallszahlen liefern. Daher können UUIDs beliebig ohne zentrales Kontrollorgan erzeugt und zur Kennzeichnung eingesetzt werden, ohne relevante Gefahr zu laufen, dass dieselbe UUID für etwas anderes verwendet wird. Mit UUID markierte Informationen können somit später in einer einzigen Datenbank zusammengeführt werden, ohne Bezeichnerkonflikte auflösen zu müssen.

Beispiele für Implementierung des UUID-Standards sind Microsofts Globally Unique Identifier (GUID), die Klasse java.util.UUID in der Java API und die Datei /proc/sys/kernel/random/uuid[1] unter Linux.

Namensbasierte UUIDs (Version 3 und 5)

Hierbei wird ausgehend von einem nicht näher bestimmten Namen eine UUID generiert. Namen sind innerhalb eines zugewiesenen Namensraum eindeutige Bezeichner für ein Objekt, eine Ressource oder Ähnliches. Ausgehend von einer UUID für den Namensraum wird aus dem Namen eine UUID generiert, indem eine Bytesequenz aus der Namensraum-UUID und dem Namen selbst gebildet wird und diese Bytesequenz dann mit MD5 oder SHA1 gehasht wird. Der Hash wird dann auf definierte Weise auf die verfügbaren UUID-Bits verteilt.

RFC 4122 enthält beispielhafte Namensraum-UUIDs für die Namensräume DNS, URL, ISO OID und "X.500 Distinguished Names".

Soll beispielsweise aus dem DNS-Namen www.example.org eine UUID-Version 5 generiert werden, so ist wie folgt vorzugehen:

  1. Namespace-UUID für "DNS"-Namen ist 6ba7b810-9dad-11d1-80b4-00c04fd430c8.
  2. Daraus bildet man folgende Bytesequenz (Bytes von der Namespace-UUID in fett):
    0x6b 0xa7 0xb8 0x10 0x9d 0xad 0x11 0xd1 0x80 0xb4 0x00 0xc0 0x4f 0xd4 0x30 0xc8 0x77 0x77 0x77 0x2e 0x65 0x78 0x61 0x6d 0x70 0x6c 0x65 0x2e 0x6f 0x72 0x67.
  3. Diese Bytesequenz ist mit SHA1 zu hashen. Das Ergebnis ist folgender SHA1-Hash: 74738ff55367e9589aee98fffdcd187694028007
  4. Die Bits des SHA1-Hashes sind auf die verfügbaren Bits der UUID-Version 5 aufzuteilen.
  5. Generierte UUID: 74738ff5-5367-5958-9aee-98fffdcd1876. (Die fett markierten Stellen enthalten feste Bits aus UUID-Variante und -Version.)

Geschichte und Standardisierung

UUID sind als Teil des Standards ISO/IEC 11578:1996 “Information technology – Open Systems Interconnection – Remote Procedure Call (RPC)” und als separater Standard ISO/IEC 9834-8:2005 dokumentiert. Die IETF hat das auf UUID basierende RFC 4122 veröffentlicht.

Das originale (Version 1) Generierungsschema für UUID war, die UUID-Version mit der MAC-Adresse des Computers, der die UUID generiert, und der Anzahl der 100-Nanosekunden-Intervalle seit Beginn des Gregorianischen Kalenders aneinanderzuhängen. In der Praxis ist der eigentliche Algorithmus komplizierter. Dieses Schema wurde kritisiert, weil es nicht ausreichend „dicht“ sei; es gibt sowohl die Identität des generierenden Computers als auch den Zeitpunkt der Generierung preis.

Mehrere andere Algorithmen zur Generierung wurden entwickelt und flossen in den Standard ein, so ein Schema, welches nur auf Zufallszahlen basiert (Version 4 UUID), und Schemata, in denen die UUID aus einem beliebigen String (z. B. DNS-Eintrag, URL, ISO OID, „X.500 Distinguished Names“, aber auch jeder beliebigen anderen Semantik, sofern eine Basis-UUID dafür definiert wird) über MD5- (Version 3 UUID) oder SHA-1- (Version 5 UUID) Hashwerte hergeleitet wird.

Das Release 5.0 von Java stellt eine Klasse zur Verfügung, die 128 Bit breite UUID generiert. Die API-Dokumentation für die Klasse java.util.UUID[2] verweist auf RFC 4122. Auch viele andere Sprachen stellen fertige Routinen zur Generierung von UUID bereit.

Variante: Microsoft GUID

Microsoft verwendet in seinem Component Object Model ebenfalls UUIDs, dort auch GUID genannt. Allerdings entsprechen diese IDs zum Teil einer eigenen Spezifikation. Die hier beschriebenen UUIDs sind an den obersten beiden Bits des Feldes clock_seq_high_and_reserved erkennbar. Sie haben stets den Wert 10; in der Hexadezimaldarstellung ist daher die erste Hexziffer der vierten Zahl stets zwischen 8hex und Bhex, z.B.: 5945c961-e74d-478f-8afe-da53cf4189e3. Die von Microsoft verwendeten historischen UUIDs haben in den obersten drei Bits dieses Feldes den Wert 110, in der Hexadezimaldarstellung ist daher die erste Hexziffer der vierten Zahl entweder Chex oder Dhex. Beispiel: Die GUID des IUnknown-Interfaces im COM besitzt die UUID 00000000-0000-0000-C000-000000000046.

Einzelnachweise

  1. Linux Programmer's Manual. RANDOM(4). In: The Linux Programming Interface. Michael Kerrisk, 29. August 2010, abgerufen am 25. Mai 2011 (englisch).
  2. Class UUID. In: Java Platform SE 6 API. Oracle, abgerufen am 25. Mai 2011 (englisch): „For more information including algorithms used to create UUIDs, see RFC 4122: A Universally Unique IDentifier (UUID) URN Namespace, section 4.2 "Algorithms for Creating a Time-Based UUID".“

Weblinks


Wikimedia Foundation.

Игры ⚽ Поможем решить контрольную работу

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Universally Unique Identifier — A Universally Unique Identifier (UUID) is an identifier standard used in software construction, standardized by the Open Software Foundation (OSF) as part of the Distributed Computing Environment (DCE). The intent of UUIDs is to enable… …   Wikipedia

  • Universally Unique Identifier — Un Identificador Universalmente Único (Universally Unique Identifier o UUID) es un identificador estándar usado en la construcción del software, estandarizado por la Open Software Foundation (OSF) como parte del Entorno de Computación Distribuida …   Wikipedia Español

  • Unique identifier — With reference to a given (possibly implicit) set of objects, a unique identifier is any identifier which is guaranteed to be unique among all identifiers used for those objects and for a specific purpose. There are three main types of unique… …   Wikipedia

  • Globally Unique Identifier — A Globally Unique Identifier or GUID (pronEng|ˈguːɪd or IPA|/ˈgwɪd/) is a special type of identifier used in software applications in order to provide a reference number which is unique in any context (hence, Globally ), for example, in defining… …   Wikipedia

  • Globally unique identifier — A globally unique identifier (GUID,  /ˈɡuːɪ …   Wikipedia

  • Globally Unique Identifier — Ein Globally Unique Identifier (GUID [gu:id]) ist eine global eindeutige Zahl mit 128 Bit (16 Bytes), die in verteilten Computersystemen zum Einsatz kommt. GUID stellt eine Implementierung des Universally Unique Identifier Standards (UUID) dar.… …   Deutsch Wikipedia

  • Universal Unique Identifier — UUID est l abréviation du terme anglais Universally Unique Identifier (identifiant universellement unique) utilisé en informatique. Il s agit d une spécification DCE définie initialement par l OSF (Open Software Foundation). Cette spécification… …   Wikipédia en Français

  • Globally Unique Identifier — Un Globally Unique Identifier (identificador globalmente único) o GUID es un número pseudoaleatorio empleado en aplicaciones de software. Aunque no se puede garantizar que cada GUID generado sea único, el número total de claves únicas (2128 o )… …   Wikipedia Español

  • Organizationally unique identifier — An Organizationally Unique Identifier (OUI) is a 24 bit number that is purchased from the Institute of Electrical and Electronics Engineers, Incorporated (IEEE) Registration Authority. This identifier uniquely identifies a vendor, manufacturer,… …   Wikipedia

  • Unique Material Identifier — Die Unique Material Identifier (UMID) ist ein Standard (SMPTE 330M) zum Generieren eindeutiger Kennzeichnungen (IDs) von multimedialen Dateien und Datenströmen. Die Länge einer UMID beträgt 32 Bytes (Basic UMID) oder 64 Bytes (Extended UMID). Die …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”