我忘记了我的秘密 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