web-dev-qa-db-ja.com

GPGエージェントはどのように機能しますか?

Gpg.confファイルにuse-agentという行があります。
これはデーモンであるgpg-agentを指すことを理解しています。マニュアルページには、「gpg-agentは、プロトコルから独立して秘密(プライベート)キーを管理するデーモンです。gpgおよびgpgsmのバックエンドとして、また他のいくつかのユーティリティとして使用されます。」

誰かがこれがgpgのコンテキストで何を意味するのか説明できますか? gpg-agentのポイントは何ですか?

現在、GPG 1.4を使用しています。

  1. エージェントが実行されているかどうかを確認するにはどうすればよいですか? gpg-agentが基本的なGPG 1.4パッケージと共にインストールされているかどうかについては、実際にははっきりしていません。
  2. 実行されていない場合、どうすれば起動できますか?
  3. 実行中の場合、どうすれば停止できますか?
32
SauceCode

Gpg-agentは、バックグラウンド(a daemon )で実行され、メモリにGPG秘密鍵を格納するプログラムです。 GPGプロセスがキーを必要とする場合、GPGプロセスは socket を介して実行中のgpg-agentプログラムに接続し、キーを要求します。エージェントプロセスがキーを持っている場合は、それをgpgに提供します。そうでない場合は、暗号化された鍵を鍵リングからロードしようとし、鍵のパスフレーズの入力を求めます。エージェントは、復号化されたキーを取得すると、それをgpgプロセスに渡します。 GPGキーに加えて、Gpg-agentは同様にSSHキーを格納し、SSHに付属するssh-agentプログラムのように、それらをSSHプロセスに提供できます。

キーエージェントを使用する主な目的は、キーを使用するたびにパスフレーズを入力する必要がないようにすることです。エージェントは、キーをメモリに保持します。 GPG自体はそれを行うことができません。プロセスがジョブを完了するとプロセスが終了するためです。

キーエージェントが実行できるもう1つのことは、リモートマシンで実行されているGPGがローカルエージェントのキーを取得できるようにすることです(ローカルファイルからキーをロードし、パスフレーズを要求することができます)。 Gpg-agentはまだこれを行うことができません。これは 計画された機能 です。 SSHは非常に長い間エージェント転送を行ってきました。 (これがSSHキーにgpg-agentを使用しない理由です。)

GPG 1.xまたは2.0.xは、GPG_AGENT_INFO変数が設定されているため、エージェントが実行中であることを認識しています。この変数には、エージェントと通信するためのソケットの場所と、エージェントのプロセスIDが含まれています。 GPG 2.1は常にエージェントソケットを~/.gnupgに配置します。 GPG 2.xは、エージェントプロセスが実行されていない場合は常に起動します。

gpg-agentを実行するだけでエージェントを起動できます。エージェントプロセスをセッションの一部として保持する場合は、セッションマネージャーの呼び出しをgpg-agent my-session-manager;に置き換えることができます。一部のディストリビューションはこれを自動的にセットアップします。 GPGは自動的にエージェントを開始し、GPG 2.1は環境変数を必要とせずに実行中のエージェントを追加で見つけるため、古いバージョンのGPGを使用するか、エージェントを使用して他のタイプを格納しない限り、この方法でエージェントを開始する必要はありません。 SSHなどのキーの。

エージェント コマンドgpg-connect-agent シェルで送信できますコマンド。 killコマンド を送信して、エージェントプロセスを強制終了します(またはシグナルを送信します)。

Gpg-agentにはGPG自体が付属しています。一部のディストリビューションでは、個別にパッケージ化されています。