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:

  1. Wählen Sie Version v1, v6 oder v7
  2. Stellen Sie Datum und Uhrzeit über den Datums-/Uhrzeit-Selektor ein
  3. 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:

  1. Wählen Sie den Namespace entsprechend dem Typ Ihres Identifikators
  2. Geben Sie den Namen/Wert ein
  3. Generieren Sie die UUID

Beispiele:

NamespaceName (Eingabe)Verwendung
DNSexample.comKonvertierung eines Domainnamens in eine UUID
DNSgoogle.comJede Website hat eine eindeutige UUID
URLhttps://example.com/pageKonvertierung einer URL in eine UUID
URLhttps://api.example.com/users/123API-Endpunkt als UUID
OID1.3.6.1.4.1.343Object Identifier in UUID
X.500CN=John Doe,O=CompanyDistinguished 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

VersionBasisKollisionenZeitliche SortierungDB-LeistungVerwendung
v1Zeitstempel + MACNiedrig✅ Ja❌ SchlechterLegacy, Audit
v3MD5-HashKeine (deterministisch)❌ Nein⚠️ MittelKonvertierungen (Legacy)
v4ZufälligExtrem niedrig❌ Nein⚠️ MittelAllgemeine Verwendung
v5SHA-1-HashKeine (deterministisch)❌ Nein⚠️ MittelKonvertierungen (Empfohlen)
v6Sortierbarer ZeitstempelNiedrig✅ Ja✅ BesserModerne DB mit Zeit
v7Unix-ZeitstempelNiedrig✅ Ja✅ Am bestenNeue Projekte

UUID vs. andere Identifikatoren

TypGrößeKollisionenZeitliche SortierungVerwendung
Auto-Increment ID4-8 BytesGarantiert eindeutig innerhalb der TabelleEinfache Anwendungen, lokale DB
UUID v416 BytesPraktisch unmöglichVerteilte Systeme, API
UUID v716 BytesPraktisch unmöglichModerne DB mit Leistung
ULID16 BytesPraktisch unmöglichUUID + lexikografische Sortierung
Snowflake ID8 BytesBei richtiger Konfiguration garantiert eindeutigTwitter, verteilte Systeme
NanoIDKonfigurierbarAbhängig von der LängeURL-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:

  1. ✅ Stellen Sie sicher, dass Sie das Feld “Name” ausgefüllt haben – es ist obligatorisch!
  2. ✅ Wählen Sie den richtigen Namespace entsprechend Ihrem Eingabetyp
  3. ✅ Beispiele für gültige Eingaben:
    • DNS: example.com, google.com
    • URL: https://example.com/page
    • Beliebiger Text: meine-anwendung-v1

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:

  1. ✅ Überprüfen Sie den Datums-/Uhrzeit-Selektor – ist die richtige Zeit eingestellt?
  2. ✅ Der Datums-/Uhrzeit-Selektor verwendet Ihre lokale Zeitzone
  3. ✅ 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:

  1. ✅ Stellen Sie sicher, dass Sie UUIDs generiert haben (sie sind nicht leer)
  2. ✅ Einige Browser erfordern HTTPS für die Clipboard API
  3. ✅ 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 Sortierung
Welche 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

  1. Batch-Generierung – Wenn Sie viele UUIDs benötigen, generieren Sie diese auf einmal statt einzeln
  2. Speicherung in der DB – Indizieren Sie UUID-Spalten für eine schnelle Suche
  3. Kompression – Speichern Sie UUIDs im Binärformat (16 Bytes) anstelle eines Strings (36 Bytes)
  4. 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 Zufallsquellencrypto.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