É provável que você esteja ficando sem entropia. A geração de chaves requer muitos números aleatórios de alta qualidade; sem a atividade do usuário para fornecer aleatoriedade de alta qualidade para o computador, o pool de entropia está sendo exaurido pela geração, e o processo de geração simplesmente pára, esperando que a piscina seja reabastecida.
Suas escolhas, em ordem crescente de satisfatoriedade, são
-
reconfigurando o gpg para usar o gerador de números pseudo-aleatórios sem bloqueio, que seria insensato (veja abaixo),
-
usando uma solução de software para derivar mais entropia do estado do sistema existente (o kernel é notoriamente conservador sobre a quantidade de entropia que está preparada para derivar do estado do sistema, particularmente quando esse estado não possui entrada humana direta, por exemplo, CPU ou Horários da NIC); Como você apontou, haveged é uma dessas soluções, ou
-
fornecendo ao computador outra fonte física de entropia de alto grau. Dispositivos como a Entropy Key ou o OneRNG pode satisfazer este requisito (eu não tenho nenhuma conexão com qualquer produto salvo que eu possuo uma Chave Entropy, e estou muito feliz com isso).
Editar : mzhaase chama minha atenção em um comentário para este artigo em / dev / urandom vs. / dev / random (pelo qual muito obrigado, é um excelente artigo!) e questiona minha antipatia de usar urandom
para criar chaves. Na verdade, o artigo não diz que as duas fontes são equivalentes e observa que
Linux's /dev/urandom happily gives you not-so-random numbers before the kernel even had the chance to gather entropy. When is that? At system start, booting the computer.
Isso quer dizer que, após a inicialização, até que o urandom
PRNG tenha sido inicializado com entropia suficiente, não é seguro usá-lo para a geração de chaves. Isso pode demorar um pouco, especialmente em um servidor autônomo sem cabeça, e não sabemos quando o limite foi atingido, porque o sistema não nos informa explicitamente.
Agora, se /dev/random
estiver preparado para emitir números, posso razoavelmente inferir que o conjunto de entropia é profundo o suficiente para que urandom
tenha sido inicializado corretamente. Mas se eu tiver que verificar /dev/random
para bloquear antes de cada uso de urandom
(que, dado que eu gero chaves com menos frequência do que reinicializo, provavelmente é o caso), eu poderia simplesmente usar os números de /dev/random
para gerar minhas chaves.