Meu entendimento atual de um pool de entropia é que ele reúne bits de dados verdadeiramente aleatórios a uma taxa lenta. Gostaria de saber como o Unix e Linux coletam entropia e como essa entropia é usada por / dev / random.
Eu ouvi (genericamente) métodos de coleta de entropia, como o status da CPU da placa de vídeo, quando um pacote de rede selecionado "aleatoriamente" chega, comparado com o fator de silvo no conversor analógico-digital e outros métodos ainda mais obtusos.
Acredito que a entropia "pool" é aproveitada conforme necessário e é usada para semear um gerador aleatório psuedo ....
Não estou buscando uma resposta detalhada, mas estou interessado em saber se essa é a abordagem geral usada pelo Unix / Linux? ... e talvez algumas dicas sobre o que realmente está acontecendo na face de carvão da coleção de entropia. .. e então, qual é a entropia inserida .. É uma cifra da AES Rijndael?
As informações básicas dos meus comunicados acima vieram do Security Now! De Steve Gibson ! podcast: Episode # 301 Going Random, Part 2 of 2 ... Ele só falou genericamente (mas como é o estilo dele, com detalhes e clareza suficientes para que eu pudesse entendê-lo. Ouvir os 300 episódios anteriores ajuda :), ... e gostaria de saber se é assim que o Unix / Linux faz isso ...
Respostas:
O Linux possui dois geradores de números aleatórios disponíveis para o espaço do usuário,
/dev/random
e/dev/urandom
./dev/random
é uma fonte de aleatoriedade "verdadeira" - ou seja, não é gerada por um gerador de números pseudo-aleatórios. A entropia é alimentada para isso pelo driver de entrada e pelo manipulador de interrupção, através das funçõesadd_input_randomness
eadd_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 alterna para um gerador criptograficamente forte.Os aplicativos do espaço do usuário podem alimentar o pool de entropia escrevendo para
/dev/{,u}random
.Leia a página de manual aleatória (4) e o arquivo
drivers/char/random.c
na árvore de fontes do kernel. É bem comentado e a maior parte do que você pergunta é explicada lá.O FreeBSD
/dev/random
por padrão é um gerador de números pseudo-aleatórios usando o algoritmo Yarrow (mas pode apontar para um RNG de hardware, se houver um conectado). O gerador de software obtém entropia da Ethernet e conexões seriais e interrupções de hardware (passíveis de alteraçãosysctl kern.random
). Acredita-se que o algoritmo Yarrow seja seguro, desde que o estado interno seja desconhecido, portanto/dev/random
, sempre deve gerar dados de alta qualidade sem bloquear. Veja aleatório (4) .No NetBSD,
/dev/random
fornece dados aleatórios baseados apenas na entropia coletada (de discos, rede, dispositivos de entrada e / ou unidades de fita; ajustável usando rndctl ), enquanto/dev/urandom
volta para um PRNG quando o pool de entropia está vazio, semelhante ao Linux. Veja aleatório (4) , rndctl (8) , rnd (9) .O OpenBSD possui quatro geradores:
/dev/random
é um gerador de hardware,/dev/srandom
é um gerador de dados aleatórios seguro (usando MD5 no pool de entropia: "o disco e o dispositivo de rede interrompe e tal"),/dev/urandom
é semelhante, mas retorna a um PRNG quando o pool de entropia está vazio. O quarto,/dev/arandom
também é um PRNG, mas usando RC4 . Veja aleatório (4) , arc4random (3) .O Mac OS X também usa o algoritmo Yarrow para
/dev/random
, mas possui um trabalho idêntico/dev/urandom
para compatibilidade. "Entropia adicional é alimentada ao gerador regularmente pelo daemon SecurityServer a partir de medições aleatórias de jitter do kernel." Veja aleatório (4) .fonte
cat /dev/random
e sempre se perguntou por que meu fluxo parou depois de tantos personagens