Articles

Identificatore univoco universale

Per entrambe le varianti 1 e 2, cinque “versioni” sono definite negli standard e ciascuna versione può essere più appropriata delle altre in casi d’uso specifici. La versione è indicata dal M nella rappresentazione stringa.

Gli UUID della versione 1 sono generati da un tempo e un ID nodo (di solito l’indirizzo MAC); gli UUID della versione 2 sono generati da un identificatore (di solito un ID di gruppo o utente), un tempo e un ID nodo; le versioni 3 e 5 producono UUID deterministici generati dall’hashing di un identificatore; e gli UUID della versione 4 vengono generati utilizzando un numero casuale o pseudo-casuale.

Nil UUIDEdit

L’UUID “nil”, un caso speciale, è l’UUID00000000-0000-0000-0000-000000000000; cioè, tutti i bit impostati a zero.

Versione 1 (data-ora e indirizzo MAC)Modifica

Versione 1 concatena l’indirizzo MAC a 48 bit del “nodo” (cioè il computer che genera l’UUID), con un timestamp a 60 bit, essendo il numero di intervalli di 100 nanosecondi dalla mezzanotte del 15 ottobre 1582 Coordinated Universal Time (UTC), la data in cui il calendario gregoriano è stato adottato per la prima volta. RFC 4122 afferma che il valore del tempo rotola intorno a 3400 AD,:3 a seconda dell’algoritmo utilizzato, il che implica che il timestamp a 60 bit è una quantità firmata. Tuttavia alcuni software, come la libreria libuuid, trattano il timestamp come non firmato, mettendo il tempo di rollover in 5236 AD. Il tempo di rollover definito da ITU-T Rec. X. 667 è 3603 DC.: v

Una sequenza di clock “uniquifying” a 13 o 14 bit estende il timestamp per gestire i casi in cui l’orologio del processore non avanza abbastanza velocemente o dove ci sono più processori e generatori UUID per nodo. Quando gli UUID vengono generati più velocemente di quanto l’orologio di sistema possa avanzare, i bit inferiori dei campi timestamp possono essere generati incrementandoli ogni volta che viene generato un UUID, per simulare un timestamp ad alta risoluzione. Con ogni UUID della versione 1 corrispondente a un singolo punto nello spazio (il nodo) e nel tempo (intervalli e sequenza di clock), la possibilità che due UUID della versione 1 generati correttamente siano involontariamente uguali è praticamente nulla. Dal momento che il tempo e la sequenza di clock totale 74 bit, 274 (1.8×1022, o 18 sextillion) versione-1 UUID possono essere generati per ID nodo, ad un tasso medio massimo di 163 miliardi al secondo per ID nodo.

A differenza di altre versioni UUID, versione-1 e -2 UUID basati su indirizzi MAC da schede di rete si basano per la loro unicità in parte su un identificatore emesso da un’autorità centrale di registrazione, vale a dire l’Organizationally Unique Identifier (OUI) parte dell’indirizzo MAC, che viene rilasciato dalla IEEE ai produttori di apparecchiature di rete. L’unicità degli UUID della versione 1 e della versione 2 basati sugli indirizzi MAC della scheda di rete dipende anche dai produttori di schede di rete che assegnano correttamente indirizzi MAC univoci alle loro schede, che come altri processi di produzione sono soggetti a errori.

L’utilizzo dell’indirizzo MAC della scheda di rete del nodo per l’ID del nodo significa che un UUID versione-1 può essere rintracciato nel computer che lo ha creato. I documenti possono talvolta essere ricondotti ai computer in cui sono stati creati o modificati tramite UUID incorporati in essi da software di elaborazione testi. Questo buco privacy è stato utilizzato quando si individua il creatore del virus Melissa.

RFC 4122 consente all’indirizzo MAC in un UUID versione 1 (o 2) di essere sostituito da un ID nodo casuale a 48 bit, sia perché il nodo non ha un indirizzo MAC, sia perché non è desiderabile esporlo. In tal caso, l’RFC richiede che il bit meno significativo del primo ottetto dell’ID del nodo sia impostato su 1. Ciò corrisponde al bit multicast negli indirizzi MAC e l’impostazione serve a differenziare gli UUID in cui l’ID del nodo viene generato casualmente dagli UUID in base agli indirizzi MAC delle schede di rete, che in genere hanno indirizzi MAC unicast.

Versione 2 (data-ora e indirizzo MAC, versione DCE security)Modifica

RFC 4122 riserva la versione 2 per gli UUID “DCE security”; ma non fornisce alcun dettaglio. Per questo motivo, molte implementazioni UUID omettono la versione 2. Tuttavia, la specifica degli UUID della versione 2 è fornita dalla specifica DCE 1.1 Authentication and Security Services.

Versione-2 Gli UUID sono simili alla versione 1, tranne per il fatto che gli 8 bit meno significativi della sequenza di clock sono sostituiti da un numero “dominio locale” e i 32 bit meno significativi del timestamp sono sostituiti da un identificatore intero significativo all’interno del dominio locale specificato. Nei sistemi POSIX, i numeri di dominio locale 0 e 1 sono rispettivamente per gli ID utente (UID) e gli ID di gruppo (GID) e altri numeri di dominio locale sono definiti dal sito. Nei sistemi non POSIX, tutti i numeri di dominio locali sono definiti dal sito.

La possibilità di includere un dominio/identificatore a 40 bit nell’UUID viene fornito con un compromesso. Da un lato, 40 bit consentono circa 1 trilione di valori di dominio/identificatore per ID nodo. D’altra parte, con il valore di clock troncato ai 28 bit più significativi, rispetto ai 60 bit della versione 1, l’orologio in un UUID della versione 2 “spunterà” solo una volta ogni 429,49 secondi, poco più di 7 minuti, al contrario di ogni 100 nanosecondi per la versione 1. E con una sequenza di clock di soli 6 bit, rispetto ai 14 bit della versione 1, è possibile generare solo 64 UUID univoci per nodo / dominio / identificatore per tick di clock di 7 minuti, rispetto ai valori di sequenza di clock 16,384 per la versione 1. Pertanto, la versione 2 potrebbe non essere adatta per i casi in cui sono richiesti UUID, per nodo/dominio/identificatore, ad una velocità superiore a circa uno ogni sette secondi.

Le versioni 3 e 5 (namespace name-based)Modifica

Versione-3 e versione-5 UUID sono generati da hashing un identificatore dello spazio dei nomi e il nome. La versione 3 utilizza MD5 come algoritmo di hashing, e la versione 5 utilizza SHA-1.

L’identificatore dello spazio dei nomi è esso stesso un UUID. La specifica fornisce UUID per rappresentare gli spazi dei nomi per URL, nomi di dominio completi, identificatori di oggetti e nomi distinti X. 500; ma qualsiasi UUID desiderato può essere utilizzato come designatore dello spazio dei nomi.

Per determinare l’UUID della versione-3 corrispondente a un determinato spazio dei nomi e nome, l’UUID dello spazio dei nomi viene trasformato in una stringa di byte, concatenata con il nome di input, quindi hash con MD5, producendo 128 bit. Quindi 6 o 7 bit vengono sostituiti da valori fissi, la versione a 4 bit (ad esempio 00112 per la versione 3) e la “variante” UUID a 2 o 3 bit (ad esempio 102 che indica un UUID RFC 4122 o 1102 che indica un GUID Microsoft legacy). Poiché 6 o 7 bit sono quindi predeterminati, solo 121 o 122 bit contribuiscono all’unicità dell’UUID.

Gli UUID versione-5 sono simili, ma SHA-1 è usato al posto di MD5. Poiché SHA-1 genera digest a 160 bit, il digest viene troncato a 128 bit prima che i bit di versione e variante vengano sostituiti.

Gli UUID versione-3 e versione-5 hanno la proprietà che lo stesso spazio dei nomi e lo stesso nome verranno mappati allo stesso UUID. Tuttavia, né lo spazio dei nomi né il nome possono essere determinati dall’UUID, anche se uno di essi è specificato, ad eccezione della ricerca a forza bruta. RFC 4122 raccomanda la versione 5 (SHA-1) rispetto alla versione 3 (MD5), e mette in guardia contro l’uso di UUID di entrambe le versioni come credenziali di sicurezza.

Versione 4 (casuale)Modifica

Un UUID della versione 4 viene generato casualmente. Come in altri UUID, vengono utilizzati 4 bit per indicare la versione 4 e 2 o 3 bit per indicare la variante (102 o 1102 per le varianti 1 e 2 rispettivamente). Pertanto, per la variante 1 (cioè la maggior parte degli UUID) un UUID di versione casuale-4 avrà 6 bit di variante e versione predeterminati, lasciando 122 bit per la parte generata casualmente, per un totale di 2122, o 5.3×1036 (5.3 undecillion) possibile versione-4 variant-1 UUID. Ci sono la metà dei possibili UUID di versione-4 variant-2 (GUID legacy) perché c’è un bit casuale in meno disponibile, 3 bit consumati per la variante.