La documentación de PostgreSQL dice que la generación de UUID se basa en OSSP library . Una mirada al código fuente de OSSP (versión 1.6.2) muestra que el código usa /dev/urandom
en sistemas similares a Unix ( CryptGenRandom()
en Windows), y también un PRNG mucho más débil en función de la hora actual, la identificación del proceso y La biblioteca C función rand()
. Afortunadamente, las dos salidas están XOR juntas, por lo que el uso de /dev/urandom
es suficiente para garantizar una aleatoriedad fuerte, independientemente de cuán débil sea el otro PRNG. Desafortunadamente , si la apertura de /dev/urandom
falla por algún motivo (por ejemplo, el proceso se había quedado sin descriptores de archivos libres en ese momento), la biblioteca recurre a usar solo el PRNG débil, sin advertencia. .
Por lo tanto, si bien el UUID v4 generado por PostgreSQL usualmente debe incluir 122 bits de aleatoriedad criptográficamente fuerte, siempre existe la posibilidad de degradación hacia un comportamiento mucho más débil, sin un método confiable para probar esa ocurrencia . Además, nada de esto parece realmente documentado, por lo que puede cambiar en otras versiones de la biblioteca. Por lo tanto, la precaución recomienda a no que confíe en la fuerte aleatoriedad de UUID generada por PostgreSQL, y en su lugar utilice explícitamente una fuente aleatoria fuerte en el lado de la aplicación (normalmente /dev/urandom
, pero no ocultando errores de acceso).