J'ai écrit le générateur / analyseur UUID pour Ruby, donc je me considère comme raisonnablement bien informé sur le sujet. Il existe quatre versions majeures d'UUID:
Les UUID de la version 4 ne sont essentiellement que 16 octets d'aléa tirés d'un générateur de nombres aléatoires cryptographiquement sécurisé, avec un peu de bit-twiddling pour identifier la version et la variante de l'UUID. Celles-ci sont extrêmement peu susceptibles d'entrer en collision, mais cela pourrait arriver si un PRNG est utilisé ou si vous avez vraiment, vraiment, vraiment, vraiment, vraiment de la malchance.
Les UUID des versions 5 et 3 utilisent respectivement les fonctions de hachage SHA1 et MD5 pour combiner un espace de noms avec une partie de données déjà uniques afin de générer un UUID. Cela vous permettra, par exemple, de produire un UUID à partir d'une URL. Les collisions ici ne sont possibles que si la fonction de hachage sous-jacente a également une collision.
Les UUID de la version 1 sont les plus courants. Ils utilisent l'adresse MAC de la carte réseau (qui, à moins d'être usurpée, devrait être unique), plus un horodatage, plus le bit-twiddling habituel pour générer l'UUID. Dans le cas d'une machine qui n'a pas d'adresse MAC, les 6 octets de nœud sont générés avec un générateur de nombres aléatoires cryptographiquement sécurisé. Si deux UUID sont générés en séquence suffisamment rapidement pour que l'horodatage corresponde à l'UUID précédent, l'horodatage est incrémenté de 1. Les collisions ne doivent pas se produire à moins que l'une des situations suivantes ne se produise: l'adresse MAC est usurpée; Une machine exécutant deux applications générant des UUID différentes produit des UUID exactement au même moment; Deux machines sans carte réseau ou sans accès de niveau utilisateur à l'adresse MAC reçoivent la même séquence de nœuds aléatoires et génèrent des UUID exactement au même moment;
En réalité, aucun de ces événements ne se produit par accident dans l'espace d'identification d'une seule application. À moins que vous n'acceptiez des identifiants sur, par exemple, une échelle Internet ou dans un environnement non fiable où des individus malveillants pourraient être en mesure de faire quelque chose de mal en cas de collision d'identifiants, ce n'est tout simplement pas quelque chose dont vous devriez vous inquiéter. Il est essentiel de comprendre que si vous générez le même UUID version 4 que moi, dans la plupart des cas, cela n'a pas d'importance. J'ai généré l'ID dans un espace d'identification complètement différent du vôtre. Mon application ne sera jamais au courant de la collision, donc la collision n'a pas d'importance. Franchement, dans un seul espace applicatif sans acteurs malveillants, l'extinction de toute vie sur terre se produira bien avant que vous n'ayez une collision, même sur un UUID version 4, même si vous '
De plus, 2 ^ 64 * 16 équivaut à 256 exaoctets. Comme dans, vous auriez besoin de stocker 256 exaoctets d'ID avant d'avoir 50% de chances de collision d'ID dans un seul espace d'application.