UUID Generator Online | UUIDs erstellen (v1, v3-v7)
Was ist eine UUID?
Eine UUID (Universally Unique Identifier) ist ein 128-Bit-Identifikator, der in Computersystemen zur eindeutigen Identifizierung von Informationen verwendet wird. UUIDs sind gemäß RFC 4122 standardisiert und garantieren aufgrund ihrer enormen Entropie eine praktisch null Kollisionswahrscheinlichkeit – das bedeutet, dass zwei unabhängig generierte UUIDs mit nahezu absoluter Sicherheit einzigartig sein werden.
Eine UUID hat das Standardformat: xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx, wobei jedes x eine hexadezimale Ziffer (0-9, a-f), M die UUID-Version und N die Variante angibt.
UUID-Versionen
UUID v1 (Zeitstempel + MAC-Adresse)
UUID v1 basiert auf einem aktuellen Zeitstempel und einem Zufallswert (im Browser anstelle der MAC-Adresse). Es verwendet 100-Nanosekunden-Intervalle ab dem 15. Oktober 1582 (Gregorianischer Kalender).
Verwendung:
- Situationen, in denen eine chronologische Sortierung von UUIDs erforderlich ist
- Debugging und Logging (UUID enthält Informationen zur Erstellungszeit)
- Verteilte Systeme mit Zeitsynchronisation
Beispiel: 6ba7b810-9dad-11d1-80b4-00c04fd430c8
Vorteile:
- UUIDs können chronologisch nach Erstellungszeit sortiert werden
- Nützlich für Audit und Debugging
- Enthält Zeitstempelinformationen
Nachteile:
- Potenzielles Sicherheitsrisiko – enthält Zeitstempel
- Enthält im Browser keine echte MAC-Adresse (ersetzt durch Zufallswert)
- Schlechte DB-Lokalität (Zeitstempel ist in Low-Order-Bits)
UUID v3 (MD5-Hash)
UUID v3 wird mithilfe eines MD5-Hashes eines Namespace-UUIDs und eines Namens generiert. Deterministisch – derselbe Namespace + Name erzeugen immer dieselbe UUID.
Verwendung:
- Konvertierung von URLs, DNS-Namen oder anderen Identifikatoren in UUIDs
- Situationen, in denen reproduzierbare UUIDs benötigt werden
- Mapping zwischen verschiedenen Identifikationssystemen
Beispiel: a3bb189e-8bf9-3888-9912-ace4e6543002
Vorteile:
- Deterministisch (gleiche Eingabe = gleiche Ausgabe)
- Ideal für die Konvertierung bekannter Identifikatoren
- Keine Kollision für unterschiedliche Eingaben
Nachteile:
- MD5 ist ein veralteter Algorithmus (bevorzugen Sie v5)
- Erfordert Namespace und Name
- Der ursprüngliche Eingabewert kann nicht wiederhergestellt werden
UUID v4 (Zufällig) - EMPFOHLEN
Die am häufigsten verwendete UUID-Version. UUID v4 wird rein zufällig mithilfe eines kryptografisch sicheren Zufallszahlengenerators (crypto.getRandomValues()) generiert.
Verwendung:
- Datenbank-Primärschlüssel
- Sitzungs-IDs (Session IDs)
- Eindeutige Dateinamen
- API-Token
- Allgemeine Zwecke, bei denen eine garantiert eindeutige ID benötigt wird
Beispiel: f47ac10b-58cc-4372-a567-0e02b2c3d479
Vorteile:
- Maximale Entropie und Sicherheit
- Keine Abhängigkeit von Zeit oder Systemparametern
- Einfachste Implementierung
Kollisionswahrscheinlichkeit: Beim Generieren von 1 Milliarde UUIDs pro Sekunde über 100 Jahre beträgt die Kollisionswahrscheinlichkeit ca. 0,00000006%.
UUID v5 (SHA-1-Hash)
UUID v5 ist wie v3, verwendet aber SHA-1 anstelle von MD5. Eine modernere und sicherere Alternative zu v3.
Verwendung:
- Gleich wie v3, aber mit besserer Sicherheit
- Für neue Projekte gegenüber v3 zu bevorzugen
- Generierung von UUIDs aus URLs, DNS-Namen, OID, X.500 DN
Beispiel: 886313e1-3b8a-5372-9b90-0c9aee199e5d
Vorteile:
- Deterministisch
- SHA-1 ist robuster als MD5
- Geeignet für das Mapping zwischen Systemen
Nachteile:
- SHA-1 wird ebenfalls als veraltet betrachtet (aber immer noch sicherer als MD5)
- Erfordert Namespace und Name
UUID v6 (Sortierbarer Zeitstempel)
UUID v6 ist eine verbesserte Version von v1 mit neu angeordneten Zeitbits für eine bessere Datenbankindexierung. Entwickelt, um Probleme mit der Lokalität in Datenbanken zu lösen.
Verwendung:
- Datenbank-Primärschlüssel mit zeitlicher Sortierung
- Systeme, die sowohl chronologische Sortierung als auch DB-Leistung erfordern
- Modernere Alternative zu v1
Beispiel: 1ec9414c-232a-6b00-b3c8-9e6bdeced846
Vorteile:
- Bessere DB-Lokalität als v1 (Zeitstempel in High-Order-Bits)
- Chronologische Sortierung
- Kompatibel mit dem UUID-Standard
Nachteile:
- Weniger verbreitet als v1/v4
- Enthält immer noch Zeitinformationen (Sicherheitsrisiko)
UUID v7 (Unix-Zeitstempel)
UUID v7 verwendet einen Unix-Zeitstempel (Millisekunden seit 1970) + Zufallsbits. Die neueste UUID-Version mit der besten Datenbanklokalität.
Verwendung:
- Moderne Datenbank-Primärschlüssel
- Systeme, die Leistung + zeitliche Sortierung erfordern
- Ersatz für v1/v6 in neuen Projekten
Beispiel: 017f22e2-79b0-7cc3-98c4-dc0c0c07398f
Vorteile:
- Beste DB-Lokalität aller Versionen
- Unix-Zeitstempel ist Standard
- Kombiniert die Vorteile von Zufälligkeit und zeitlicher Sortierung
Nachteile:
- Relativ neue Spezifikation (RFC 4122bis)
- Weniger Unterstützung in Legacy-Systemen
Welche UUID-Version sollte man verwenden?
Entscheidungsleitfaden
Benötigen Sie maximale Sicherheit und Zufälligkeit? → Verwenden Sie UUID v4 (häufigste Wahl)
Benötigen Sie zeitliche Sortierung und Datenbankleistung? → Verwenden Sie UUID v7 (modern) oder UUID v6 (Standard)
Benötigen Sie reproduzierbare UUIDs aus vorhandenen Identifikatoren? → Verwenden Sie UUID v5 (SHA-1) oder UUID v3 (MD5, Legacy)
Benötigen Sie einen Zeitstempel und einen Audit-Trail? → Verwenden Sie UUID v1 (Legacy, schlechtere DB-Leistung)
Datenbanken
Für neue Projekte: UUID v7 oder v4
- v7 ist ideal für zeitliche Sortierung + Leistung
- v4 für maximale Zufälligkeit ohne Zeitinformationen
Für Legacy-Systeme: UUID v1 oder v6
- v6 hat eine bessere DB-Lokalität als v1
- v1 wird weitgehend unterstützt
Vorteile von UUIDs als Primärschlüssel:
- Globale Eindeutigkeit – Sie können Daten aus verschiedenen Datenbanken ohne Konflikte zusammenführen
- Sicherheit – Im Gegensatz zu sequenziellen IDs (1, 2, 3…) können nächste Werte nicht erraten werden
- Verteilte Systeme – UUIDs können unabhängig auf mehreren Servern ohne Koordination generiert werden
- Datenbankzusammenführung – Beim Zusammenführen zweier Datenbanken entstehen keine Konflikte
Nachteile:
- Größerer Umfang (16 Bytes vs. 4-8 Bytes für Integer)
- Langsamere Indexierung in einigen Datenbanken (verwenden Sie v6/v7 für bessere Leistung)
- Weniger lesbar für Menschen
API und Webdienste
- REST API – Eindeutige Identifikatoren für Ressourcen
- GraphQL – Globale Identifikatoren für Nodes
- Webhooks – Verfolgung von Anfragen und Antworten
- Token – Sitzungs-IDs, Refresh-Token
Dateien und Speicher
- Dateinamen – Vermeidung von Kollisionen beim Hochladen
- S3/Cloud Storage – Eindeutige Pfade zu Objekten
- Cache-Schlüssel – Identifikatoren in Cache-Systemen
Frontend-Anwendungen
- React/Vue-Komponenten – Eindeutige Schlüssel für Listen
- Temporäre IDs – IDs vor dem Speichern in der Datenbank
- Lokaler Speicher – Schlüssel für gespeicherte Daten
- Offline-First-Anwendungen – Generierung von IDs ohne Serververbindung
Erweiterte Funktionen des Generators
Generieren von UUIDs mit benutzerdefiniertem Zeitstempel
Für zeitbasierte Versionen (v1, v6, v7) können Sie über einen Datums-/Uhrzeit-Selektor einen beliebigen Zeitstempel auswählen. Dies ist nützlich für:
Testen:
- Simulation von in der Vergangenheit erstellten UUIDs
- Testen der zeitlichen Sortierung in Datenbanken
- Reproduktion von UUIDs für Debugging
Datenmigration:
- Generierung von UUIDs mit historischen Zeitstempeln
- Nachfüllen von Daten mit korrekten Zeitstempelwerten
- Importieren von Daten aus verschiedenen Zeiträumen
Audit und Compliance:
- Rekonstruktion von UUIDs nach Erstellungszeit des Eintrags
- Retroaktive Generierung von Identifikatoren
Anwendungsbeispiel:
- Wählen Sie Version v1, v6 oder v7
- Stellen Sie Datum und Uhrzeit über den Datums-/Uhrzeit-Selektor ein
- Generieren Sie UUIDs mit Ihrem benutzerdefinierten Zeitstempel
Hash-basierte UUIDs (v3, v5)
Für deterministische UUIDs können Sie die Versionen v3 (MD5) oder v5 (SHA-1) verwenden:
Anwendung:
- Wählen Sie den Namespace entsprechend dem Typ Ihres Identifikators
- Geben Sie den Namen/Wert ein
- Generieren Sie die UUID
Beispiele:
| Namespace | Name (Eingabe) | Verwendung |
|---|---|---|
| DNS | example.com | Konvertierung eines Domainnamens in eine UUID |
| DNS | google.com | Jede Website hat eine eindeutige UUID |
| URL | https://example.com/page | Konvertierung einer URL in eine UUID |
| URL | https://api.example.com/users/123 | API-Endpunkt als UUID |
| OID | 1.3.6.1.4.1.343 | Object Identifier in UUID |
| X.500 | CN=John Doe,O=Company | Distinguished Name in UUID |
Wichtige Eigenschaften:
- ✅ Deterministisch: Gleiche Eingabe = immer gleiche UUID
- ✅ Reproduzierbar: Sie können die UUID jederzeit neu erstellen
- ✅ Konsistent: Gleiche UUID über verschiedene Systeme hinweg
- ❌ Nicht dekodierbar: Der ursprüngliche Name kann aus der UUID nicht wiederhergestellt werden
- ℹ️ Eine UUID: Für v3/v5 wird immer nur eine UUID generiert (gleiche Eingabe = gleiche Ausgabe)
Praktische Anwendung:
// Beispiel: Konvertierung einer URL in UUID v5
Namespace: URL
Name: https://example.com/api/users/123
Ergebnis: 886313e1-3b8a-5372-9b90-0c9aee199e5d
// Gleiche Eingabe = immer gleiche UUID
Namespace: DNS
Name: google.com
Ergebnis: immer gleiche UUID für google.com
Wie man UUIDs sicher verwendet?
Kryptografische Sicherheit
Unser Generator verwendet crypto.getRandomValues(), einen kryptografisch sicheren Zufallszahlengenerator. Im Gegensatz zu Math.random(), das vorhersehbar und für Sicherheitszwecke ungeeignet ist, liefert crypto.getRandomValues() echte Entropie, die geeignet ist für:
- Generierung von Sicherheitstoken
- Sitzungs-IDs (Session IDs)
- API-Schlüssel
- Kryptografische Anwendungen
Vergleich der UUID-Versionen
| Version | Basis | Kollisionen | Zeitliche Sortierung | DB-Leistung | Verwendung |
|---|---|---|---|---|---|
| v1 | Zeitstempel + MAC | Niedrig | ✅ Ja | ❌ Schlechter | Legacy, Audit |
| v3 | MD5-Hash | Keine (deterministisch) | ❌ Nein | ⚠️ Mittel | Konvertierungen (Legacy) |
| v4 | Zufällig | Extrem niedrig | ❌ Nein | ⚠️ Mittel | Allgemeine Verwendung |
| v5 | SHA-1-Hash | Keine (deterministisch) | ❌ Nein | ⚠️ Mittel | Konvertierungen (Empfohlen) |
| v6 | Sortierbarer Zeitstempel | Niedrig | ✅ Ja | ✅ Besser | Moderne DB mit Zeit |
| v7 | Unix-Zeitstempel | Niedrig | ✅ Ja | ✅ Am besten | Neue Projekte |
UUID vs. andere Identifikatoren
| Typ | Größe | Kollisionen | Zeitliche Sortierung | Verwendung |
|---|---|---|---|---|
| Auto-Increment ID | 4-8 Bytes | Garantiert eindeutig innerhalb der Tabelle | ❌ | Einfache Anwendungen, lokale DB |
| UUID v4 | 16 Bytes | Praktisch unmöglich | ❌ | Verteilte Systeme, API |
| UUID v7 | 16 Bytes | Praktisch unmöglich | ✅ | Moderne DB mit Leistung |
| ULID | 16 Bytes | Praktisch unmöglich | ✅ | UUID + lexikografische Sortierung |
| Snowflake ID | 8 Bytes | Bei richtiger Konfiguration garantiert eindeutig | ✅ | Twitter, verteilte Systeme |
| NanoID | Konfigurierbar | Abhängig von der Länge | ❌ | URL-freundliche IDs |
Implementierung in verschiedenen Sprachen
JavaScript/TypeScript
// UUID v4 - Einfachste Methode (moderne Browser)
const uuid = crypto.randomUUID();
// UUID v4 - Manuelle Implementierung
function generateUUIDv4() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, (c) => {
const r = (crypto.getRandomValues(new Uint8Array(1))[0] & 0x0f) >> (c === 'x' ? 0 : 2);
const v = c === 'x' ? r : (r & 0x3) | 0x8;
return v.toString(16);
});
}
// UUID v7 - Empfohlen für Datenbanken
function generateUUIDv7() {
const timestamp = Date.now();
const timeHi = (timestamp >> 16).toString(16).padStart(8, '0');
const timeLow = (timestamp & 0xFFFF).toString(16).padStart(4, '0');
const randomBytes = crypto.getRandomValues(new Uint8Array(10));
const randomHex = Array.from(randomBytes)
.map(b => b.toString(16).padStart(2, '0'))
.join('');
return `${timeHi}-${timeLow}-7${randomHex.substr(0, 3)}-${randomHex.substr(3, 4)}-${randomHex.substr(7)}`;
}
Python
import uuid
# UUID v4
uuid_v4 = str(uuid.uuid4())
# Output: '6ba7b810-9dad-11d1-80b4-00c04fd430c8'
# UUID v1
uuid_v1 = str(uuid.uuid1())
Java
import java.util.UUID;
// UUID v4
String uuidV4 = UUID.randomUUID().toString();
PHP
// UUID v4 (PHP 7+)
function generateUUID() {
return sprintf('%04x%04x-%04x-%04x-%04x-%04x%04x%04x',
mt_rand(0, 0xffff), mt_rand(0, 0xffff),
mt_rand(0, 0xffff),
mt_rand(0, 0x0fff) | 0x4000,
mt_rand(0, 0x3fff) | 0x8000,
mt_rand(0, 0xffff), mt_rand(0, 0xffff), mt_rand(0, 0xffff)
);
}
C#
using System;
// UUID v4
Guid uuid = Guid.NewGuid();
string uuidString = uuid.ToString();
Best Practices
Speichern von UUIDs in der Datenbank
PostgreSQL:
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT NOW()
);
MySQL 8.0+:
CREATE TABLE users (
id BINARY(16) PRIMARY KEY DEFAULT (UUID_TO_BIN(UUID())),
email VARCHAR(255) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
Tipp: Speichern Sie in MySQL UUIDs als BINARY(16) statt CHAR(36), um Speicherplatz zu sparen und die Indexierung zu beschleunigen.
UUID-Validierung
function isValidUUID(uuid) {
const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
return regex.test(uuid);
}
UUID-Konvertierung
// Entfernen von Bindestrichen
const compact = uuid.replace(/-/g, '');
// Bindestriche wieder hinzufügen
function formatUUID(compactUuid) {
return [
compactUuid.substring(0, 8),
compactUuid.substring(8, 12),
compactUuid.substring(12, 16),
compactUuid.substring(16, 20),
compactUuid.substring(20, 32)
].join('-');
}
Fehlerbehebung (Troubleshooting)
UUID v3/v5 funktioniert nicht
Problem: Nach Auswahl von v3 oder v5 wird nichts generiert
Lösung:
- ✅ Stellen Sie sicher, dass Sie das Feld “Name” ausgefüllt haben – es ist obligatorisch!
- ✅ Wählen Sie den richtigen Namespace entsprechend Ihrem Eingabetyp
- ✅ Beispiele für gültige Eingaben:
- DNS:
example.com,google.com - URL:
https://example.com/page - Beliebiger Text:
meine-anwendung-v1
- DNS:
Tipp: Versuchen Sie zuerst einen einfachen Wert wie test und den Namespace DNS.
Zeitbasierte UUIDs (v1, v6, v7) haben eine seltsame Zeit
Problem: Die generierte UUID hat einen unerwarteten Zeitstempel
Lösung:
- ✅ Überprüfen Sie den Datums-/Uhrzeit-Selektor – ist die richtige Zeit eingestellt?
- ✅ Der Datums-/Uhrzeit-Selektor verwendet Ihre lokale Zeitzone
- ✅ Lassen Sie den Datums-/Uhrzeit-Selektor leer für die aktuelle Zeit
UUID kann nicht kopiert werden
Problem: Die Schaltfläche “Alle kopieren” funktioniert nicht
Lösung:
- ✅ Stellen Sie sicher, dass Sie UUIDs generiert haben (sie sind nicht leer)
- ✅ Einige Browser erfordern HTTPS für die Clipboard API
- ✅ Alternativ wählen Sie den Text im Textfeld aus und kopieren ihn manuell (Strg+C)
Häufig gestellte Fragen (FAQ)
Kann es zu einer UUID-Kollision kommen?
Theoretisch ja, aber die Wahrscheinlichkeit ist astronomisch gering. Beim Generieren von 1 Milliarde UUID v4 pro Sekunde über 100 Jahre beträgt die Kollisionswahrscheinlichkeit ca. 0,00000006%. In der Praxis wird eine Kollision niemals auftreten.Ist eine UUID als Primärschlüssel in einer Datenbank geeignet?
Das hängt vom Anwendungsfall ab. Eine UUID ist ideal für verteilte Systeme und Situationen, in denen globale Eindeutigkeit erforderlich ist. Für einfache Anwendungen mit einer einzelnen Datenbank kann ein Auto-Increment effektiver sein.Sind die mit diesem Tool generierten UUIDs sicher?
Ja, wir verwenden die Web Crypto API (`crypto.getRandomValues()`), die kryptografisch sichere Zufallswerte liefert. Alles läuft lokal in Ihrem Browser ab.Was ist der Unterschied zwischen den UUID-Versionen?
- **v1**: Zeitstempel + MAC/Zufall – chronologische Sortierung, schlechtere DB-Leistung - **v3/v5**: Hash-basiert – deterministisch, für die Konvertierung bekannter Identifikatoren - **v4**: Zufällig – am sichersten, am häufigsten verwendet - **v6**: Neu angeordneter Zeitstempel – bessere DB-Leistung als v1 - **v7**: Unix-Zeitstempel – beste DB-Leistung + zeitliche SortierungWelche UUID-Version sollte ich verwenden?
Für die meisten Fälle verwenden Sie **v4** (zufällig). Für Datenbanken mit zeitlicher Sortierung verwenden Sie **v7** (modern) oder **v6** (Standard). Für die Konvertierung bekannter Identifikatoren (URL, DNS) verwenden Sie **v5** (SHA-1).Kann ich UUIDs für Token und API-Schlüssel verwenden?
UUID v4 ist für Sitzungs-IDs und ähnliche Token geeignet. Für API-Schlüssel sollten Sie längere Zufallsstrings (z.B. 256-Bit-Werte) oder spezialisierte Bibliotheken in Betracht ziehen.Wie groß sind UUIDs?
Eine UUID ist 128 Bit (16 Bytes) groß. Im String-Format mit Bindestrichen benötigt sie 36 Zeichen. Ohne Bindestriche sind es 32 hexadezimale Zeichen.Alternativen zu UUIDs
ULID (Universally Unique Lexicographically Sortable Identifier)
- 128-Bit-ID (genau wie UUID)
- Lexikografisch nach Erstellungszeit sortierbar
- Kompaktere Darstellung (26 Zeichen statt 36)
- Groß-/Kleinschreibung ignorierende Base32-Kodierung
Beispiel: 01ARZ3NDEKTSV4RRFFQ69G5FAV
NanoID
- Kleiner als UUID (standardmäßig 21 Zeichen)
- URL-freundlich (ohne Sonderzeichen)
- Schnellere Generierung
- Konfigurierbare Länge und Alphabet
Beispiel: V1StGXR8_Z5jdHi6B-myT
Snowflake ID (Twitter)
- 64-Bit-ID (kleiner als UUID)
- Zeitlich sortierbar
- Enthält Worker-ID und Sequenznummer
- Erfordert eine zentralisierte Konfiguration
Beispiel: 1234567890123456789
Leistung und Optimierung
Generierungsgeschwindigkeit
Unser Generator kann Folgendes generieren:
- 1 UUID: < 1 ms
- 100 UUIDs: ~10-20 ms
- 1000 UUIDs: ~100-200 ms
Leistungstipps
- Batch-Generierung – Wenn Sie viele UUIDs benötigen, generieren Sie diese auf einmal statt einzeln
- Speicherung in der DB – Indizieren Sie UUID-Spalten für eine schnelle Suche
- Kompression – Speichern Sie UUIDs im Binärformat (16 Bytes) anstelle eines Strings (36 Bytes)
- Caching – In einigen Fällen können Sie UUIDs vorgenerieren und cachen
Für Entwickler
Struktur einer UUID v4
xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx
| | | | |
| | | | └─ 48 Bits zufälliger Daten (Node)
| | | └────── 16 Bits zufälliger Daten mit Variante (Clock_seq)
| | └─────────── 12 Bits zufälliger Daten + 4 Bits Version (Time_hi_and_version)
| └──────────────── 16 Bits zufälliger Daten (Time_mid)
└───────────────────────── 32 Bits zufälliger Daten (Time_low)
- Version (4 Bits): immer
0100(binär) =4(hex) - Variante (2-3 Bits): immer
10(binär) für RFC 4122
UUID-Tests
// Jest-Test
describe('UUID Generator', () => {
test('generates valid UUID v4', () => {
const uuid = generateUUIDv4();
const regex = /^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;
expect(regex.test(uuid)).toBe(true);
});
test('generates unique UUIDs', () => {
const uuid1 = generateUUIDv4();
const uuid2 = generateUUIDv4();
expect(uuid1).not.toBe(uuid2);
});
});
Sicherheitsaspekte
Was man mit UUIDs nicht tun sollte
❌ Verwenden Sie UUID v1 nicht für sensible Anwendungen – Enthält Zeitstempel, was ein Sicherheitsrisiko darstellen kann
❌ Verwenden Sie Math.random() nicht zur Generierung von UUIDs – Ist nicht kryptografisch sicher
❌ Verlassen Sie sich bei der Autorisierung nicht auf UUIDs – UUIDs können erraten werden (wenn auch mit extrem geringer Wahrscheinlichkeit)
❌ Speichern Sie UUIDs nicht unverschlüsselt in Cookies – Verwenden Sie signierte Cookies oder JWT
Was man tun sollte
✅ Verwenden Sie UUID v4 in den meisten Fällen – Höchste Entropie und Sicherheit
✅ Kombinieren Sie UUIDs mit weiteren Sicherheitsmaßnahmen – Für das Sitzungsmanagement verwenden Sie HTTPS, HttpOnly-Cookies und eine kurze Ablaufzeit
✅ Validieren Sie UUIDs auf dem Server – Überprüfen Sie immer das Format und die Version der UUID
✅ Verwenden Sie kryptografisch sichere Zufallsquellen – crypto.getRandomValues() im Browser, /dev/urandom unter Linux
Wissenswertes
- Anzahl möglicher UUID v4: 2^122 ≈ 5.3 × 10^36 (340 Undezillionen)
- Notwendige Kollision: Für eine 50%ige Kollisionswahrscheinlichkeit müssen Sie 2.71 × 10^18 UUIDs (2.71 Quintillionen) generieren
- Größe aller möglichen UUIDs: Würde man jede UUID als 16 Bytes speichern, würde der gesamte Speicherplatz 85 Zettabyte (85 Milliarden Terabyte) einnehmen
- Ursprung: UUID wurde 1990 als Teil der DCE (Distributed Computing Environment) standardisiert