UUID
Versionen
V1 - V7
UUIDs (Universally Unique Identifiers) haben mehrere Versionen (v1–v7), die sich vor allem darin unterscheiden, wie sie erzeugt werden. Jede Version hat ihren eigenen Zweck und Kompromisse (z. B. zwischen Zufälligkeit, Nachvollziehbarkeit und Sortierbarkeit).
Hier ist eine verständliche Übersicht:
🔹 UUID v1 – Zeit + MAC-Adresse
Prinzip: basiert auf Zeitstempel + Gerätekennung
- Enthält:
- Zeit (100-ns seit 1582 😄)
- MAC-Adresse des Geräts
- ✅ Vorteile:
- Hohe Wahrscheinlichkeit eindeutig
- Zeitlich sortierbar
- ❌ Nachteile:
- Datenschutzproblem (MAC-Adresse sichtbar)
- Kann Rückschlüsse auf Erstellungszeit geben
👉 Heute oft gemieden wegen Privacy
🔹 UUID v2 – DCE Security (selten genutzt)
Prinzip: wie v1, aber mit zusätzlicher Benutzer-/Gruppen-ID
- Erweiterung von v1 (POSIX UID/GID)
- ❌ Nachteile:
- Kaum verbreitet
- Nicht standardmäßig unterstützt
👉 Praktisch irrelevant in modernen Systemen
🔹 UUID v3 – Name-basiert (MD5)
Prinzip: Hash aus Name + Namespace
- Deterministisch:
- gleicher Input → gleiche UUID
- Verwendet:
- MD5 (heute kryptografisch schwach)
- ✅ Vorteil:
- Reproduzierbar
- ❌ Nachteil:
- MD5 gilt als unsicher
👉 Wird selten noch neu eingesetzt
🔹 UUID v4 – Zufällig
Prinzip: komplett zufällige Bits
- 122 zufällige Bits
- ✅ Vorteile:
- Sehr einfach
- Keine Infos über Ursprung
- Sehr geringe Kollisionswahrscheinlichkeit
- ❌ Nachteile:
- Nicht sortierbar
- Keine Struktur
👉 Am häufigsten verwendet
🔹 UUID v5 – Name-basiert (SHA-1)
Prinzip: wie v3, aber mit SHA-1
- Deterministisch
- Verwendet SHA-1 statt MD5
- ✅ Vorteil:
- Sicherer als v3
- ❌ Nachteil:
- SHA-1 ist inzwischen auch veraltet
👉 Wird noch genutzt, aber nicht ideal für neue Systeme
🔹 UUID v6 – Zeitbasiert (verbessertes v1)
Prinzip: wie v1, aber besser sortierbar
- Zeitstempel vorne angeordnet
- ✅ Vorteile:
- Lexikografisch sortierbar
- Besser für Datenbanken (Indexe)
- ❌ Nachteile:
- Teilweise noch Zeitinformationen enthalten
👉 Moderne Alternative zu v1
🔹 UUID v7 – Zeit + Zufall (modern)
Prinzip: Unix-Zeit + Zufallsbits
- Enthält:
- Unix-Timestamp (Millisekunden)
- Zufällige Bits
- ✅ Vorteile:
- Sortierbar nach Zeit
- Keine MAC-Adresse → besserer Datenschutz
- Gute Balance zwischen Struktur und Zufälligkeit
- ❌ Nachteile:
- Relativ neu (Support noch im Aufbau, aber wächst schnell)
👉 Aktuell die empfohlene moderne Wahl
🧠 Kurzvergleich
| Version | Basis | Sortierbar | Deterministisch | Typische Nutzung |
|---|---|---|---|---|
| v1 | Zeit + MAC | ✅ | ❌ | Legacy |
| v2 | v1 + UID | ✅ | ❌ | Kaum genutzt |
| v3 | MD5 Hash | ❌ | ✅ | Reproduzierbar |
| v4 | Zufall | ❌ | ❌ | Standard |
| v5 | SHA-1 Hash | ❌ | ✅ | Reproduzierbar |
| v6 | Zeit (neu sortiert) | ✅ | ❌ | DB-optimiert |
| v7 | Zeit + Zufall | ✅ | ❌ | Modern / empfohlen |
✅ Empfehlung (Stand heute)
- v4 → wenn dir Einfachheit reicht
- v7 → wenn du moderne Systeme baust (DB, Skalierung, Sortierung)
Aufbau
Struktur einer UUID
Grundstruktur einer UUID
Eine UUID besteht immer aus 128 Bits = 16 Bytes.
Typische Darstellung:
123e4567-e89b-12d3-a456-426614174000
Aufgeteilt:
8-4-4-4-12 Hex-Zeichen
Das entspricht:
- 32 Bit – 16 Bit – 16 Bit – 16 Bit – 48 Bit
Bit-Level Aufbau (allgemein)
Eine UUID hat zwei wichtige feste Bestandteile:
1. 🔢 Version (4 Bits)
- Gibt an, wie die UUID erzeugt wurde (v1–v7)
- Sitzt im 3. Block (die ersten 4 Bits davon)
Beispiel:
xxxxxxxx-xxxx-1xxx-....
↑
Version
2. 🧭 Variant (2–3 Bits)
- Gibt das Format der UUID an (meist RFC 4122 / 9562)
- Sitzt im 4. Block am Anfang
Typische Werte:
10xx→ Standard UUID (das, was du fast immer siehst)
Beispiel:
xxxxxxxx-xxxx-xxxx-8xxx-....
↑
Variant
📦 Beispiel analysiert
UUID:
123e4567-e89b-12d3-a456-426614174000
👉 Zerlegt:
123e4567→ Teil 1e89b→ Teil 212d3→ Teil 3 → Version = 1a456→ Teil 4 → Variant = a (= 1010 → RFC-konform)426614174000→ Teil 5
🧩 Unterschied je nach Version
Jetzt wird’s interessant:
Der Inhalt der 128 Bits hängt stark von der Version ab.
🔹 UUID v1 (Zeitbasiert)
Aufbau:
time_low (32)
time_mid (16)
time_high + version (16)
variant + clock_seq (16)
node (48)
Enthält:
- Zeitstempel
- Clock Sequence (gegen Kollisionen)
- MAC-Adresse
👉 Deshalb:
- eindeutig
- aber privacy-problematisch
🔹 UUID v4 (Random)
Aufbau:
random (122 bits)
+ version (4 bits)
+ variant (2-3 bits)
👉 Fast alles ist Zufall
Nur:
- Version
- Variant
sind fest codiert
🔹 UUID v7 (modern 🔥)
Aufbau (vereinfacht):
unix_ts_ms (48 bits)
version (4 bits)
rand (12 bits)
variant (2-3 bits)
rand (62 bits)
👉 Mischung aus:
- Zeit (Millisekunden seit 1970)
- Zufall
Vorteil:
- Sortierbar
- Keine MAC-Adresse
- Gute Verteilung
📊 Visuelle Darstellung (v7 Beispiel)
|------ Zeit (48) ------|ver|--- rand ---|var|-------- rand --------|
🧠 Wichtige Erkenntnisse
- UUID ist kein reiner Zufallsstring
- Einige Bits sind immer reserviert:
- Version
- Variant
- Je nach Version:
- Zeit enthalten ✅
- Hash enthalten ✅
- MAC enthalten ✅
- oder komplett random ✅
⚠️ Kleine Stolperfallen
- Hex-Darstellung ≠ echte interne Reihenfolge (Endianness kann verwirren)
- v1/v6 können Infos leaken (Zeit, Gerät)
- v4 ist nicht sortierbar → schlecht für DB-Indizes
- v7 löst viele dieser Probleme