web-dev-qa-db-ja.com

GUIの存在に応じたGnuPGピンエントリ

MacOSXでは、gnupg21に署名するためにgit commitを使用しています。現在作業しているプロジェクトによっては、IDE(ここではIntellijIDEA)を使用してgitと対話し、いつかはterminalで直接操作しています。

セットアップしなければなりませんでした

pinentry-program /usr/local/bin/pinentry-mac

IntellijIDEAでの作業を継続できるようにします。

ただし、terminalを使用しているときにGUIをプロンプトするのはあまり好きではありません。状況に関してpinentryプログラムを選択するようにgnupg21を構成することは可能だと思いますか?

  • GUIの場合-> /usr/local/bin/pinentry-mac
  • ターミナル上-> /usr/local/bin/pinentry

編集:私の現在の設定ファイル

gpg-agent.conf

enable-ssh-support
default-cache-ttl 14400
max-cache-ttl 86400
log-file /var/log/gpg-agent.log
pinentry-program /usr/local/bin/pinentry-mac

gpg.conf

keyserver hkp://keys.gnupg.net
no-tty
use-agent
3
Kakawait

複数のgpg-agentsを実行している

GnuPGのgpg-agentは、GnuPG2.1より前の異なるソケットを使用するように構成できました。異なる構成(pinentry実装)と並行して実行される異なるgpg-agentを使用することもできます。

GnuPG 2.1では、これはもう不可能です。 2.1以降のGnuPGは、常に固定ソケットパスを使用します。

ピンエントリースイッチング

このような機能を有効にする唯一のクリーンな可能性は、おそらくピンエントリ「スイッチ」実装を記述し、コマンドラインまたはGUIのどちらから呼び出されたかに応じて(たとえば、DISPLAYまたはtty変数が設定されます)。

ループバックピンエントリーモード

別の方法は、セキュリティ上の理由からデフォルトでgpg-agentで無効になっているループバックピンエントリ機能を使用することです。ピンエントリループバックには、帯域外のピンエントリパスワードクエリの代わりに、パスフレーズに対してgpg-agentクエリgpgがあります。かなり大きくて複雑なGnuPGアプリケーション(脆弱性の可能性が高い)がパスフレーズにアクセスし、秘密鍵にアクセスするため、セキュリティの問題が発生する可能性があります。秘密鍵は、gpg-agentとpinentryの実装に限定されます。

とにかくそうするために、allow-loopback-pinentry~/.gnupg/gpg-agent.confに行killall gpg-agentを追加します(したがって、GnuPGが次にそれを使用したいときにオプションを有効にして再起動します)。 GUIピンエントリを使用する場合は、通常どおりGnuPGを起動します。コマンドライン操作の場合は、代わりにgpg21 --pinentry-mode loopbackを呼び出します(もちろん、これはgpg21のエイリアスである可能性があります)。

3
Jens Erat

回答が遅れて申し訳ありませんが、同じ質問があり、pinentry-program構成を変更して毎回gpg-agentを再起動するよりもクリーンに見える解決策を見つけました。

ソース以外の場所では文書化されていませんが、pinentry-mac環境変数がPINENTRY_USER_DATAに設定されている場合、USE_CURSES=1はcursesCLIピン入力メソッドにフォールバックします。 gpg-agent.confとslapのデフォルトとしてpinentry-macを残すことができます:

export PINENTRY_USER_DATA="USE_CURSES=1"

bashプロファイルまたは同等のもの。

6
Ryan Jenkins