Qu'est-ce qu'un UUID ?

Une alternative aux clés primaires auto-incrémentées dans vos bases de données.

Article publié le 01/11/2021, dernière mise à jour le 19/09/2023

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 le nombre estimé de bactéries présentes sur Terre

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.


Chris Ried sur Unsplash

Vous avez terminé l'article ?

Commentaires (0)

pour laisser un commentaire

Aucun commentaire pour l'instant