Como gerar a chave gpg sem interação do usuário?

8

Eu encontrei em link método para gerar chaves gpg sem interação do usuário, mas não parece funcionar.

Meu script é:

#!/usr/bin/env bash
rm -rf .gnupg
mkdir -m 0700 .gnupg
touch .gnupg/gpg.conf
chmod 600 .gnupg/gpg.conf
tail -n +4 /usr/share/gnupg2/gpg-conf.skel > .gnupg/gpg.conf

touch .gnupg/{pub,sec}ring.gpg


cat >.gnupg/foo <<EOF
    %echo Generating a basic OpenPGP key
    Key-Type: RSA
    Key-Length: 2048
    Subkey-Type: RSA
    Subkey-Length: 2048
    Name-Real: User 1
    Name-Comment: User 1
    Name-Email: [email protected]
    Expire-Date: 0
    Passphrase: kljfhslfjkhsaljkhsdflgjkhsd
    %pubring foo.pub
    %secring foo.sec
    # Do a commit here, so that we can later print "done" :-)
    %commit
    %echo done
EOF

gpg2 --verbose --batch --gen-key .gnupg/foo

Quando eu executo, mostra:

=$ ./gen.keys.sh 
gpg: Generating a basic OpenPGP key
gpg: no running gpg-agent - starting one
gpg: writing public key to 'foo.pub'
gpg: writing secret key to 'foo.sec'

Mas, então, apenas trava.

Quando eu verifico, nesse meio tempo, ps tree para esse usuário, vejo:

USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
tstpg    22603  0.0  0.0  24108  5688 pts/9    Ss   14:59   0:00 -bash
tstpg    22624  0.0  0.0  13688  3168 pts/9    S+   14:59   0:00  \_ bash ./gen.keys.sh
tstpg    22632  0.2  0.0  27428  3676 pts/9    SL+  14:59   0:00      \_ gpg2 --verbose --batch --gen-key .gnupg/foo
tstpg    22634  0.3  0.0  18072  2884 pts/9    SL+  14:59   0:00          \_ gpg-agent --server

Em ~ / .gnupg / gpg.conf não há menção sobre o agente, e não tenho ideia do que ele está tentando fazer.

Os arquivos foo.pub/foo.sec são gerados no diretório home, mas estão vazios.

O que estou perdendo? Como gerar a chave sem qualquer tipo de interação do usuário?

Versões:

  • gpg (GnuPG) 2.0.26
  • libgcrypt 1.6.2
por eijeze 11.05.2015 / 15:02

2 respostas

4

É 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

  1. reconfigurando o gpg para usar o gerador de números pseudo-aleatórios sem bloqueio, que seria insensato (veja abaixo),

  2. 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

  3. 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.

    
por 11.05.2015 / 16:34
1

Trabalhei nisso como parte da geração de chaves para uma instalação automatizada de aplicativos. Instalar e iniciar o pacote ' rngd ' para gerar o entroy corrigirá seu problema. Simples de instalar e usar.

Aqui está o código .

  • Inicia o rngd ( /dev/hwrandom por padrão, mas modificável) para fornecer uma fonte de entropia
  • Copia um modelo simples sobre (substitua o e-mail e o nome do modelo jinja por o que você quer)
  • gera uma chave usando gpg
  • importa para o chaveiro local
por 29.05.2015 / 18:00

Tags