GPG não tem entropia suficiente


86

Eu tenho vários processos em execução em segundo plano para tentar obter entropia suficiente, mas ainda estou falhando.

**We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 210 more bytes)**

Eu preciso de um método para gerar a chave que funciona, porque o que estou tentando fazer está aparentemente falhando.

Respostas:


112

Você já deu uma olhada no RNG?

Tipos de Fedora / Rh / Centos: sudo yum install rng-tools

Nos tipos de deb: sudo apt-get install rng-toolspara configurá-lo.

Em seguida, execute sudo rngd -r /dev/urandomantes de gerar as chaves.

Referência: http://it.toolbox.com/blogs/lim/how-to-generate-enough-entropy-for-gpg-key-generation-process-on-fedora-linux-38022


4
Além disso, em uma observação mais séria, você pode usar sudo apt-get install rng-toolsse estiver no Ubuntu, em vez de sudo yum install rng-utilscomo eles têm para o Fedora, já que nenhum rng-utilspacote existe para o Ubuntu.
Jason Swett

4
O pacote é nomeado rng-toolsno Fedora e no EL6, então eu suspeito de um erro de digitação no artigo vinculado. BTW, é uma boa idéia fornecer as partes essenciais da resposta aqui e o link para referência, caso o link fique inoperante no futuro.
Michael Hampton

11
Não existe "entropia de baixa qualidade" ou "entropia falsa" no urandom. O urandom chama o mesmo código que / dev / random. Não há necessidade de alimentar aleatoriedade adicional no CSPRNG (exceto em período de folga e sua distribuição deve cuidar disso). Este é um mito e não deve ser propagado. Veja, por exemplo, sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers ou este vídeo: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger


2
O comentário mais votado é um absurdo; infelizmente eu vejo muito isso no SO. Os avisos (mesmo quando completamente errados) receberão muitos votos e nenhuma maneira de corrigi-los (nenhuma opção com voto negativo) significa que não podemos nos livrar dos mitos.
Stijn de Witt

28

Consegui gerar a chave

apt-get install rng-tools

Em outra janela SSH aberta

 gpg --gen-key

Volte para sua primeira sessão SSH e execute

sudo rngd -r /dev/urandom

Deixe isso correr até que o gpg gere suas chaves!


9
Eu recomendaria definitivamente nunca usar /dev/urandompara gerar chaves de qualquer importância.
Andrew Barber

12
@AndrewBarber Nonsense. É o método recomendado.
David Schwartz

3
@AndrewBarber Ele foi projetado explicitamente para esse fim. Basicamente, /dev/randomé um erro de design. Ele deve sempre bloquear na primeira (sempre) invocação (na primeira inicialização) quando nenhuma entropia foi coletada. Como acontece em outros sistemas operacionais. Em vez disso, temos duas piscinas agora. Apenas nunca use, /dev/randomnão tem vantagens.
Stijn de Witt

@AndrewBarber, o que você recomendaria?
Qodeninja

13

Para verificar a quantidade de bytes de entropia disponíveis atualmente, use

cat /proc/sys/kernel/random/entropy_avail

O intervalo de entropia tem 4096 bytes de tamanho, que pode ser esgotado muito rapidamente.

Usando esta pequena ferramenta 'readspeed' ( http://1wt.eu/tools/readspeed/ ), você pode medir a rapidez com que o balde de entropia é preenchido com diferentes métodos.

Por exemplo, inicie:

$ ./readspeed < /dev/random

e mova o mouse. Você verá que a 'velocidade de leitura' esvazia o balde de entropia assim que é preenchido e, quando você move o mouse, ele se enche um pouco.

Tentando métodos diferentes, parece que a entrada do teclado e os movimentos do mouse são os mais eficazes para reabastecer esse balde. As transferências de rede e as cópias do disco rígido não têm muita influência.

Finalmente, existem dispositivos de geração de entropia disponíveis, como este: http://www.entropykey.co.uk/ .


4
Não há "entropia de baixa qualidade" em urandom. O urandom chama o mesmo código que / dev / random. Este é um mito e não deve ser propagado. Veja, por exemplo, sockpuppet.org/blog/2014/02/25/safely-generate-random-numbers ou este vídeo: media.ccc.de/v/32c3-7441-the_plain_simple_reality_of_entropy
Sebastian Wiesinger

Esta resposta tem 5 anos. Pensamos que o urandom não era tão seguro quanto o aleatório, mas as coisas mudaram desde então e o urandom é considerado seguro.
Julian Vehent

1
Fato é que estava seguro desde o início. Os avisos também estavam errados há 7 anos.
Stijn de Witt

8

+1 para ferramentas de rng

Caso você esteja preso na situação como eu, não tenho permissão para instalar um novo software (rng-tools) em um servidor sem cabeça, praticamente sem hardware de entrada (placa de som, teclado, mouse) conectado. Você pode executar esse código simples a partir de outro terminal conectado ao mesmo servidor, para adicionar à entropia. Não importa se você começar a executar isso antes ou depois de iniciargpg --gen-key

$ nice -n 19 bash
$ until [ $COUNT -lt 1 ]; do
  let COUNT=`cat /proc/sys/kernel/random/entropy_avail`
  echo "`date` COUNTER $COUNT"
done

A primeira linha é iniciar um novo shell bash, com prioridade mais baixa (eu precisava ser legal em um servidor compartilhado por muitos usuários). O loop até é infinito; lembre-se de quebrá-lo quando a chave for gerada. Tudo o que está fazendo é fazer com que o tráfego da rede aumente a entropia. Ele também monitora o contador entropy_avail para mostrar como ele é preenchido e esvaziado no outro lado pelo gpg. No meu caso, o contador encheu rapidamente para 64 e foi esvaziado de volta para 0 (acho que o gpg pega em um pedaço de 64). Eu estava esperando a geração de chaves de 4096 bits por mais de 3 horas no servidor. Depois de começar a executar esse script, ele foi concluído em menos de 5 minutos.


Eu também não tinha acesso root no servidor remoto e isso funcionou na criação de alguma entropia. Eu acho que a condição deve ser alterada para [ $COUNT -lt 0 ]. Porque para um sistema com realmente menos entropia, chega a 0 às vezes e para. O GPG está realmente com fome de entropia.
Ajay Brahmakshatriya

Obrigado, isso deve ser o bastante para eu fazer alguma geração de entropia em uma caixa com airgapped. Exceto que não usarei data, pois isso é previsível
grepsedawk

7

Eu estava vinculado e determinado a gerar entropia no meu servidor Ubuntu 14.04 decapitado, a fim de gerar uma chave 4096 com gpg --gen-key

Existe um pacote para gerar entropia chamado haveged. Exemplo de instalação:

sudo apt-get install haveged

Eu tive que, sudo apt-get install rng-toolsuma vez que é uma dependência no teste a seguir.

Exemplo de um teste para ver se a entropia é gerada por haveged:

cat /dev/random | rngtest -c 1000

Uma quantidade muito pequena de falhas é aceitável em qualquer gerador de números aleatórios, mas você pode esperar 998-1000 sucessos com muita frequência ao usar o hovered.

Eu descobri sobre isso em um tutorial aqui:

https://www.digitalocean.com/community/tutorials/how-to-setup-additional-entropy-for-cloud-servers-using-haveged

Agora tenho chaves depois de executar gpg --gen-key


0

Corri para este problema ao executar pacman-key --initem arco. As outras soluções aqui não funcionaram bem para mim, mas descobri que simplesmente fazer ping no meu roteador funcionava bem:ping -f ip.of.my.router



0

havegedé a melhor maneira, mas se você não conseguir instalar nada, poderá gerar entropia manualmente. Este método permitiu gpg --gen-kenconcluir em 1-2 minutos na minha máquina (em comparação aos 10s com haveged). Portanto, é cerca de 10x mais lento.

Execute isso em outro terminal enquanto gpg --gen-keyestiver em execução:

while true; do
    # print entropy available
    cat /proc/sys/kernel/random/entropy_avail
    # write a 1 MB stream of zeros to /tmp/foo
    # "conv=fdatasync" flushes the disk cache
    dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync
done

Um forro:

while true; do cat /proc/sys/kernel/random/entropy_avail; dd bs=1M count=1 if=/dev/zero of=/tmp/foo conv=fdatasync; done
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.