Wie funktioniert der GPG Agent?

31

Ich habe eine Zeile in meiner gpg.conf-Datei, in der steht use-agent.
Soweit ich weiß, bezieht sich dies auf gpg-agent, einen Daemon. In der Manpage heißt es: "gpg-agent ist ein Daemon, der geheime (private) Schlüssel unabhängig von einem Protokoll verwaltet. Er wird als Backend für gpg und gpgsm sowie für einige andere Dienstprogramme verwendet."

Kann jemand erklären, was dies im Kontext von gpg bedeutet? Was ist der Sinn von gpg-agent?

Ich habe derzeit GPG 1.4.

  1. Wie kann ich feststellen, ob der Agent ausgeführt wird? Mir ist eigentlich gar nicht klar, ob gpg-agent mit dem GPG 1.4-Basispaket installiert ist.
  2. Wie kann ich es starten, wenn es nicht läuft?
  3. Wie kann ich es stoppen, wenn es läuft?
SauceCode
quelle

Antworten:

38

Gpg-Agent ist ein Programm, das im Hintergrund ausgeführt wird (ein Daemon ) und geheime GPG-Schlüssel im Speicher ablegt . Wenn ein GPG-Prozess den Schlüssel benötigt, kontaktiert er das laufende Programm gpg-agent über einen Socket und fordert den Schlüssel an. Wenn der Agent-Prozess den Schlüssel hat, stellt er ihn gpg zur Verfügung. Wenn dies nicht der Fall ist, wird versucht, den verschlüsselten Schlüssel von Ihrem Schlüsselbund zu laden, und Sie werden aufgefordert, die Passphrase des Schlüssels einzugeben. Sobald der Agent den entschlüsselten Schlüssel erhalten hat, übergibt er ihn an den gpg-Prozess. Zusätzlich zu GPG-Schlüsseln kann der Gpg-Agent auch SSH-Schlüssel speichern und sie für SSH-Prozesse bereitstellen, wie das ssh-agentmit SSH gelieferte Programm.

Der Hauptgrund für die Verwendung eines Schlüsselagenten besteht darin, dass Sie Ihre Passphrase nicht jedes Mal eingeben müssen, wenn Sie Ihren Schlüssel verwenden. Der Agent speichert den Schlüssel von einem Zeitpunkt zum nächsten. GPG selbst kann das nicht, da der Prozess beendet wird, sobald er seine Arbeit erledigt hat.

Ein anderer Vorgang, den ein Schlüsselagent ausführen kann, besteht darin, dass GPG auf einem Remotecomputer Schlüssel im lokalen Agenten abruft (wodurch diese möglicherweise aus einer lokalen Datei geladen werden und zur Eingabe Ihrer Passphrase aufgefordert werden). Gpg-Agent kann dies noch nicht, es ist eine geplante Funktion . SSH hat lange Zeit eine Agentenweiterleitung. (Dies ist ein Grund, gpg-agent nicht für SSH-Schlüssel zu verwenden.)

GPG 1.x oder 2.0.x weiß, dass der Agent ausgeführt wird, weil die GPG_AGENT_INFOVariable festgelegt ist. Diese Variable enthält den Speicherort des Sockets für die Kommunikation mit dem Agenten sowie die Prozess-ID des Agenten. GPG 2.1 setzt immer den Agentensocket ein ~/.gnupg. GPG 2.x startet immer einen Agentenprozess, wenn einer nicht ausgeführt wird.

Sie können den Agenten einfach durch Ausführen starten gpg-agent. Wenn Sie einen Agenten - Prozess als Teil der Sitzung halten möchten, können Sie den Aufruf der Session - Manager ersetzen durch gpg-agent my-session-manager; Einige Distributionen richten dies automatisch ein. GPG startet den Agenten automatisch und GPG 2.1 findet zusätzlich einen aktiven Agenten, ohne dass eine Umgebungsvariable erforderlich ist. Sie müssen ihn also nicht auf diese Weise starten, es sei denn, Sie verwenden eine ältere Version von GPG oder verwenden den Agenten zum Speichern anderer Typen von Schlüsseln wie SSH.

Sie können die Agenten senden Befehle mit dem gpg-connect-agentShell - Befehl. Senden Sie den killBefehl , um den Agentenprozess abzubrechen (oder senden Sie ihm ein Signal).

Gpg-Agent wird mit GPG selbst ausgeliefert. Einige Distributionen packen es separat.

Gilles 'SO - hör auf böse zu sein'
quelle
6
"Wenn ein GPG-Prozess den Schlüssel benötigt, kontaktiert er das laufende gpg-agent-Programm über einen Socket und fordert den Schlüssel an. Wenn der Agent-Prozess den Schlüssel hat, stellt er ihn gpg zur Verfügung." Etwas irreführend. Der Agent stellt dem Client-Prozess keinen Schlüssel zur Verfügung. Stattdessen werden Aktionen mithilfe des Schlüssels im Auftrag des Clientprozesses ausgeführt. (Der Client stellt dem Agenten etwas zum Signieren, Verschlüsseln oder Entschlüsseln bereit, und der Agent tut dies.) Wenn Sie einen Agenten verwenden, erhält Ihre SSH- und GPG-Client-Software niemals Zugriff auf den eigentlichen Schlüssel.
Peter Samuelson
3
"Gpg-Agent kann dies noch nicht, es ist eine geplante Funktion. SSH hat die Weiterleitung von Agenten für eine sehr lange Zeit. (Dies ist ein Grund, gpg-Agent nicht für SSH-Schlüssel zu verwenden.)" Nicht ganz richtig. gpg-agent funktioniert gut mit der Weiterleitung von SSH-Agenten. Ich benutze es jeden Tag. Der SSH-Client übernimmt die Weiterleitung, der gpg-Agent ist daran nicht wirklich beteiligt. Was nicht unterstützt wird, ist, dass GPG selbst remote mit einem Agenten spricht.
Peter Samuelson