Was eine UUID ist und wie sie aufgebaut ist
Eine UUID (Universally Unique Identifier) ist eine 128-Bit-Kennung, die ohne zentrale Vergabestelle eindeutig sein soll. Geschrieben wird sie als 32 Hexadezimalziffern in fünf Gruppen nach dem Schema 8-4-4-4-12, zum Beispiel 919108f7-52d1-4320-9bac-f847db4148a8. Maßgeblich ist heute RFC 9562, der den älteren RFC 4122 ablöst. Microsoft nennt dasselbe Format GUID und schreibt es oft in Großbuchstaben mit geschweiften Klammern.
Zwei Stellen verraten, um welche Art UUID es sich handelt. Die erste Ziffer der dritten Gruppe ist die Version – im Beispiel die 4 in 4320. Die erste Ziffer der vierten Gruppe enthält die Variante: Bei UUIDs nach RFC 9562 ist sie 8, 9, a oder b. Im Ergebnis oben sind beide Stellen farbig markiert; das Feld „UUID prüfen und zerlegen“ zeigt die Felder einer vorhandenen UUID einzeln an.
Die Versionen im Überblick
| Version | Inhalt | Typischer Einsatz |
|---|---|---|
1 | Zeitstempel (100-ns-Schritte seit 15.10.1582), Clock-Sequence, Knoten-ID (oft die MAC-Adresse) | ältere Systeme; verrät Erzeugungszeit und Rechner |
3 / 5 | MD5- bzw. SHA-1-Hash aus Namensraum und Name | gleiche Eingabe ergibt immer dieselbe UUID |
4 | 122 zufällige Bits | Standardfall für IDs in Datenbanken, APIs und Dateisystemen |
6 | wie Version 1, Zeitstempel aber so umgeordnet, dass sie sortierbar ist | Übergang von Version 1 |
7 | Unix-Zeit in Millisekunden (48 Bit) plus 74 zufällige Bits | zeitlich sortierbare Datenbankschlüssel |
8 | frei gestaltbar, nur Version und Variante sind festgelegt | eigene, anwendungsspezifische Formate |
| Nil / Max | alle Bits 0 bzw. alle Bits 1 | Platzhalter für „keine UUID“ bzw. Obergrenze |
Version 2 (DCE Security) ist im RFC nur erwähnt und spielt in der Praxis kaum eine Rolle. Für neue Anwendungen empfiehlt RFC 9562, Version 7 statt Version 1 oder 6 zu verwenden.
Version 4 oder Version 7?
Version 4 besteht fast nur aus Zufall. Die Wahrscheinlichkeit einer Kollision ist so gering, dass sie praktisch keine Rolle spielt: Für eine 50-prozentige Chance auf ein einziges doppeltes Paar müsste man etwa 2,7 × 1018 UUIDs erzeugen. Voraussetzung ist ein guter Zufallsgenerator – dieser Generator nutzt crypto.getRandomValues Ihres Browsers.
Version 7 beginnt mit einem Zeitstempel in Millisekunden. Neue Werte sind dadurch größer als ältere und landen in einem B-Baum-Index am Ende, statt wie bei Version 4 quer über den ganzen Index verteilt zu werden. Das schont Datenbanken mit vielen Einfügungen. Innerhalb derselben Millisekunde zählt dieser Generator den Zufallsteil hoch, sodass auch schnell hintereinander erzeugte Werte streng aufsteigend sortiert bleiben. Der Nachteil: Jede v7-UUID verrät, wann sie erzeugt wurde. Wo das nicht nach außen dringen soll, etwa in öffentlichen URLs, ist Version 4 die bessere Wahl.
Speichern Sie UUIDs in Datenbanken möglichst in einem eigenen UUID-Datentyp oder binär mit 16 Byte statt als Text mit 36 Zeichen. PostgreSQL bringt dafür den Typ uuid mit, die Funktion gen_random_uuid() erzeugt dort Version-4-Werte.
UUIDs auf der Kommandozeile
# Linux: zufällige UUID (Version 4)
cat /proc/sys/kernel/random/uuid
uuidgen
# UUIDs der Dateisysteme anzeigen (für /etc/fstab)
sudo blkid
# Python
python3 -c 'import uuid; print(uuid.uuid4())'
Unter Windows liefert New-Guid in der PowerShell eine zufällige GUID.
Häufige Fragen
Ist eine GUID dasselbe wie eine UUID?
Ja, im heutigen Sprachgebrauch schon. GUID ist Microsofts Bezeichnung für dasselbe 128-Bit-Format. Die meisten heute erzeugten GUIDs sind gewöhnliche UUIDs der Version 4. Eine eigene Microsoft-Variante (Ziffer c oder d an der Variantenstelle) ist nur aus Kompatibilitätsgründen reserviert.
Sind UUIDs geheim oder sicher als Zugangsschlüssel?
Eine UUID ist eine Kennung, kein Geheimnis. Version 4 enthält zwar 122 Zufallsbits, sie wird aber oft in Logs, URLs und Datenbanken sichtbar. Für Passwörter, API-Schlüssel oder Sitzungs-Tokens verwenden Sie besser dafür gedachte Verfahren. Version 1, 6 und 7 enthalten zudem einen Zeitstempel, den jeder auslesen kann.
Groß- oder Kleinbuchstaben?
Beides beschreibt dieselbe UUID; beim Einlesen spielt die Schreibweise keine Rolle. Verbreitet ist die Ausgabe in Kleinbuchstaben, so sah es schon RFC 4122 vor. Manche Windows-Werkzeuge und die Registry verwenden Großbuchstaben mit Klammern – dafür gibt es oben die passenden Formatoptionen.
Wofür braucht man die UUID in /etc/fstab?
Gerätenamen wie /dev/sdb1 können sich nach einem Neustart oder beim Umstecken ändern, die UUID des Dateisystems bleibt gleich. Deshalb bindet man Laufwerke in der /etc/fstab über UUID=… ein. Wie das Schritt für Schritt geht, zeigt die Anleitung Festplatten unter Linux einbinden – Partitionen, LVM und fstab.
Kann ich aus einer UUID das Erzeugungsdatum ablesen?
Bei Version 1, 6 und 7 ja: Fügen Sie die UUID in das Feld „UUID prüfen und zerlegen“ ein, dann zeigt das Tool den Zeitstempel in UTC und in Ihrer Ortszeit. Versionen 3, 4, 5 und 8 enthalten keinen auslesbaren Zeitstempel.