암호를 제공하지 않으면 비밀 키를 내보낼 수 없습니다.

암호를 제공하지 않으면 비밀 키를 내보낼 수 없습니다.

내 비밀 GPG 키에 대한 암호를 잊어버렸는데, 이를 내보내서 몇 가지 가능한 키로 무차별 대입 공격을 가할 수 있습니다.

그러나 실행하면 gpg --export-secret-keysgpg에 제공한 옵션에 관계없이 항상 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

관련 정보