É / dev / random data um cifra AES psuedo-random, e de onde vem a entropia?

8

Meu entendimento atual de um pool de entropia é que ele coleta realmente bits de dados a uma taxa lenta. Eu gostaria de saber como o Unix & O Linux coleta a entropia e como essa entropia é usada por / dev / random.

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 chiado no conversor analógico-digital e outros métodos ainda mais obtusos.

Acredito que a "piscina" de entropia é utilizada conforme necessário e é usada para semear um gerador aleatório de psuedo ...

Não estou atrás de 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 no carvão de coleta de entropia -face ... e então, qual é a entropia alimentada. É uma cifra AES Rijndael?

As informações básicas dos meus compromissos acima, vieram do podcast Segurança Agora! : de Steve Gibson: Episódio # 301 Indo Aleatoriamente, Parte 2 de 2 ... Ele só falou genericamente (mas como é seu estilo, com detalhes e clareza suficientes para que até eu pudesse entendê-lo. Tendo escutado os 300 episódios anteriores, ajuda :),. ..e eu gostaria de saber se é assim que o Unix / Linux faz isso ...

    
por Peter.O 02.06.2011 / 09:30

1 resposta

14

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

    
por 02.06.2011 / 10:31