GnuPG, начиная с версии 2.1, удалил наиболее важные функции закрытого ключа в gpg-agent
, чтобы уменьшить поверхность атаки на самые сокровенные секреты — закрытые ключи.
Такой обратный вызов не только раскрывает кодовую фразу приложению, которое вы пишете (что, вероятно, означает еще большую поверхность атаки, чем GnuPG), но и GnuPG узнает парольную фразу.
Если вам действительно нужно контролировать ввод парольной фразы из вашего приложения, у вас есть несколько вариантов.
Внедрение Pinentry
Тогда информационный поток будет таким: ваше приложение вызывает GnuPG через GPGME, GnuPG запрашивает некоторую операцию с закрытым ключом от gpg-agent
, который снова запрашивает у вашего приложения парольную фразу. Имейте в виду, что это будет работать только в том случае, если вы также запустили gpg-agent
с соответствующей конфигурацией pinentry (возможно, вам придется запустить другой экземпляр, отличный от того, который уже работает в вашей системе).
gpg-preset-passphrase
Самый важный вариант использования прямой передачи парольной фразы — это безголовые демоны, где люди не ждут ввода парольной фразы. GnuPG также предоставляет небольшую утилиту gpg-preset-passphrase
(в Debian и производных она устанавливается как /usr/lib/gnupg2/gpg-preset-passphrase
), которую также можно использовать для предварительного кэширования ключевой фразы (поэтому она не запрашивается в течение заданного времени).
Петля обратной связи
В GnuPG 2.1 была добавлена еще одна опция: в gpg-agent
вы можете разрешить петлю pinentry с помощью опции allow-loopback-pinentry
. Дополнительный параметр pinentry-mode
, установленный на loopback
в GnuPG/GPGME, должен позволить вам обрабатывать взаимодействие с парольной фразой, снова используя passphrase_cb
.
Но: учтите, что это раскрывает парольную фразу не только для вашего приложения, но и для GnuPG, и может оказаться (возможно, незначительной, но существующей и, возможно, ненужной) угрозой безопасности. Кроме того, GnuPG 2.1 еще не получил широкого распространения, что может стать проблемой, если вы не контролируете среду.
person
Jens Erat
schedule
28.01.2016