Comment fonctionne l'agent GPG?

31

J'ai une ligne dans mon fichier gpg.conf qui dit use-agent.
Je comprends que cela fait référence à gpg-agent qui est un démon. La page de manuel indique que "gpg-agent est un démon pour gérer les clés secrètes (privées) indépendamment de tout protocole. Il est utilisé comme backend pour gpg et gpgsm ainsi que pour quelques autres utilitaires."

Quelqu'un peut-il expliquer ce que cela signifie dans le contexte de gpg? Quel est l'intérêt de gpg-agent?

J'ai actuellement GPG 1.4.

  1. Comment savoir si l'agent est en cours d'exécution? En fait, je ne sais même pas si gpg-agent est installé avec le package de base GPG 1.4.
  2. Comment puis-je le démarrer s'il ne fonctionne pas?
  3. Comment puis-je l'arrêter s'il est en cours d'exécution?
SauceCode
la source

Réponses:

38

Gpg-agent est un programme qui s'exécute en arrière-plan (un démon ) et stocke les clés secrètes GPG en mémoire. Lorsqu'un processus GPG a besoin de la clé, il contacte le programme gpg-agent en cours d'exécution via un socket et demande la clé. Si le processus d'agent possède la clé, il la fournit à gpg. Si ce n'est pas le cas, il tente de charger la clé chiffrée à partir de votre trousseau de clés et vous invite à saisir le mot de passe de la clé. Une fois que l'agent a obtenu la clé déchiffrée, il la transmet au processus gpg. En plus des clés GPG, Gpg-agent peut également stocker des clés SSH et les fournir aux processus SSH, comme le ssh-agentprogramme fourni avec SSH.

Le point principal de l'utilisation d'un agent clé est de ne pas avoir à taper votre phrase secrète à chaque fois que vous utilisez votre clé. L'agent garde la clé en mémoire d'une heure à l'autre. GPG lui-même ne peut pas faire cela car le processus se termine une fois qu'il a fait son travail.

Un autre agent clé peut permettre à GPG s'exécutant sur une machine distante d'obtenir des clés dans l'agent local (ce qui peut les charger à partir d'un fichier local et vous demander votre phrase secrète). Gpg-agent ne peut pas encore le faire, c'est une fonctionnalité prévue . SSH a le transfert d'agent depuis très longtemps. (C'est une raison pour ne pas utiliser gpg-agent pour les clés SSH.)

GPG 1.x ou 2.0.x sait que l'agent est en cours d'exécution car la GPG_AGENT_INFOvariable est définie. Cette variable contient l'emplacement du socket pour communiquer avec l'agent ainsi que l'ID de processus de l'agent. GPG 2.1 place toujours le socket d'agent ~/.gnupg. GPG 2.x démarre toujours un processus d'agent s'il n'est pas en cours d'exécution.

Vous pouvez démarrer l'agent simplement en exécutant gpg-agent. Si vous souhaitez conserver un processus d'agent dans le cadre de votre session, vous pouvez remplacer l'appel de votre gestionnaire de sessions par gpg-agent my-session-manager; certaines distributions configurent cela automatiquement. GPG démarrera automatiquement l'agent, et GPG 2.1 trouvera en outre un agent en cours d'exécution sans avoir besoin d'une variable d'environnement, vous n'avez donc pas besoin de le démarrer de cette façon à moins d'utiliser une ancienne version de GPG ou d'utiliser l'agent pour stocker d'autres types de clés telles que SSH.

Vous pouvez envoyer les commandes d' agent avec la gpg-connect-agentcommande shell. Envoyez la killcommande pour tuer le processus d'agent (ou envoyez-lui un signal).

Gpg-agent est livré avec GPG lui-même. Certaines distributions le conditionnent séparément.

Gilles, arrête de faire le mal
la source
6
"Lorsqu'un processus GPG a besoin de la clé, il contacte le programme gpg-agent en cours d'exécution via un socket et demande la clé. Si le processus agent possède la clé, il la fournit à gpg." Légèrement trompeur. L'agent ne fournit pas de clé pour le processus client. Au lieu de cela, il exécute des actions à l'aide de la clé, au nom du processus client. (Le client fournit à l'agent quelque chose à signer, chiffrer ou déchiffrer, et l'agent le fait.) Lorsque vous utilisez un agent, votre logiciel client SSH et GPG n'a jamais accès à la clé réelle.
Peter Samuelson
3
"Gpg-agent ne peut pas encore faire cela, c'est une fonctionnalité prévue. SSH a eu le transfert d'agent depuis très longtemps. (C'est une raison pour ne pas utiliser gpg-agent pour les clés SSH.)" Pas tout à fait vrai. gpg-agent fonctionne très bien avec le transfert d'agent SSH. Je l'utilise tous les jours. Le client SSH gère le transfert, gpg-agent n'y est pas vraiment impliqué. Ce qui n'est pas pris en charge, c'est que GPG lui-même parle à distance à un agent.
Peter Samuelson