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