在不提供密碼的情況下無法匯出金鑰

在不提供密碼的情況下無法匯出金鑰

我忘記了 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,我們可以在不解鎖的情況下找到 keygrips。

暴力破解密鑰:

# 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

相關內容