La especificación UUID detalla varias "versiones" que son métodos para generar el UUID. La mayoría tienen como objetivo garantizar la singularidad (ese es el punto principal de UUID) utilizando, por ejemplo, la fecha actual. Esto es eficiente, pero significa que si bien los UUID generados son únicos , también son predecibles , lo que los hace inadecuados para algunos usos de seguridad.
El "versión 4" método de generación de UUID (en la sección 4.4) , sin embargo, se supone que debe utilizar un generador de números aleatorios criptográficamente fuerte. 6 de los 128 bits se fijan a un valor convencional (para indicar que se trata de una versión 4 UUID, a saber), por lo que esto deja 122 bits del RNG.
Si el RNG subyacente es seguro (por ejemplo, /dev/urandom
en un sistema Linux / MacOS / * BSD, o CryptGenRandom()
en Windows), dado que se generan muchos UUID, no se supone que un atacante poder predecir el siguiente con una probabilidad de éxito superior a 2 -122 , que es adecuadamente pequeña para la mayoría de los propósitos, incluidos los códigos de lanzamiento para misiles nucleares.
122 bits aleatorios aseguran unicidad con alta probabilidad. Si genera muchos UUID de la versión 4 y los acumula, puede esperar encontrar su primera colisión después de aproximadamente 2 61 UUID: eso es aproximadamente 2 billones de billones; simplemente almacenar ese número de UUID usaría más de 30 millones de terabytes. Si considera "solo" 10 12 UUID (mil de billones, almacenables más de 16 terabytes), entonces los riesgos de tener dos UUID idénticos entre ellos son aproximadamente 9.4 * 10 -14 , es decir, alrededor de 700 mil veces menos probable que ganar millones de dólares en la lotería.
Por lo tanto, los UUID son apropiados para fines de seguridad si (y solo si) son UUID de "versión 4" generados con un RNG seguro.