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