Para uma aula sobre criptografia, estou tentando drenar o pool de entropia no Linux (por exemplo, fazer /proc/sys/kernel/random/entropy_avail
ir para 0 e bloquear a leitura de um comando de /dev/random
), mas não consigo fazer isso acontecer. Eu deveria obter leituras de /dev/random
para bloquear. Se eu executar estes dois comandos:
watch -n 0.5 cat /proc/sys/kernel/random/entropy_avail
para assistir a entropia e então:
od -d /dev/random
para despejar o pool aleatório, o valor do watch
comando paira entre 3700 e 3900, e ganha e perde apenas um pouco enquanto eu executo este comando. Deixei os dois comandos serem executados por cerca de três minutos sem nenhuma alteração substancial discernível no tamanho do arquivo entropy_avail
. Eu não fiz muito no computador durante esse tempo. Pesquisando no Google, descobri que talvez um gerador de números aleatórios de hardware possa ser tão bom que a entropia não caia, mas se eu fizer isso:
cat /sys/devices/virtual/misc/hw_random/rng_available
Não vejo nada, apenas recebo uma linha em branco. Então tenho algumas perguntas:
- O que está reabastecendo minha entropia tão bem e como posso encontrar a fonte específica de aleatoriedade?
- Existe alguma maneira de desativar temporariamente as fontes de aleatoriedade para que eu possa forçar esse bloqueio a acontecer?
Há uma quantidade surpreendente de desenvolvimento acontecendo em torno do dispositivo aleatório Linux. O bloqueio lento
/dev/random
se foi e substituído por um jejum/dev/random
que nunca fica sem dados.Você terá que viajar no tempo, como antes do linux 4.8 ( que introduziu um algoritmo crng muito mais rápido ) ou possivelmente linux 5.6 ( que introduziu a geração de entropia jitter ).
Não há como recuperar o comportamento original nos kernels atuais.
Se você está vendo esse problema em versões mais antigas do Linux, hwrng à parte, você pode estar usando
haveged
ou rng-toolsrngd
ou provedores de entropia de espaço de usuário semelhantes.Algumas distros os instalam por padrão para evitar travamentos enquanto aguardam alguns bits aleatórios; nesse caso, você pode desinstalá-los ou desativá-los ou tentar de dentro de um shell initrd / busybox onde nenhum outro processo está sendo executado.
Se o problema persistir, você pode ter um hardware muito barulhento do qual o kernel continua coletando entropia naturalmente.
A partir do kernel 5.6,
/dev/random
obtém aleatoriedade do CRNG do kernel, que é inicializado durante a inicialização e não bloqueia.Consulte "Removendo o pool de bloqueio /dev/random do Linux" .
Eu acho que você teria que usar um kernel pré-5.6.
Isso pode depender do seu hardware, se estiver usando os recursos da CPU, pode ser interminável. Outro hardware não é.
No entanto, você pode tentar a opção do kernel
random.trust_cpu=off
ao inicializar.