如果不提供密码,则无法导出密钥

如果不提供密码,则无法导出密钥

我忘记了我的秘密 GPG 密钥的密码,我想导出它,以便我可以使用几个可能的密码来强制破解它。

但是,gpg --export-secret-keys无论我给 gpg 什么选项,运行时 gpg-agent 总会要求输入密码。--batch--yes--passphrase-fd都不起作用。

我正在运行 GPG 2.1.15。

我尝试在运行 GPG 2.0.22 的机器上导出密钥,没有任何问题。现在还能这样做吗?

如果没有,我的钥匙就丢失了。

答案1

您可以按如下方式“手动”传输密钥,而无需尝试解密:

# 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

这是可行的,因为私钥存储在形式为的文件中<keygrip>.key,我们无需解锁就可以找到密钥。

暴力破解密钥的方法如下:

# 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

相关内容