Essa é exatamente a diferença entre /dev/random
e /dev/urandom
- random
usa o pool de entropia, que reúne ruído de várias origens e rastreia "quanto" o ruído está atualmente no pool, portanto random
sabe quanta aleatoriedade de alta qualidade pode gerar. Como o pool de entropia tem uma quantidade finita de ruído, a leitura de random
pode precisar ser bloqueada se não houver entropia suficiente disponível. urandom
nunca bloqueia, mas você pode obter dados "menos aleatórios" a partir dele.
Na página random(4)
man:
When read, the /dev/random device will only return random bytes within the estimated number of bits of noise in the entropy pool. /dev/random should be suitable for uses that need very high quality randomness such as one-time pad or key generation. When the entropy pool is empty, reads from /dev/random will block until additional environmental noise is gathered.
A read from the /dev/urandom device will not block waiting for more entropy. As a result, if there is not sufficient entropy in the entropy pool, the returned values are theoretically vulnerable to a cryptographic attack on the algorithms used by the driver.