Was ist UUID v1?
UUID v1 kombiniert einen 60 Bit langen Zeitstempel mit einer Taktsequenz und einer Knotenkennung. Es war die erste standardisierte Variante und sollte Eindeutigkeit über Zeit und Ort gleichzeitig garantieren.
Der Zeitstempel zählt 100-Nanosekunden-Intervalle seit dem 15. Oktober 1582 - dem Tag der Einführung des gregorianischen Kalenders.
Der innere Aufbau
Die 60 Zeitstempel-Bits verteilen sich auf drei Felder: time_low (32 Bit), time_mid (16 Bit) und time_hi_and_version (12 Bit plus 4 Bit Version). Dazu kommen 14 Bit Taktsequenz, 2 Bit Variante und 48 Bit Knotenkennung.
Entscheidend ist die Reihenfolge: das niederwertigste Zeitfeld steht vorn. Genau das verhindert die chronologische Sortierbarkeit und war der Anlass für UUID v6.
Der gregorianische Epochenbeginn
Um aus einer v1 einen Unix-Zeitstempel zu gewinnen, ziehen Sie den Versatz von 122.192.928.000.000.000 100-Nanosekunden-Intervallen ab und teilen durch 10.000. Die nominelle Auflösung von 100 Nanosekunden ist allerdings theoretisch: kaum ein Betriebssystem liefert eine so feine Uhr, weshalb Implementierungen die verbleibenden Stellen hochzählen oder auffüllen.
Datenschutz: die MAC-Adresse
Ursprünglich war die Knotenkennung die MAC-Adresse der Netzwerkkarte. Damit verrät jede so erzeugte UUID, auf welchem Gerät sie entstanden ist - eine Eigenschaft, die in der Vergangenheit bereits zur Zuordnung von Dokumenten zu einzelnen Rechnern genutzt wurde.
RFC 4122 lässt in Abschnitt 4.5 stattdessen eine zufällige Knotenkennung zu, deren Multicast-Bit gesetzt ist. Dieser Generator verwendet ausschließlich diesen Weg: sechs zufällige Bytes pro UUID, keine Geräteinformation.
Die Taktsequenz
Die 14 Bit Taktsequenz sollen Kollisionen verhindern, wenn die Systemuhr zurückgestellt wird oder zwei Prozesse dieselbe Knotenkennung teilen. In Implementierungen mit zufälliger Knotenkennung wird sie ebenfalls zufällig gesetzt und liefert damit zusätzliche Entropie.
Wann v1 sinnvoll ist - und wann nicht
Sinnvoll ist v1 dort, wo ein bestehendes System es erwartet: Cassandra mit timeuuid, ältere Windows- und COM-Komponenten, gewachsene Datenbankschemata.
Für neue Entwicklungen ist v7 in praktisch jeder Hinsicht überlegen: es ist sortierbar, verwendet den Unix-Epochenbeginn, enthält mehr Zufall und ist in RFC 9562 aktuell standardisiert. Wenn Sie zwischen v1 und v7 frei wählen können, nehmen Sie v7.