¿El uuid_generate_v4 de Postgres es seguro al azar?

16

Estoy usando uuid_generate_v4 de Postgres en una columna de clave primaria de uuid para generar tokens de autenticación seguros y únicos. ¿Esta bien? ¿Postgres usa una fuente segura de números aleatorios para generar estos UUID o debería estar generándolos usando una fuente segura y aleatoria en el lado de la aplicación antes de insertarlos en la base de datos?

    
pregunta glittershark 14.07.2015 - 16:01
fuente

1 respuesta

19

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).

    
respondido por el Thomas Pornin 14.07.2015 - 16:17
fuente

Lea otras preguntas en las etiquetas