Gerar entropia para chave PGP


12

Estou conectado a uma VM remotamente e tentando gerar uma chave PGP de 4096 bits, ele fica travado para sempre porque não há entropia e, como estou trabalhando na área de trabalho remota, provavelmente não detecta o movimento do mouse como entropia.

Como posso gerar alguns?

Eu tentei, cat /dev/urandom > /dev/nullmas isso não ajuda.

Respostas:


13

A obtenção de dados para fora de /dev/randomou /dev/urandomdefinitivamente é não vai ajudar, tudo o que vai fazer é esgotar o seu pool de entropia, tornando o problema ainda pior. A principal diferença entre esses dois arquivos é que, mesmo quando o kernel ficar sem entropia urandom, continuará gerando dados aleatórios de menor qualidade, enquanto randombloqueará até conseguir reunir dados aleatórios de alta qualidade. O PGP requer os dados aleatórios mais altos possíveis para gerar chaves seguras, portanto, ele sempre será usado /dev/random.

Se você tiver bons dados aleatórios por aí, ou exportar alguns de outros servidores /dev/random, poderá inseri- catlos nos servidores /dev/randompara obter mais entropia. Você nunca deve ter cato mesmo arquivo duas vezes /dev/random.

Se você costuma ficar sem entropia, também pode considerar instalar algo como haveged , um daemon que gera novamente a entropia em segundo plano e preenche /dev/randomconforme necessário.

Também pode ser tentador ligar simbolicamente /dev/randoma /dev/urandom, mas isso deve ser considerado um risco de segurança como qualquer chave gerada usando pode ser menos seguro do que deveriam. Embora possa ajudar a aplicativos menos críticos, você deve considerar todos os outros usos possíveis /dev/random, incluindo outros usuários gerando suas próprias chaves, CSR, etc.


Note que no FreeBSD, /dev/randomé um PRNG de alta qualidade e normalmente não deve ser bloqueado.
23415 Kevin Kevin

@ Kevin /dev/randomsão PRNG de alta qualidade em BSD e Linux modernos, com certeza. Mas bloqueará se não houver entropia suficiente disponível. Por outro lado, /dev/urandomnão bloqueará se não houver suficiente disponível, mas sua qualidade aleatória pode sofrer nesse caso. Nos detalhes, existem muitas sutilezas entre implementações aleatórias e aleatórias entre o Linux e os vários BSDs, mas o acima deve ser verdadeiro em todos os AFAIK.
Huygens

No Linux, você pode gerar mais entropia simplesmente executando ping em um host (por exemplo, ping 8.8.8.8se você possui outro host de rede, tente fazer pings a cada 100ms (se o seu RTT for <100ms, é claro)). E / ou use findpara procurar arquivos no disco rígido e liberar o cache de RAM entre cada pesquisa de arquivo.
Huygens

@ Huygens: Abra a página de manual que eu vinculei e Ctrl + F "kern.random.sys.seeded"; por padrão, /dev/randomnão bloqueia no FreeBSD.
Kevin

1
@ Kevin sim, você está certo, o agrupamento ou a colheita de entropia talvez sejam duas maneiras distintas de "semear" o PRNG. E depois de alguns testes na minha caixa BSD, descobri que o aleatório e o aleatório se comportam da mesma maneira, eles bloqueiam quando não conseguem gerar o PRNG bom o suficiente. Tente executar dd if=/dev/random of=/tmp/rndtest bs=64M count=1após uma nova inicialização, foram necessárias duas execuções consecutivas para ver o tempo para gerar o aumento de 64 MB do arquivo. Eu pensei que não veria esse efeito com urandom como entrada, mas o FreeBSD parece estar bloqueando também, ao contrário do Linux.
Huygens


4

Eu recomendaria gerar suas chaves gpg em sua máquina local, que terão uma aleatoriedade muito melhor que a remota. E depois migre as chaves usando SSH para sua máquina remota.

A geração local será mais rápida (mais fonte de entropia), mais segura (ninguém pode espionar o processo se sua máquina não estiver infectada, melhor aleatoriedade).

Se você ainda deseja gerá-los remotamente: No Linux, você pode gerar mais entropia simplesmente executando ping em um host (por exemplo, ping 8.8.8.8se você possui outro host de rede, tente fazer pings a cada 100ms (se seu RTT for <100ms, é claro). E / ou use findpara procurar arquivos no disco rígido e liberar o cache de RAM entre cada pesquisa de arquivo.

Você também pode instalar, havegedmas ler as limitações se estiver executando em um ambiente virtual: https://wiki.archlinux.org/index.php/Haveged#Virtual_machines


Na minha opinião, esta é a solução certa - +1 de mim.
MadHatter

3

Em sistemas baseados no Debian, você pode instalar o rng-toolspacote usando atp-get e, em seguida, iniciar o daemon para gerar entropia:

echo HRNGDEVICE=/dev/urandom >> /etc/default/rng-tools && service rng-tools restart

Nos servidores CentOS-6, o rngdaemon é instalado como uma das ferramentas básicas (pelo menos na maioria dos sistemas em que trabalhei) e é possível executar o seguinte comando para iniciá-lo, a fim de gerar entropia:

sed -i \'s|EXTRAOPTIONS=\"\"|EXTRAOPTIONS=\"-r /dev/urandom\"|g\' /etc/sysconfig/rngd && service rngd restart

Eu não acho que usar o urandom como fonte para o rngd seja inteligente. Isso ajudará a esgotar a entropia disponível mais rapidamente e, uma vez esgotado, será uma fonte tendenciosa da entropia. Então, eu evitaria essa solução.
Huygens

1
sudo yum install haveged && sudo systemctl start haveged

definitivamente funciona em uma VM do CentOS 7.2. Às vezes, você deseja criar chaves GPG em uma vm, se estiver criando um monte e quiser seu chaveiro intacto.

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.