Não estou entendendo bem a diferença entre /dev/random
e /dev/urandom
nos sistemas Linux.
O que significa ficar sem "entropia" e como o sistema obtém mais?
O que significa quando as pessoas dizem /dev/random
"bloqueios" se não houver entropia suficiente?
Qual devo usar para quais cenários?
linux
dev
random-number-generator
user365967
fonte
fonte
Respostas:
Aleatoriedade significa que o próximo valor que você obtém não depende do valor anterior e não há como prever isso.
Isso é realmente difícil para um computador, uma vez que um computador é basicamente uma calculadora muito rápida - para que ele possa fazer contas, mas sempre terá a resposta exata sempre. Você pode fazer algo próximo da aleatoriedade com a matemática chamada "pseudo-aleatoriedade" - mas não é de alta qualidade o suficiente para ser usada para criptografia.
Portanto, o Linux coleta "aleatoriedade" em conjuntos de várias fontes (como tempo entre eventos de entrada). A "quantidade" de aleatoriedade nesse pool é a entropia. Menos entropia = padrões menos regulares, repetitivos e previsíveis - você deseja o máximo de entropia possível. O kernel do Linux "encherá" seu pool de entropia quando estiver baixo, mas depende do que está acontecendo no sistema, pois usa o tempo entre eventos de hardware imprevisíveis para gerá-lo.
Se o pool estiver vazio,
/dev/random
irá bloquear ou parar de fornecer dados, até que o kernel obtenha entropia suficiente./dev/urandom
continuará - usando técnicas pseudo-aleatórias para gerar números aleatórios.Agora que você já aprendeu o básico, sempre pode usar o urandom e aqui está o porquê .
Aqui está um trecho desse artigo explicando por que isso não importa:
fonte