As liberações do gnupg de 2.1.16 (atualmente 2.1.17) bloqueiam a espera de entropia apenas na primeira chamada .
Nota: não se trata de uma tentativa de gerar uma chave, apenas para descriptografar um arquivo e iniciar o agente.
A primeira vez que o gpg-agent é iniciado, diretamente com gpg2 file.gpg
ou usando um aplicativo como pass
, o pinentry aparece e, assim que eu digito minha senha e pressiono, Enterela fica suspensa por cerca de 15s.
Todas as chamadas subseqüentes, dentro da janela do default-cache-ttl, são executadas imediatamente.
Em execução no --debug-all
modo, o período em que ocorre o travamento é impresso 1 :
gpg: DBG: chan_6 <- S PROGRESS need_entropy X 30 120
gpg: DBG: chan_6 <- S PROGRESS need_entropy X 120 120
gpg: DBG: chan_6 <- S PROGRESS need_entropy X 30 120
gpg: DBG: chan_6 <- S PROGRESS need_entropy X 120 120
gpg: DBG: chan_6 <- S PROGRESS need_entropy X 30 120
...
Eu instalei o rng-tools para complementar o pool de entropia:
cat /proc/sys/kernel/random/entropy_avail
4094
e comparado com uma máquina com a mesma versão do gnupg que não possui rng-tools ou não possui instalado, que não apresenta atraso:
cat /proc/sys/kernel/random/entropy_avail
3783
Portanto, parece haver entropia suficiente na piscina. Isso foi testado nos núcleos 4.8.13 e 4.9.
O gpg usa um pool diferente? Como posso fornecer entropia suficiente ou eliminar o atraso de 15s ao iniciar o agente?
1. O log de depuração completo .
fonte
rng-tools
como explicar aqui? serverfault.com/questions/214605/gpg-not-enough-entropyRespostas:
Eu acho que sei o que está acontecendo. No agent / gpg-agent.c do gnupg, essa função processa mensagens do libgcrypt.
Essa última parte com npth_usleep foi adicionada entre 2.1.15 e 2.1.17. Como isso é compilado condicionalmente se a libgcrypt for anterior à 1.8.0, a correção direta seria recompilar o gnupg contra a libgcrypt 1.8.0 ou posterior ... infelizmente essa versão ainda não parece existir.
O estranho é que esse comentário sobre libgcrypt reading / dev / random não é verdadeiro. Rastrear o agente revela que ele está lendo em / dev / urandom e usando o novo syscall do getrandom (2), sem bloquear. No entanto, ele envia muitas mensagens need_entropy, causando o bloqueio de npth_usleep. A exclusão dessas linhas corrige o problema.
Devo mencionar que npth parece ser algum tipo de biblioteca multitarefa cooperativa, e npth_usleep é provavelmente o seu caminho para produzir, portanto, talvez seja melhor reduzir significativamente esse atraso, apenas no caso de a libgcrypt decidir bloquear algum dia. (1 ms não é perceptível)
fonte
killall gpg-agent; /path/to/gpg-agent --daemon
.