
Ich habe die Passphrase für meinen geheimen GPG-Schlüssel vergessen und möchte sie exportieren, damit ich sie mit ein paar wahrscheinlichen Schlüsseln mit Brute-Force-Methode knacken kann.
Beim Ausführen wird der GPG-Agent jedoch gpg --export-secret-keys
immer nach meiner Passphrase fragen, unabhängig von den Optionen, die ich GPG gebe. --batch
, --yes
, und --passphrase-fd
haben keine Wirkung.
Ich verwende GPG 2.1.15.
Ich habe versucht, einen geheimen Schlüssel auf einem Rechner mit GPG 2.0.22 zu exportieren, ohne Probleme. Ist das immer noch möglich?
Wenn nicht, ist mein Schlüssel verloren.
Antwort1
Sie können den Schlüssel wie folgt „von Hand“ übertragen, ohne einen Entschlüsselungsversuch zu unternehmen:
# 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
Dies funktioniert, weil die privaten Schlüssel in Dateien der Form gespeichert sind <keygrip>.key
und wir die Keygrips finden können, ohne sie zu entsperren.
So knacken Sie die Schlüssel mit roher Gewalt:
# 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