Os dados / dev / random são um código AES psuedo-random e de onde vem a entropia?

8

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

Peter.O
fonte

Respostas:

14

O Linux possui dois geradores de números aleatórios disponíveis para o espaço do usuário, /dev/randome /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ções add_input_randomnesse 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 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.cna árvore de fontes do kernel. É bem comentado e a maior parte do que você pergunta é explicada lá.


O FreeBSD /dev/randompor 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ção sysctl 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/randomfornece 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/urandomvolta 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/arandomtambé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/urandompara 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) .

camh
fonte
Obrigado. Uma boa visão geral e, a partir da fonte, vejo que estamos seguros nas mãos de um Twisted Generalized Feedback Shift Register (coisas assustadoras :) ... Juntamente com entradas "aleatórias" obtusas para o pool, parece que um hash SHA é gerou "do outro lado da piscina, 16 palavras (512 bits) de cada vez" e misturou-se novamente à piscina. Depois, mais algumas rodadas são realizadas na piscina ... Steve Gibson comenta em seu podcast que: O SHA-256 usa / é o hash de ponta mais forte que temos. ... eu não descobri o que gera saída / dev / urandom, mas o processo de
antecipação
+1, boa resposta; Eu tentei uma vez para gerar dados de caracteres aleatórios com cat /dev/randome sempre se perguntou por que meu fluxo parou depois de tantos personagens
Mike Pennington