Как правильно использовать командную строку gpg для проверки кодовой фразы

Я пытаюсь автоматизировать резервное копирование с помощью duplicity, но когда я тестирую результат, я получаю

gpg: сбой шифрования с открытым ключом: плохая кодовая фраза

Я хочу проверить, является ли ключевая фраза, которую я использую, на самом деле является ключевой фразой, связанной с соответствующим секретным ключом gpg, но я никак не могу видеть в параметрах командной строки gpg: "Не шифруйте и не расшифровывайте что-либо Просто подтвердите, что я использую правильную кодовую фразу".

Это говорит о том, что, может быть, я (еще раз) недоразумение Gnu Privacy Guard. (Он имеет склонность насмехаться, пока я не плачу.)

Имеет ли смысл просить gpg проверять кодовую фразу? Если да, то как?

Ответ 1

В этом нет встроенного метода, но достаточно просто создать тест, который ничего не модифицирует и позволяет просто проверить вашу фразу.

Вы не указали, поэтому предположим, что вы используете версию GnuPG меньше, чем v2, и находитесь в Linux с Bash для вашего интерпретатора командной строки.

Я дам команду здесь и ниже, я объясню, что делает каждая часть (примечание: для серии GnuPG версии 1, см. ниже для серии GnuPG v2)

echo "1234" | gpg --no-use-agent -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"

Что это значит, сначала перенесите какой-либо текст в GnuPG с помощью echo "1234" | - потому что мы действительно не хотим ничего подписывать, это просто тест, поэтому мы подпишем какой-то бесполезный текст.

Затем мы говорим, что gpg не использует ключевой агент с --no-use-agent; это важно позже, потому что, в зависимости от вашего ключевого агента, он не может вернуть "0" на успех, и это все, что мы хотим сделать - проверить успех вашей фразы.

Затем мы сообщаем gpg помещать подписанные данные непосредственно в файл /dev/null, то есть мы отбрасываем его и не записываем результат на терминал. ПРИМЕЧАНИЕ. Если вы не используете какой-либо вариант Linux/Unix, это файл может не существовать. В окнах вам может потребоваться просто разрешить запись подписанных данных на экран, просто опуская часть -o /dev/null.

Затем мы укажем ключ, который хотим выполнить с помощью --local-user 012345. Вы можете использовать KeyID для максимальной специфичности или использовать имя пользователя, в зависимости от того, что наилучшим образом соответствует вашим потребностям.

Далее мы укажем -as, который разрешает режим вывода ascii, и устанавливает контекстный режим для подписания. После этого - просто сообщает GnuPG, чтобы данные были подписаны со стандартного входа, что является самой первой частью команды, которую мы дали echo "1234" |.

И, наконец, у нас есть && echo "A message that indicates success" - "& &" означает, что если предыдущая команда была успешной, напечатайте это сообщение. Это просто добавлено для ясности, потому что успех команды выше в противном случае был бы обозначен отсутствием вывода.

Я надеюсь, что это достаточно ясно для вас, чтобы понять, что происходит, и как вы можете использовать его, чтобы провести тестирование, которое вы хотите сделать. Если какая-либо часть неясна или вы не понимаете, я буду рад прояснить. Удачи!

[EDIT] - Если вы используете GnuPG v2, указанную выше команду нужно немного изменить, например:

echo "1234" | gpg2 --batch --passphrase-fd 1 -o /dev/null --local-user <KEYID> -as - && echo "The correct passphrase was entered for this key"

Причина в том, что GnuPG v2 ожидает, что кодовая фраза будет получена через агента, поэтому мы не можем отключить использование агента с помощью --no-use-agent и иметь желаемый эффект; вместо этого нам нужно сообщить GnuPG v2, что мы хотим запустить "пакетный" процесс и получить кодовую фразу из STDIN (стандартно в) с помощью опции --passphrase-fd 1.

Ответ 2

Более короткая cmdline для проверки правильности парольной фразы

gpg --export-secret-keys -a>/dev/null && echo OK

Ответ 3

Просто установите ключевую фразу вашего закрытого ключа на "" (пустое). Это позволит вам не объявлять аргумент passphrase в командной строке, не получая подсказку фразы.

ваша командная строка для одного файла должна выглядеть просто так:

gpg -d file_to_decrypt.pgp

или для нескольких файлов:

gpg -- batch --decrypt-files *.pgp 

Примечание. Чтобы изменить кодовую фразу, вы можете либо выполнить ее через командную строку, либо с помощью графического интерфейса, например, Kleopatra или GPA (рекомендуется).