Explique em inglês simples sobre a entropia disponível

28

Se eu executar este comando no Ubuntu

sudo cat /proc/sys/kernel/random/entropy_avail

retorna um número que indica a quantidade de "entropia" disponível para o kernel, mas é tudo o que sei. Em que unidade essa entropia é medida? Para que isso é usado? Foi-me dito que é "ruim" se esse número for "baixo". Quão baixo é "baixo" e que coisas "ruins" acontecerão se for? Qual é um bom alcance para ser? Como é determinado?

Josh Lindsey
fonte

Respostas:

22

Seu sistema reúne alguns números aleatórios "reais" observando diferentes eventos: atividade de rede, gerador de números aleatórios de hardware (se disponível; por exemplo, processadores VIA geralmente têm um gerador de números aleatórios "reais") e assim por diante. Se alimenta aqueles no pool de entropia do kernel, que é usado por / dev / random. Os aplicativos que precisam de extrema segurança tendem a usar / dev / random como fonte de entropia ou, em outras palavras, a fonte de aleatoriedade.

Se o / dev / random ficar sem a entropia disponível, ele não poderá fornecer mais aleatoriedade e o aplicativo aguardará a aleatoriedade parar até que mais coisas aleatórias estejam disponíveis. O exemplo que eu vi durante minha carreira é que o daemon Cyrus IMAP queria usar / dev / random para a aleatoriedade e suas sessões POP queriam gerar as seqüências aleatórias nas conexões APOP a partir de / dev / random. Em um ambiente ocupado, houve mais tentativas de login do que tráfego para alimentar o / dev / random -> tudo parado. Nesse caso, instalei o rng-tools e ativei o rngd - que transferiu números semi-aleatórios de / dev / urandom para / dev / random no caso / dev / random ficar sem entropia "real".

Janne Pikkarainen
fonte
19

Se você deseja uma visão geral mais simples do problema subjacente: alguns aplicativos (como criptografia) precisam de números aleatórios. Você pode gerar números aleatórios usando um algoritmo - mas, embora pareçam aleatórios em um sentido, são totalmente previsíveis em outro. Por exemplo, se eu fornecer os dígitos 58209749445923078164062862089986280348253421170679, eles parecerão bem aleatórios. Mas se você perceber que eles são realmente dígitos do PI, saberá que o próximo será 8.

Para alguns aplicativos, isso é bom, mas para outros aplicativos (especialmente os relacionados à segurança), as pessoas desejam aleatoriedade imprevisível genuína - que não pode ser gerada por um algoritmo (isto é, programa), pois isso é por definição previsível. Esse é um problema, pois seu computador é essencialmente um programa; então, como é possível obter números aleatórios genuínos? A resposta é medir eventos genuinamente aleatórios do mundo exterior - por exemplo, intervalos entre as teclas pressionadas e usá-los para injetar aleatoriedade genuína no gerador de números aleatórios previsível. O 'pool de entropia' pode ser pensado como o armazenamento dessa aleatoriedade que é construída pelas teclas (ou o que quer que esteja sendo usado) e drenada pela geração de números aleatórios.

JustinP
fonte
2
Boa explicação ...
pradipta
Mas o PI é irracional e incluiria todas as seqüências, incluindo a sequência acima, seguida por 9 (em vez de 8).
Ajay Brahmakshatriya
9

Entropia é um termo técnico para "Aleatoriedade". Os computadores não geram realmente entropia, mas o coletam analisando coisas como as variações das velocidades de rotação do disco rígido (um fenômeno físico que é muito difícil de prever devido ao atrito, etc.) Quando um computador deseja gerar dados pseudo-aleatórios, propicie uma fórmula matemática com verdadeira entropia encontrada ao medir cliques de mouse, variações de rotação do disco rígido etc. Em termos gerais, entropy_availé a medida dos bits atualmente disponíveis para leitura./dev/random

Leva tempo para o computador ler entropia a partir de seu ambiente, a menos que tenha hardware interessante, como um diodo barulhento ou algo assim.

Se você tem 4096 bits de entropia disponível e deseja um gato, /dev/randompode esperar ler 512 bytes de entropia (4096 bits) antes que o arquivo seja bloqueado enquanto aguarda por mais entropia.

Por exemplo, se você " cat /dev/random" sua entropia diminuirá para zero. No início, você terá 512 bytes de lixo aleatório, mas ele irá parar e, aos poucos, você verá mais dados aleatórios fluindo.

Não é assim que as pessoas devem operar /dev/random. Normalmente, os desenvolvedores leem uma pequena quantidade de dados, como 128 bits, e os usam para propagar algum tipo de algoritmo PRNG. É educado não ler mais entropia do /dev/randomque você precisa, pois leva tanto tempo para se acumular e é considerado valioso. Portanto, se você o drenar, catimprimindo o arquivo de forma descuidada como acima, você causará outros aplicativos que precisam ser lidos /dev/randompara bloquear. Em um sistema em funcionamento, percebemos que muitas funções criptográficas estavam paralisadas. Descobrimos que um trabalho cron estava chamando um script python que continuava inicializandoramdom.random()em cada execução, que era executada a cada poucos segundos. Para corrigir isso, reescrevemos o script python para que ele fosse executado como um daemon inicializado apenas uma vez e o trabalho cron leria dados via XMLRPC para que não continuasse lendo /dev/randomna inicialização.

Carlos D. Garza
fonte
1
"Para consertar isso, reescrevemos o script python para que ele fosse executado como um daemon que foi inicializado apenas uma vez e o trabalho cron leria dados via XMLRPC para que ele não continuasse lendo / dev / random na inicialização". --- Exceto a parte que citei, que é difícil de avaliar porque não está claro se seu script realmente precisava de aleatoriedade ou não, sua resposta é muito clara e explícita.
Craig Hicks
8

O arquivo somente leitura entropy_avail fornece a entropia disponível. Normalmente, este será 4096 (bits), um pool de entropia completo.

Você pode ler mais em: http://linux.die.net/man/4/random

Prémio
fonte