La respuesta corta es sí. La respuesta larga también es sí. /dev/urandom
produce datos que son indistinguibles de la aleatoriedad real, dada la tecnología existente. Obtener "mejor" aleatoriedad de la que proporciona /dev/urandom
no tiene sentido, a menos que esté usando uno de los pocos algoritmos criptográficos de "teoría de la información", que no es su caso (lo sabría).
La página del manual para urandom
es un tanto engañosa, podría decirse que está equivocada, cuando sugiere que /dev/urandom
puede "quedarse sin entropía" y se debería preferir /dev/random
; el único instante en que /dev/urandom
podría implicar un problema de seguridad debido a la baja entropía es durante los primeros momentos de una instalación nueva y automatizada del sistema operativo; Si la máquina arrancó hasta un punto en el que comenzó a tener cierta actividad en la red, se reunió la aleatoriedad física suficiente para proporcionar una aleatoriedad de alta calidad para todos los usos prácticos (estoy hablando de Linux aquí; en FreeBSD, ese momento momentáneo de leve la debilidad no se presenta en absoluto). Por otro lado, /dev/random
tiene una tendencia a bloquearse en momentos inoportunos, lo que lleva a problemas de uso muy reales y molestos. O, para decirlo en menos palabras: usa /dev/urandom
y sé feliz; usa /dev/random
y disculpa.
( Editar: esta página web explica las diferencias entre /dev/random
y /dev/urandom
bastante claro.)
Para el propósito de producir una "cookie": dicha cookie debe ser tal que no haya dos usuarios que compartan la misma cookie, y que no sea computacionalmente "adivinar" el valor de una cookie existente. Una secuencia de bytes aleatorios hace eso bien, siempre que use una aleatoriedad de calidad adecuada ( /dev/urandom
está bien) y que es suficientemente larga . Como regla general, si tiene menos de 2n usuarios ( n = 33 si toda la población de la Tierra podría usar su sistema), entonces una secuencia de n + 128 bits es lo suficientemente ancha; ni siquiera tiene que verificar una colisión con valores existentes: no lo verá en su vida. 161 bits caben en 21 bytes.
Hay hay algunos trucos que se pueden hacer si desea cookies más cortas y aún así desea evitar buscar colisiones en su base de datos. Pero esto no debería ser necesario para una cookie (supongo que es un contexto basado en la web). Además, recuerde mantener sus cookies confidenciales (es decir, use HTTPS y configure las cookies como "seguras" y "HttpOnly").