Não é possível exportar a chave secreta sem fornecer senha

2

Esqueci minha frase-senha da minha chave GPG secreta e quero exportá-la, para que eu possa forçá-la com alguns prováveis.

No entanto, a execução de gpg --export-secret-keys sempre fará com que o agente-gpg solicite minha frase-senha, independentemente das opções que eu der ao gpg. --batch , --yes e --passphrase-fd não têm efeito.

Estou executando o GPG 2.1.15.

Eu tentei exportar uma chave secreta em uma máquina executando o GPG 2.0.22 sem problemas. Ainda é possível fazer isso?

Se não, minha chave está perdida.

    
por Lasse Halberg Haarbye 18.09.2016 / 00:02

1 resposta

2

Você pode transferir a chave "manualmente" da seguinte maneira, sem tentar descriptografá-la:

# create temporary destination dir
mkdir -m 700 /tmp/alt-gnupg
# transfer public keys using export/import, assuming name "user-000"
gpg2 --export user-000 | gpg2 --homedir /tmp/alt-gnupg --import
# transfer private keys using file copy
for g in $(gpg2 --list-keys --with-keygrip --with-colons 'user-000' |
      awk -F: '$1=="grp" {print $10}'); do
    cp ~/.gnupg/private-keys-v1.d/$g.key /tmp/alt-gnupg/private-keys-v1.d
done
# check you got them
gpg2 --homedir /tmp/alt-gnupg --list-secret-keys

Isso funciona porque as chaves privadas são armazenadas em arquivos no formato <keygrip>.key e podemos encontrar os keygrips sem destravar.

Para forçar as chaves:

# use alternate gnupg dir
export GNUPGHOME=/tmp/alt-gnupg
# create dummy encrypted file
echo hello |
gpg2 --encrypt --recipient user-000 --armor >/tmp/msg.asc
# tell gpg-agent to accept loopback pinentry
echo allow-loopback-pinentry >${GNUPGHOME}/gpg-agent.conf
# restart gpg-agent
gpg-connect-agent /bye
# and now...
for p in pass1 pass2; do
    gpg2 --batch --pinentry-mode=loopback --passphrase "$p" --quiet --decrypt /tmp/msg.asc >/dev/null 2>&1 && echo "yes!! pass: $p"
done
    
por 19.09.2016 / 17:02