É ruim ter uma baixa entropia em / dev / random?

5

Gostaria de saber se, para o usuário médio do Linux, é considerado ruim - de um ponto de vista de segurança ou de quaisquer outros pontos de vista relevantes - não haver ou quase nenhuma entropia restante em / dev / random.

Edit: Eu não preciso gerar números aleatórios (eu usaria / dev / urandom para isso e até mesmo para geração de senha e criptografia de disco). Só por diversão, eu tenho um script bash que gera strings de caracteres aleatórios fora de / dev / random e claro, depois de brincar um pouco com ele, eu fico sem entropia em / dev / random e ele bloqueia. No IRC me disseram que é "ruim" fazê-lo, mas não recebi nenhuma razão. Isso é ruim porque o usuário médio do Linux gera automaticamente coisas aleatórias usando / dev / random? Se sim, quais programas estão envolvidos?

Eu também entendo que não ter entropia restante em / dev / random torna a geração de números determinística. Mas, novamente, o meu computador (o usuário médio do Linux) precisa de números verdadeiramente aleatórios?

Edite 2: Acabei de monitorar o nível de entropia a cada segundo em / dev / random durante cerca de 3 minutos, onde lancei meu script bash que usa entropia para gerar uma string de caractere aleatório no início do monitoramento. Eu fiz um enredo. Podemos ver que, de fato, o nível de entropia oscila de alguma forma, então alguns programas no meu computador estão usando / dev / random para gerar coisas. Existe uma maneira de listar todos os programas usando o arquivo / dev / random?

Tambémpodemosverquelevamenosdeumminutoparaproduzir"níveis aceitáveis" de entropia quando o pool de entropia for esvaziado.

    
por Kentucker_Filled_Turkey 05.08.2015 / 01:05

2 respostas

5

A entropia é alimentada em /dev/random a uma taxa bastante lenta, portanto, se você usar qualquer programa que use /dev/random , é muito comum que a entropia seja baixa.

Mesmo se você acredita na definição de entropia do Linux, a baixa entropia não é um problema de segurança. /dev/random bloqueia até que esteja satisfeito de ter entropia suficiente. Com baixa entropia, você obterá aplicativos aguardando que você mexa o mouse, mas não uma perda de aleatoriedade.

Na verdade, a definição de entropia do Linux é falha: é uma definição extremamente conservadora que se esforça para alcançar um nível teórico de aleatoriedade que é inútil na prática. Na verdade, a entropia não se desgasta - depois de ter o suficiente, você tem o suficiente. Infelizmente, o Linux só tem duas interfaces para obter números aleatórios: /dev/random , que bloqueia quando não deveria, e /dev/urandom , que nunca bloqueia. Felizmente, na prática, /dev/urandom está quase sempre correto , porque um sistema reúne rapidamente entropia suficiente, após o que point /dev/urandom está ok para sempre (incluindo usos como a geração de chaves criptográficas) .

O único momento em que /dev/urandom é problemático é quando um sistema ainda não possui entropia suficiente, por exemplo, na primeira inicialização de uma nova instalação, após inicializar um live CD ou após clonar uma máquina virtual. Em tais situações, aguarde até que /proc/sys/kernel/random/entropy_avail atinja 200 ou mais. Depois disso, você pode usar /dev/urandom o quanto quiser.

    
por 06.08.2015 / 02:20
3

Não havendo entropia restante e sabendo que torna /dev/random determinístico. Isso permite que outros processos (incluindo aqueles iniciados por usuários mal-intencionados) possam "prever" a saída futura (por exemplo, os bytes lidos) /dev/random .

Por um lado, um bom programador Linux que precisa de aleatoriedade "verdadeira" teria lido atentamente aleatório (4) então leia (2) de /dev/random que bloquearia se nenhuma entropia estivesse disponível. Isso poderia atrapalhar a leitura dos processos. Veja também (como comentado pelo OP) os mitos sobre a página urandom .

Por outro lado, alguns programadores preferem ler /dev/urandom , o que é quase sempre bom o suficiente e não bloqueia. AFAIK, a biblioteca padrão do C ++ 11 do GCC está fazendo isso para std :: random_device .

Obviamente, a aleatoriedade é um pouco mais importante em servidores do que em desktops comuns.

Se a sua pergunta está se tornando "programadores Linux usando /dev/random bom o suficiente para estar ciente desses problemas", está se tornando uma questão de opinião, ou uma pesquisa, e então pode estar fora do tópico aqui.

Minha opinião é que os programadores devem ler aleatórios (4) .

Processadores Intel recentes têm a instrução de máquina RDRAND , e /dev/random está usando (e algumas outras coisas) como fonte aleatória. Então eu acho que a falta de entropia em /dev/random não afeta (ou seja, nunca acontece) para eles.

Então, em suma, não me importo com a baixa entropia em /dev/random . Mas eu não estou codificando software (por exemplo, sites de poker, alguns sistemas bancários) onde a aleatoriedade é extremamente importante (a ponto de custar vidas, ou milhões de € ou $). Eu acho que esses sistemas podem ter uma melhor fonte aleatória (IIRC, um gerador aleatório de hardware com uma largura de banda de megabit / segundo custa algumas centenas de euros), e eles devem ter (ou comprar consultoria para) experiência em aleatoriedade & probabilidades.

Talvez você deva simplesmente mencionar, no README e na documentação do seu software, que você está usando /dev/random e / ou /dev/urandom , para que finalidade e documenta explicitamente a importância, para o seu próprio código, de aleatoriedade.

    
por 05.08.2015 / 01:22

Tags