UUID signifie "Universally Unique IDentifier" et désigne un standard d'identifiant généré aléatoirement et globalement unique.

Exemple d'un identifiant (v4) : 158c9998-18da-4bef-a8db-4891b1736574

La version 4 est la plus couramment utilisée. Dans cette version, chaque identifiant est généré aléatoirement sur 30 caractères, et 2 caractères sont conservés pour stocker la version de la norme utilisée : xxxxxxxx-xxxx-Mxxx-Nxxx-xxxxxxxxxxxx

M contient le code de version et N l'identifiant de sous-version.

Pourquoi cet identifiant est de plus en plus utilisé et particulièrement intéressant ? Nous allons le découvrir ensemble dans la suite de cet article.

Unicité locale vs globale

Nous sommes habitués à ce que nos identifiants soient uniques de manière locale :

En SQL par exemple, on vérifie que chaque clé primaire est unique dans la table grâce à un index. L'identifiant n'est pas aléatoire, mais incrémenté depuis le dernier identifiant généré, et unique localement (dans chaque table).

À l'inverse, un UUID est "universellement unique", et donc sans autorité de contrôle (index). Son unicité est assurée par le nombre gigantesque de possibilités lors de la génération aléatoire.

Comment c'est possible ?

Un UUID est composé de 128 bits, soit 32 caractères hexadécimaux (4 bits  par caractère). Le nombre de possibilités pour générer des UUIDs différents est donc de 5,31x10^36, soit plus que le nombre estimé de https://fr.m.wikipedia.org/wiki/Ordres_de_grandeur_de_nombres#1036

Vous l'aurez compris, comme il n'y a pas de contrôle, le risque de collision (génération de deux identifiants similaires) ne peut pas être nul :

Les probabilités de collisions

Avec un tel nombre de possibilités comme expliqué ci-dessus, le risque de collision existe, mais il est techniquement négligeable.

D'après Wikipédia : "Pour atteindre un risque de collision de 50%, il faudrait générer 1 milliard d'UUIDs par seconde pendant environs 85 ans. Un fichier contenant autant d'UUIDs, pèserait  45 exaoctets (45 milliards de Go)."

Néanmoins soumis à ce que l'on appelle "l'entropie".

L'entropie est la possibilité pour un système de générer des nombres aléatoires très différents les uns des autres.

Si l'entropie est trop faible, alors le nombre de collisions possible risque d'augmenter drastiquement. Cette dernière varie en fonction des algorithmes de PRNG (Pseudo-Random Number Generation).

Pour rappel, l'aléatoire absolu n'existe pas en informatique

Par exemple, les algorithmes de PRNG dans les navigateurs web ont une entropie souvent trop faible pour générer des UUIDs fiables car ils n'ont  pas toujours accès aux algorithmes du système d'exploitation, qui eux sont suffisamment fiable pour des opérations de cryptographie.

L'origine

À l'origine les UUID ont été inventé par la société Apollo Computer pour identifier de manière unique les appels RPC.

Remote Procedure Call : Protocol pour exécuter des méthodes sur une machine distante.

Différentes versions

Il existe actuellement 5 versions différentes de la norme UUID, la version 4 étant la plus utilisée.

La version 1, étant prévue pour transiter sur le réseau, contenant au début de la chaîne l'adresse MAC de la machine source et un timestamp.

Cette contrainte permettait d'assurer l'unicité de l'identifiant (hors usurpation d'adresse MAC), mais avec comme inconvénient de dévoiler des données privées de la machine.

La version 2 est une simple variante de la V1, la V3 est l'équivalent d'un hash md5 et la V5 d'un hash SHA-1.

C'est avec la version 4 qu'arrive l'aléatoire complet de l'identifiant et l'utilisation comme un identifiant global unique, en dehors du contexte du réseau.

Voilà, vous savez désormais tout ce qu'il y a à connaitre sur l'UUID.

J'espère que cet article vous aura été utile, et à bientôt sur le blog !

Les articles les plus populaires du blog

Envie de continuer à lire des articles autour du développement web (entre autres) ? Voici la sélection des articles de mon blog les plus lus par la communauté !

Voir la sélection 🚀

Recevez les articles de la semaine par e-mail pour ne rien manquer !

S'abonner à la newsletter 📧

À propos de l'auteur

Hello, je suis Nicolas Brondin-Bernard, ingénieur web indépendant depuis 2015 passionné par le partage d'expériences et de connaissances.

Aujourd'hui je suis aussi coach pour développeurs web juniors, tu peux me contacter sur nicolas@brondin.com, sur mon site ou devenir membre de ma newsletter pour ne jamais louper le meilleur article de la semaine et être tenu au courant de mes projets !


Photo par Chris Ried sur Unsplash