O Linux tem dois geradores de números aleatórios disponíveis para userspace, /dev/random e /dev/urandom .
/dev/random é uma fonte de aleatoriedade "verdadeira" - isto é, não é gerada por um gerador de números pseudo-aleatórios. A entropia é alimentada neste pelo driver de entrada e pelo manipulador de interrupção, através das funções add_input_randomness e add_interrupt_randomness . Os processos de leitura deste dispositivo serão bloqueados se a entropia acabar.
/dev/urandom é um gerador de números pseudo-aleatórios. Ele é alimentado pelo mesmo conjunto de entropia que /dev/random , mas quando isso acaba, ele passa para um gerador criptograficamente strong.
Os aplicativos do espaço do usuário podem ser alimentados no pool de entropia, escrevendo para /dev/{,u}random .
Faça uma leitura do aleatório (4) página de manual, e o arquivo drivers/char/random.c na árvore de origem do kernel. É bem comentado e muito do que você pergunta é explicado lá.
Por padrão, o /dev/random do FreeBSD é um gerador de números pseudo-aleatórios que usa o algoritmo Yarrow (mas pode apontar para um RNG de hardware se um estiver conectado). O gerador de software recebe entropia de conexões Ethernet e serial e interrupções de hardware (alteráveis através de sysctl kern.random ). Acredita-se que o algoritmo Yarrow esteja seguro, desde que o estado interno seja desconhecido, portanto /dev/random deve sempre gerar dados de alta qualidade sem bloqueio.
Veja aleatório (4) .
No NetBSD, /dev/random fornece dados aleatórios somente na entropia coletada (de discos, rede, dispositivos de entrada e / ou unidades de fita; ajustável usando rndctl ), enquanto /dev/urandom retorna para um PRNG quando o pool de entropia está vazio, semelhante ao Linux.
Veja aleatório (4) , rndctl(8) , rnd(9) .
O OpenBSD tem quatro geradores: /dev/random é um gerador de hardware, /dev/srandom é um gerador seguro de dados aleatórios (usando MD5 no pool de entropia: "disco e dispositivo de rede interrompe e tal"), /dev/urandom é semelhante mas cai de volta para um PRNG quando o pool de entropia está vazio. O quarto, /dev/arandom , também é um PRNG, mas usando o RC4 .
Veja aleatório (4) , arc4random(3) .
O Mac OS X também usa o algoritmo Yarrow para /dev/random , mas tem um% de /dev/urandom funcional para compatibilidade. "A entropia adicional é alimentada regularmente ao gerador pelo daemon SecurityServer a partir de medições aleatórias de jitter do kernel." Consulte aleatório (4) .