Назначение gpg-agent в gpg2

Я использую gpg для шифрования на некоторое время. Кто-то предложил мне использовать gpg2 вместо. Когда я пошел использовать gpg2Я почти ничего не мог сделать; было бы жаловаться, что требуется доступ к закрытым ключам, но я не мог заставить его использовать закрытые ключи без gpg-agent Бег.

Оказывается, я намеренно отключен gpg-agent (используя chmod -x /usr/bin/gpg-agent); это вызвало gpg2 иметь очень ограниченную функциональность и пожаловаться на stderr.

Причины, по которым я отключен gpg-agent следил за цепочкой событий.

Сначала я подключил SSH к удаленной машине, а "агент" открыл всплывающее окно с просьбой разблокировать ключи SSH. Мне это не понравилось, потому что:

  • Всплывающее окно на моем экране прерывает мой рабочий процесс
  • Всплывающее окно на моем экране вряд ли будет замечено, поэтому вместо этого может показаться, что соединение останавливается, а не запрашивает разблокировку ключа шифрования.
  • Агент появился, чтобы кэшировать мой пароль, когда я абсолютно не хочу, чтобы мой пароль кэшировался (очень похоже на sudoраздражает использование кеширования паролей, я могу отключить это в своей конфигурации); Я всегда буду хотеть вводить парольную фразу для моих ключей шифрования каждый раз, когда они используются для любой программы, которая их использует.
  • Оказалось, что всплывающее окно принадлежит отдельному процессу, а я хочу, чтобы конкретный процесс использовал ключ для запроса ключевой фразы (даже если это библиотека, которая выполняет фактические запросы); так как я провожу большую часть своей деятельности с использованием инструментов командной строки, это означает, что приложение с графическим интерфейсом не идеально, потому что не все, что я делаю, будут иметь доступ к X11
  • Автоматический запуск отдельного процесса в фоновом режиме удаляет понятие "одна команда, один процесс", особенно если этот фоновый процесс задерживается после выхода из исходной команды

Он оказался ключевым агентом GNOME, и я не мог удалить агент, не удалив GNOME. Так что я просто отключил его chmod -x /usr/bin/gnome-keyring*, Затем я обнаружил, что SSH откатится к другому агенту, поэтому я тоже отключил его, используя тот же метод chmod -x /usr/bin/ssh-agent*

Когда я начал использовать gpgЯ обнаружил, что у него был похожий агент, тот самый, о котором я спрашиваю. Я немедленно отключил его по тем же причинам; Я хочу, чтобы программное обеспечение всегда запрашивало у меня парольные фразы для использования закрытого ключа. Я не хочу, чтобы парольная фраза кэшировалась по какой-либо причине.

Так с gpg2 кажется требовать gpg-agent, Я бы хотел спросить:

  • Я слишком параноидален в отношении использования парольной фразы? Мне было бы любопытно увидеть или указать на обсуждение этого.
  • Существует ли передовая практика, позволяющая избежать даже случайного включения кэшированной парольной фразы?
  • Есть ли способ использовать gpg2 без gpg-agent когда-нибудь бегал?
  • Учитывая, что агенты - это демоны, которые, как ожидается, смогут отвечать на запросы, что мешает другому пользователю или службе, работающим на локальном компьютере, получить доступ к моим кэшированным или сохраненным учетным данным?

2 ответа

Я слишком параноидален в отношении использования парольной фразы? Мне было бы любопытно увидеть или указать на обсуждение этого.

Ваши опасения, безусловно, действительны ИМО. Хорошая новость заключается в том, что есть способы настроить поведение gpg-agent в соответствии с вашими потребностями. Например, используйте приглашение парольной фразы на основе терминала (ввод PIN-кода) вместо приглашения с графическим интерфейсом и не кэшируйте парольные фразы.

Существует ли передовая практика, позволяющая избежать даже случайного включения кэшированной парольной фразы?

Быстрое решение, которое, вероятно, не является лучшей практикой, заключается в настройке вашего ~/.gnupg/gpg-agent.conf с помощью следующих параметров:

# Expire cached PINs (passphrases) after zero seconds
default-cache-ttl 0
max-cache-ttl 0

# If you use your GPG keys for SSH auth...
default-cache-ttl-ssh 0
max-cache-ttl-ssh 0
enable-ssh-support

# Use TTY-based PIN entry program (I see pinentry, 
# pinentry-curses, pinentry-gnome3, pinentry-tty and 
# pinentry-x11 on my system)
pinentry-program /usr/bin/pinentry-tty

Я нашел следующие руководства по ключевым рекомендациям GPG (скорее общее руководство по управлению ключами, не совсем то, что вы просите) довольно информативным и простым для подражания:

Есть ли способ использовать gpg2 без запуска gpg-agent?

Насколько мне известно, не с gpg 2.x. Страница руководства гласит следующее:

   --use-agent
   --no-use-agent
          This is dummy option. gpg always requires the agent.

У меня gpg 2.1.15.

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

Хороший вопрос... По умолчанию, gpg-agent использует сокет, так что технически любой процесс, выполняемый, как ваш пользователь, теоретически может взломать ваши ключи. Не цитируйте меня по этому поводу. Вот краткий обзор того, как работает gpg-agent, который, надеюсь, поможет вам найти реальный ответ: https://unix.stackexchange.com/questions/188668/how-does-gpg-agent-work

Согласно https://wiki.archlinux.org/index.php/GnuPG для того, чтобы предоставить пароль непосредственно gpg - без запуска gpg-agent - вам нужно запустить со следующими параметрами:

gpg --passphrase-fd 0 --pinentry-mode loopback ...

Вам нужно ввести пароль в консоли сразу после запуска этой команды. При вводе пароля пароль не будет виден, но вы увидите введенный пароль.

Чтобы скрыть пароль при наборе, вы можете ввести команду в stty:

stty -echo ; gpg ... ; stty echo

Я проверил это с помощью GnuPG v. 2.2.4: убил gpg-agent, уничтожил /usr/bin/gpg-agent, затем запустил, как описано выше. Работал хорошо.

Другие вопросы по тегам