Was ist eine UUID?

Der Universally Unique Identifier, kurz UUID, ist ein Standard für Identifikationsnummern. Wie in einem Personalausweis soll die Nummer dazu dienen, zwei Komponenten zweifelsfrei auseinanderhalten zu können.

UUIDs gehen einen Schritt weiter: Sie gelten als weltweit eindeutig und garantieren mehr oder weniger, dass niemand sonst dieselbe Identifikationsnummer verwendet.

Die Identifikationsnummern lassen sich aber auch dazu verwenden, in Datenbanken zukunftssichere Primärschlüssel zu realisieren. So kann man sicher sein, dass Tabellen später ohne Konflikte zusammengeführt werden können. In der Regel handelt es sich um eine hexadezimale Zahl, die 16 Byte (128 Bit) groß ist.

UUIDs in fünf Versionen
Im Laufe der Zeit haben sich verschiedene Versionen der UUID etabliert:

Version 1:

Dies ist die älteste Version der UUID. Sie basiert auf einem Zeitstempel und der MAC-Adresse der Maschine, auf der sie erzeugt wurde. Wenn diese Version verwendet wird sollte beachtet werden, dass Zeitstempel und MAC-Adresse Rückschlüsse zur Identität des Erstellers liefern können. In besonders sicherheitskritischen Szenarien kommt diese Version daher nicht zum Einsatz.

Version 2:

Diese Version ist eine Abwandlung der Version 1. Hier werden einige Stellen des Zeitstempels durch Zeichen aus der lokalen Domäne ersetzt.

Version 3:

Diese Version basiert auf einem nicht näher spezifizierten Namen, der innerhalb eines Namensraums eindeutig sein muss (z. B. DNS). Der so generierte Wert wird dann mit MD5 gehasht und der Hash wird gemeinsam mit der zuvor gebildeten UUID zur endgültigen UUID zusammengefügt. Es ist festgelegt, dass ein bestimmter Name aus einem bestimmten Namensraum immer dieselbe UUID erzeugen muss.

Version 4:

In dieser Version werden alle frei belegbaren Stellen durch zufällig generierte Zeichen aufgefüllt. Es ist zwar möglich, auf diese Weise doppelte UUIDs zu erzeugen. Doch die Wahrscheinlichkeit ist so gering, dass sie als praktisch irrelevant gilt.

Version 5:

Diese Version basiert ebenfalls auf einem Namen und wird ähnlich wie Version 3 gebildet. Statt MD5 wird SHA1 für den Hash verwendet.

npm install uuid --save

// Generate a v1 UUID (time-based)
const uuidV1 = require('uuid/v1'); uuidV1(); // -> '6c84fb90-12c4-11e1-840d-7b25c5ee775a'
// Generate a v4 UUID (random)
const uuidV4 = require('uuid/v4'); uuidV4(); // -> ›110ec58a-a0f2-4ac4-8393-c866d813b8d1'

 

Auf digitalbunker.dev wurde ein interessanter Artikel gepostet, der erklärt wie UUIDs generiert werden.

Ein paar Punkte fand ich sehr interessante. Zum einen, dass es mehrere Versionen und Varianten gibt, wie die UUIDs generiert werden. Und die verwendete Version und Variation steht in der UUID immer drin an einer bestimmten stelle.

Zum anderen wurde die Frage gestellt, wie „eindeutig“ diese UUIDs sind. Also könnte es nicht doch vorkommen, dass ein Duplikat generiert wird. Theoretisch stimmt das, aber die Wahrscheinlichkeit ist doch eher gering. So schreibt der Autor, dass bei 10,000,000,000,000 [10 Billionen] UUIDs, die Chance auf zwei gleiche UUIDs wohl bei 0.00000006 % liegt. (Bei Version 4, die PRNG verwendet)

Wenn man Version 1 verwendet, die einen Timestamp nutzt, müsste man sein System schon für über 1.500 Jahre laufen lassen, bis sich der Timestamp im Jahre 3603 wiederholt.

Filed under: ProgrammierungTagged with:

No comment yet, add your voice below!


Add a Comment