Zum Hauptinhalt springen

UUID-Versionen

Eine UUID ist eine 128-Bit-Kennung, geschrieben als 32 Hex-Ziffern in 8-4-4-4-12-Gruppen, standardisiert in RFC 9562. Das Versions-Nibble verrät, wie sie entstanden ist: v1 und v6 aus einer Uhr, v3 und v5 aus einem Namens-Hash, v4 aus Zufälligkeit, v7 aus einem Unix-Zeitstempel plus Zufälligkeit – jeweils mit unterschiedlichen Abwägungen bei Ordnung und Privatsphäre.

Nur lokal

UUID-Versionen erklärt

Zwei Systeme, die sich nie begegnet sind, müssen eine Zeile, eine Anfrage oder eine Datei benennen, ohne irgendwen zu fragen. Das ist das Problem, das UUIDs lösen: Erzeugen Sie eine Kennung aus lokalen Informationen – einer Uhr, Zufallsbits, einem Namen –, und die Wahrscheinlichkeit, dass jemand anders denselben Wert erzeugt, ist klein genug, um damit zu planen. Kein Koordinationsdienst, kein geteilter Zähler, um den konkurriert wird, kein zentrales Verzeichnis zum Nachschlagen.

Der aktuelle Standard ist RFC 9562, veröffentlicht im Mai 2024 als Nachfolger von RFC 4122; seine markanteste Änderung ist der offizielle Status für zwei neuere Versionen: v6 und v7. Die Version steckt im höchstwertigen Nibble der dritten Gruppe – der ersten Hex-Ziffer nach dem zweiten Bindestrich –, und die Varianten-Bits eröffnen die vierte Gruppe. Wer diese beiden Ziffern liest, erkennt die Herkunft einer UUID auf einen Blick.

Dieser Leitfaden erklärt das Bit-Layout jeder Version, worin sie stark ist und wo ihre Ehrlichkeit endet – einschließlich des Privatsphäre-Preises der eingebetteten MAC-Adresse von v1 und der Kollisionsmathematik hinter v4. Der unten verlinkte Generator erzeugt mehrere Versionen lokal, sodass Sie das Muster auf Ihrem eigenen Rechner untersuchen können.

Jedes der folgenden Layouts liest sich an einem echten Exemplar leichter – der UUID-Generator erzeugt v4- und v7-Kennungen in Ihrem Browser, und nichts davon wird protokolliert oder irgendwohin gesendet.

Kennungen reisen auch innerhalb von Token; der Leitfaden zur JWT-Struktur zeigt, wo eine jti-Claim eine UUID trägt und warum das Token um sie herum signiert, aber nicht geheim ist.

Anatomie: 128 Bits in 36 Zeichen

Eine UUID ist 128 Bits, kanonisch geschrieben als 32 kleingeschriebene Hexadezimalziffern in fünf durch Bindestriche getrennten Gruppen zu 8-4-4-4-12 – 36 Zeichen mit den Bindestrichen, 32 ohne. Das Layout ist keine Dekoration: Bestimmte Bitbereiche tragen Bedeutung. Das vier Bit große Versionsfeld nimmt das höchste Nibble der dritten Gruppe ein, und die zwei Bit große Variante – die RFC-artige UUIDs von älteren Microsoft- und Legacy-Layouts unterscheidet – nimmt die oberen Bits der vierten Gruppe ein und liest sich hexadezimal immer als 8, 9, a oder b.

GruppeBeispielziffernInhalt (gezeigt für eine v1)
1614e4000time_low – die niederwertigsten Zeitstempel-Bits
226bctime_mid – die mittleren Zeitstempel-Bits
311ef12 Zeitstempel-Bits, dann die 4-Bit-Version – die 1 steht für v1
4b17d2-Bit-Variante (binär 10), dann 14 Clock-Sequence-Bits
50242ac12000248 Node-Bits – bei v1 die MAC-Adresse der erzeugenden Maschine

Vier Versionen, ein Blick

v1  614e4000-26bc-11ef-b17d-0242ac120002
v4  f7b17bde-5a0c-4174-8c95-407558615543
v6  1ec9414c-232a-6b00-b3c8-9e6bdeced846
v7  019b76da-a800-7c3e-8f2a-5b6c7d8e9f0a

Wo Sie hinschauen

3rd group, 1st hex digit = version (1, 4, 6, 7 here)
4th group, 1st hex digit = variant (b, 8, b, 8 here)

v1 und v6: eine Uhr und eine MAC-Adresse

v1 baut die Kennung aus einem 60-Bit-Zeitstempel auf, der 100-Nanosekunden-Intervalle seit dem 15. Oktober 1582 zählt – dem Beginn des Gregorianischen Kalenders –, plus einem Clock-Sequence-Zähler und der 48-Bit-MAC-Adresse der Maschine. Der Zeitstempel wird unschön aufgeteilt in time_low, time_mid, time_high – eine Feldreihenfolge, gewählt aus einem Bit-Packing-Komfort der 1990er Jahre und später bereut. Die MAC-Adresse ist die Privatsphäre-Mine: Jede v1-UUID verrät, welche Hardware sie erzeugt hat; deshalb erlaubte RFC 4122 schon den Ersatz durch einen zufälligen Multicast-Node.

v6 ist v1 mit korrigierter Feldreihenfolge: Die höchstwertigen Zeitstempel-Bits rücken nach vorn, sodass v6-UUIDs chronologisch sortieren, wenn man sie als Zeichenketten sortiert. Gleiche Uhr, gleiches Node-Feld, gleiche Privatsphäre-Einschränkungen – aber deutlich besseres Datenbankverhalten, und genau das ist der Sinn der Umordnung.

Derselbe Zeitstempel, zwei Feldreihenfolgen

v1:  614e4000-26bc-11ef-b17d-0242ac120002
v6:  1ec9414c-232a-6b00-b3c8-9e6bdeced846

Was sich in einem String-Index korrekt sortiert

v6 – das Feld timeHigh steht vorn, daher ist die
lexikografische Ordnung die chronologische. v1 beginnt
mit den niedrigstwertigen Bits und streut stattdessen.

v3 und v5: Identität aus einem Namen

v3 und v5 leiten die Kennung aus einer Namespace-UUID und einem Namen ab, gehasht mit MD5 (v3) oder SHA-1 (v5). Gleicher Namespace, gleicher Name, gleiche UUID – auf jeder Maschine, für immer. Dieser Determinismus ist das Merkmal: Stabile Kennungen lassen sich aus URLs, Benutzernamen oder Domainnamen ableiten, ohne eine Zuordnungstabelle zu speichern, und jederzeit auf jedem System neu erzeugen.

Der Preis ist die Kehrseite des Determinismus: Die Kennung verrät Informationen über den Namen. Eine v5 eines Namens mit niedriger Entropie lässt sich durch simples Raten bestätigen, und identische Namen erzeugen absichtlich identische Kennungen. v5 löst v3 ab – SHA-1 statt MD5 –, und obwohl RFC 9562 keine neue namensbasierte Version benennt, weichen neue Entwürfe, die sowohl Determinismus als auch Zeitordnung wollen, meist zu v7 aus und speichern den Namen daneben.

Deterministisch: gleiche Eingabe, gleiche Ausgabe

namespace: DNS   6ba7b810-9dad-11d1-80b4-00c04fd430c8
name:      python.org

v3  6fa459ea-ee8a-3ca4-894e-db77e160355e
v5  886313e1-3b8a-5372-9b90-0c9aee199e5d

Warum sie sich überall reproduziert

hash(namespace bytes || "python.org") mit Version
(3 oder 5) und Variante (binär 10) an festen
Bitpositionen – dieselbe Berechnung, Bit für Bit.

v4: 122 zufällige Bits und was sie bringen

v4 setzt 122 Bits aus einem kryptografisch sicheren Zufallsgenerator; nur die Versions- und Varianten-Nibbles sind festgelegt. Die Kollisionswahrscheinlichkeit folgt der Geburtstags-Schranke: Nach dem Erzeugen von n Werten liegt die Chance auf irgendeinen Duplikat bei etwa n²/2¹²³. Sie bräuchten rund 2^61 UUIDs – etwa 2,3 Trillionen –, um eine Münzwurf-Chance auf eine einzige Kollision zu haben. Wenn in der Praxis doch Duplikate auftauchen, liegt die Ursache fast immer an gebrochener Zufälligkeit – ein schwacher Seed, wiederverwendeter PRNG-Zustand, ein Hardwarefehler –, nie an den Wahrscheinlichkeiten selbst.

Zufälligkeit ist zugleich v4s Schwäche als Datenbankschlüssel: Vollständig ungeordnete Werte landen in zufälligen B-Tree-Seiten, fragmentieren Indexe und erschöpfen Schreib-Caches bei großen Datenmengen. Genau diese Beschwerde sollte die Standardisierung von v6 und v7 beheben, und deshalb steuern viele ORMs und verteilte Datenbanken neue Tabellen heute Richtung v7.

v7: Unix-Millisekunden plus Zufälligkeit

v7 ist der moderne Standard-Kandidat: 48 Bits Unix-Zeitstempel in Millisekunden, dann 12 plus 62 Bits zufälliger Payload. Der führende Zeitstempel macht v7-UUIDs als Zeichenketten sortierbar – indexfreundlich ausgerechnet in den Datenbanken, die sie speichern –, während die 74 zufälligen Bits die Kollisionswahrscheinlichkeit praktisch auf v4-Niveau halten. Er braucht keine MAC-Adresse, keine Epoche von 1582 und keine Kalenderumrechnungen.

Innerhalb derselben Millisekunde beschreibt RFC 9562 einen monotonen Zähler im Feld rand_a, sodass Kennungen in schneller Folge trotzdem weiter steigen – eine Eigenschaft, die Primärschlüssel noch mehr interessiert als rohe Eindeutigkeit. Der Zeitstempel ist auch lesbar: Er liest sich als 2026, nicht als Zählwerk von 100-Nanosekunden-Ticks seit 1582, was v7 in Logs und Abfrageergebnissen angenehm für den Blick macht.

Zeitlich geordnet von Grund auf

2026-01-01T00:00:00Z  019b76da-a800-7c3e-8f2a-5b6c7d8e9f0a
2026-01-01T00:00:01Z  019b76da-abe8-9d41-8c2f-4a5b6c7d8e9f

Als Strings sortiert, zeitlich sortiert

019b76da-a800-… < 019b76da-abe8-…

die lexikografische Ordnung entspricht der zeitlichen,
und die oberen 48 Bits sind ein Unix-Zeitstempel in ms.

Eine Version wählen – ehrlich

Für neue Projekte: v7, wenn Kennungen zeitlich sortieren sollen oder in einem Datenbankindex leben; sonst v4 – beide brauchen keine Koordination und verraten nichts über ihren Ursprung. v5 zahlt sich aus, wenn die Kennung aus einem Namen reproduzierbar sein muss. v1 und v6 bleiben unterstützt, geben aber Hardware-Identität preis, sofern der Generator das Node-Feld nicht randomisiert; v3 ist MD5-Erbe, das aus Kompatibilitätsgründen mitgeschleppt wird. Keine der Versionen ist geheim, und keine anonymisiert Daten: Eine UUID ist ein Name, kein Nachweis.

VersionQuelle der BitsAls String sortierbarAchtung bei
v1Gregorianischer Zeitstempel + Clock Sequence + MAC-NodeNeinPreisgabe der MAC-Adresse
v3MD5 aus Namespace + NameNeinMD5-Erbe; Namen sind ratbar
v4122 zufällige BitsNeinZufällige Einfügereihenfolge fragmentiert Indexe
v5SHA-1 aus Namespace + NameNeinDeterministisch – Namen durch Raten bestätigbar
v6v1, umgeordnet für SortierbarkeitJaDieselbe MAC-Einschränkung wie bei v1
v7Unix-Zeitstempel in ms + 74 zufällige BitsJaGleiche Millisekunde ohne monotonen Zähler

Häufig gestellte Fragen

Werden die auf dieser Website erzeugten UUIDs irgendwo aufgezeichnet?

Nein. Der Generator erzeugt Kennungen mit der eigenen Zufalls-API Ihres Browsers innerhalb des Tabs – es gibt keinen Upload-Schritt und kein serverseitiges Protokoll, denn der Code sendet nie eine Anfrage. Sie können zusehen, wie das Netzwerk-Panel still bleibt, während er arbeitet, und die Content-Security-Policy der Website blockiert ausgehende Verbindungen während der gesamten Lebensdauer der Seite.

Können zwei UUIDs in der Praxis kollidieren?

Bei v4 setzt die Geburtstags-Schranke die Münzwurf-Wahrscheinlichkeit für einen Duplikat bei rund 2^61 erzeugten Werten an – etwa 2,3 Trillionen. Echte Kollisionen deuten fast immer auf gebrochene Zufälligkeit hin, nicht auf Pech: ein schwacher Seed, wiederverwendeter PRNG-Zustand oder ein Hardwarefehler im Zufallsgenerator. v3 und v5 „kollidieren“ absichtlich – derselbe Name im selben Namespace ergibt konstruktionsgemäß dieselbe UUID.

Warum sortieren manche UUIDs schlecht als Datenbank-Primärschlüssel?

Zufällige Versionen (v4) verstreuen neue Zeilen über einen B-Tree-Index, schreiben auf unvorhersehbare Seiten und wirbeln den Cache auf, während die Tabelle wächst. Zeitlich geordnete Versionen (v6, v7) hängen stattdessen nahe der rechten Kante des Index an. Wenn Sie an v4-Schlüsseln festhalten, sind die üblichen Abhilfen eine separate zeitlich geordnete Clustering-Spalte oder das Umstellen neuer Zeilen auf v7.

Ist eine UUID geheim oder anonym?

Weder noch. Eine UUID ist eine Kennung, kein Nachweis: Sie trägt keinen Beweis darüber, wer sie besitzt, und eine v1 sendet sogar die MAC-Adresse der erzeugenden Maschine hinaus, sofern das Node-Feld nicht randomisiert wurde. Behandeln Sie UUIDs als Namen – gefahrlos zu protokollieren, nützlich zum Korrelieren –, und legen Sie Authentifizierung und Autorisierung in Mechanismen, die tatsächlich etwas verifizieren können.

Was ist der Unterschied zwischen einer GUID und einer UUID?

Sie bezeichnen dieselbe Familie von 128-Bit-Kennungen; GUID ist Microsofts Begriff. Der technische Unterschied liegt in den Varianten-Bits am Anfang der vierten Gruppe, die RFC-artige UUIDs (binär 10 – erste Hex-Ziffer 8, 9, a oder b) von älteren Microsoft- und Legacy-Layouts unterscheiden. Moderne GUIDs werden als RFC-Varianten erzeugt, weshalb beide Begriffe in den meisten Dokumentationen austauschbar verwendet werden.

Warum beginnt der v1-Zeitstempel im Jahr 1582?

Der 60-Bit-Zähler tickt in 100-Nanosekunden-Intervallen ab der Gregorianischen Kalenderreform am 15. Oktober 1582 – gewählt, damit der Zähler weit genug in der Vergangenheit begann und für Jahrtausende nicht überläuft. Der Preis ist die Lesbarkeit: Ein v1-Zeitstempel ist ohne Umrechner bedeutungslos. Die Unix-Millisekunden von v7 wählte man auch deshalb, weil sie sich direkt als Datum lesen.

Wo kann ich die hier zitierten Standards nachlesen?

  • RFC 9562 — Universell eindeutige Kennungen (UUIDs)
  • RFC 4122 — URN-Namensraum für universell eindeutige Kennungen (UUID) (durch RFC 9562 abgelöst)