Назначение 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 (скорее общее руководство по управлению ключами, не совсем то, что вы просите) довольно информативным и простым для подражания:
- https://alexcabal.com/creating-the-perfect-gpg-keypair/
- https://riseup.net/en/security/message-security/openpgp/best-practices (несколько устаревшие, некоторые разделы не работают "из коробки" с последними версиями gpg 2.x)
Есть ли способ использовать 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, затем запустил, как описано выше. Работал хорошо.