gpg 2.2.24, gpg: ошибка расшифровки публичного ключа: Доступ запрещен gpg: расшифровка не удалась: Нет секретного ключа

Вопрос или проблема

недавно обновился до версии gpg 2.2.24
Ошибка:
gpg: расшифровка открытым ключом не удалась: Доступ запрещен
gpg: расшифровка не удалась: Нет секретного ключа
gpg –list-secret-key перечисляет все секретные ключи из /opt/eventapi/.gnupg/pubring.gpg.

Вопрос: Как загрузить фразу-пароль gpg через gpg-agent –allow-preset-passphrase в gpg 2.2.24?
Ранее в gpg 2.0.20 для расшифровки файла с использованием секретного ключа необходимо было вводить фразу-пароль.
Это делается через скрипт, указанный ниже, с использованием gpg-агента preset>

#!/bin/sh
RUNAS_USER=usr
GPG_PASSPHRASE_BIN_PATH=/usr/libexec/gpg-preset-passphrase
[[ "$RUNAS_USER" != "$(id --user --name)" ]] && { echo 'Прерывание, не ожидаемый RUNAS_USER.'; exit 1; }
# будет работать только как usr
killall --user "$RUNAS_USER" gpg-agent 1>/dev/null 2>&1
sleep 2
eval $(gpg-agent --daemon --allow-preset-passphrase --max-cache-ttl 63115200 > ~/.gnupg/.env_vars.txt)
source ~/.gnupg/.env_vars.txt
ps xuf
read -p 'Введите >> PASS  << фразу-пароль GPG :' -s PASS; echo
echo; echo
GPG_PASS="$PASS"
echo "$GPG_PASS" | "$GPG_PASSPHRASE_BIN_PATH" --preset XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # sec
echo "$GPG_PASS" | "$GPG_PASSPHRASE_BIN_PATH" --preset XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX # ssb

# Провести тестовую расшифровку
md5=$(gpg --batch --quiet --decrypt EncryptedTestFile.gpg | md5sum --tag | sed -n -e 's/^.*= //p')

if [ 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' == "$md5" ]
then
  echo "Тестовая расшифровка ОК"
else
  echo "Ошибка при расшифровке тестового файла, попробуйте запустить этот скрипт снова"
fi

Но запуск того же скрипта приводит к следующему результату
gpg: расшифровка открытым ключом не удалась: Доступ запрещен
gpg: расшифровка не удалась: Нет секретного ключа

Даже после ввода пароля вручную через xterm проблема не решается окончательно.

Как сделать gpg-agent preset как указано выше в gpg 2.2.24

Ответ или решение

Решение проблемы с GPG 2.2.24: Ошибка «Permission denied» и «No secret key»

Введение

Переход на новую версию GPG, такую как 2.2.24, может привести к ряду проблем, связанных с изменениями в конфигурации и взаимодействием с ключами. Ошибка, с которой вы столкнулись: gpg: public key decryption failed: Permission denied и gpg: decryption failed: No secret key, указывает на то, что GPG не может получить доступ к секретным ключам или данным для расшифровки файлов. Давайте рассмотрим, как правильно настроить gpg-agent и использовать preset для ввода пароля.

1. Проверка прав доступа

Первым шагом является убедиться, что у вас есть необходимые права на доступ к директории, где размещены секретные ключи. По умолчанию, GPG хранит ключи в ~/.gnupg. Убедитесь, что у вашего пользователя есть права на чтение и запись в эту директорию:

ls -ld ~/.gnupg

Если права некорректные, исправьте их:

chmod 700 ~/.gnupg
chown -R $(whoami):$(whoami) ~/.gnupg

2. Использование gpg-agent

В GPG 2.2.24 произошли изменения, касающиеся работы с gpg-agent. Убедитесь, что gpg-agent запущен и настроен корректно. Вы можете инициализировать gpg-agent с параметрами:

gpg-agent --daemon --allow-preset-passphrase --max-cache-ttl 63115200

Не забудьте, что для использования функции preset нужно, чтобы gpg-agent был правильно установлен и запущен.

3. Настройка передачи паролей в gpg-agent

Убедитесь, что в вашей системе установлен gpg-preset-passphrase, и вызовите его с правильным ключом. Ваша ошибка может быть связана с недопустимым идентификатором ключа. Убедитесь, что вы используете корректный идентификатор секретного ключа.

Ваш скрипт для передачи пароля может быть изменен следующим образом:

#!/bin/sh

RUNAS_USER=usr
GPG_PASSPHRASE_BIN_PATH=/usr/libexec/gpg-preset-passphrase

if [[ "$RUNAS_USER" != "$(id --user --name)" ]]; then 
  echo 'Aborting, not the expected RUNAS_USER.'; 
  exit 1; 
fi

# Остановка gpg-agent
killall --user "$RUNAS_USER" gpg-agent >/dev/null 2>&1
sleep 2

# Запуск gpg-agent
eval $(gpg-agent --daemon --allow-preset-passphrase --max-cache-ttl 63115200 > ~/.gnupg/.env_vars.txt)
source ~/.gnupg/.env_vars.txt

# Ввод пароля
read -p 'Enter GPG passphrase: ' -s PASS; echo
echo

# Предварительное размещение пароля
echo "$PASS" | "$GPG_PASSPHRASE_BIN_PATH" --preset КЛЮЧ_СЕКРЕТА

# Тестирование расшифровки
md5=$(gpg --batch --quiet --decrypt EncryptedTestFile.gpg | md5sum --tag | sed -n -e 's/^.*= //p')

if [ 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx' == "$md5" ]; then
  echo "Decryption test OK"
else
  echo "Error decrypting testfile, try running this script again"
fi

4. Дополнительные проверки

  • Убедитесь, что публичные и секретные ключи корректны и не повреждены.
  • Проверьте конфигурацию файла gpg.conf, особенно в части, касающейся использования gpg-agent.
  • Если всё ещё возникают проблемы, попробуйте удалить и заново импортировать ключи.

Заключение

Проблема с ошибками декодирования после обновления до GPG 2.2.24 может быть решена с помощью корректных прав доступа, проверки настроек gpg-agent и правильной настройки передач паролей через gpg-preset-passphrase. Убедитесь, что все ключи доступны и правильно настроены, что должно позволить вам безболезненно шифровать и расшифровывать информацию. Обратите внимание на изменения в документации GPG при переходе на более новые версии.

Оцените материал
Добавить комментарий

Капча загружается...