¿Cómo funciona el agente GPG?

31

Tengo una línea en mi archivo gpg.conf que dice use-agent.
Entiendo que esto se refiere a gpg-agent, que es un demonio. La página de manual dice "gpg-agent es un demonio para administrar claves secretas (privadas) independientemente de cualquier protocolo. Se utiliza como backend para gpg y gpgsm, así como para un par de otras utilidades".

¿Alguien puede explicar lo que esto significa en el contexto de gpg? ¿Cuál es el punto de gpg-agent?

Tengo GPG 1.4 en este momento.

  1. ¿Cómo puedo saber si el agente se está ejecutando? De hecho, ni siquiera tengo claro si gpg-agent está instalado con el paquete básico GPG 1.4.
  2. ¿Cómo puedo iniciarlo si no se está ejecutando?
  3. ¿Cómo puedo detenerlo si se está ejecutando?
SauceCode
fuente

Respuestas:

38

Gpg-agent es un programa que se ejecuta en segundo plano (un demonio ) y almacena claves secretas GPG en la memoria. Cuando un proceso GPG necesita la clave, se contacta con el programa gpg-agent en ejecución a través de un socket y solicita la clave. Si el proceso del agente tiene la clave, se la proporciona a gpg. Si no lo hace, intenta cargar la clave cifrada de su llavero y le solicita la frase de contraseña de la clave. Una vez que el agente ha obtenido la clave descifrada, la pasa al proceso gpg. Además de las claves GPG, el agente Gpg puede almacenar claves SSH de manera similar y proporcionarlas a los procesos SSH, como el ssh-agentprograma que viene con SSH.

El punto principal de usar un agente clave es para que no tenga que escribir su frase de contraseña cada vez que use su clave. El agente mantiene la clave en la memoria de una vez a la siguiente. GPG por sí mismo no puede hacer eso porque el proceso termina una vez que ha hecho su trabajo.

Otra cosa que puede hacer un agente clave es permitir que GPG se ejecute en una máquina remota para obtener claves en el agente local (que puede cargarlas desde un archivo local y solicitar su frase de contraseña). Gpg-agent aún no puede hacer esto, es una característica planificada . SSH ha tenido reenvío de agentes durante mucho tiempo. (Esta es una razón para no usar gpg-agent para claves SSH).

GPG 1.xo 2.0.x sabe que el agente se está ejecutando porque la GPG_AGENT_INFOvariable está configurada. Esta variable contiene la ubicación del socket para comunicarse con el agente, así como el ID de proceso del agente. GPG 2.1 siempre coloca el socket del agente ~/.gnupg. GPG 2.x siempre inicia un proceso de agente si no se ejecuta uno.

Puede iniciar el agente simplemente ejecutando gpg-agent. Si desea mantener un proceso de agente como parte de su sesión, puede reemplazar la invocación de su administrador de sesión por gpg-agent my-session-manager; algunas distribuciones configuran esto automáticamente. GPG iniciará automáticamente el agente, y GPG 2.1 también encontrará un agente en ejecución sin necesidad de una variable de entorno, por lo que no necesita iniciarlo de esta manera a menos que use una versión anterior de GPG o use el agente para almacenar otros tipos de claves como SSH.

Puede enviar los comandos del agente con el gpg-connect-agentcomando de shell. Envíe el killcomando para eliminar el proceso del agente (o envíele una señal).

Gpg-agent se envía con GPG. Algunas distribuciones lo empaquetan por separado.

Gilles 'SO- deja de ser malvado'
fuente
66
"Cuando un proceso GPG necesita la clave, se pone en contacto con el programa gpg-agent en ejecución a través de un socket y solicita la clave. Si el proceso del agente tiene la clave, se la proporciona a gpg". Ligeramente engañoso. El agente no proporciona una clave para el proceso del cliente. En su lugar, realiza acciones utilizando la clave, en nombre del proceso del cliente. (El cliente le proporciona al agente algo para firmar, cifrar o descifrar, y el agente lo hace). Al usar un agente, su software de cliente SSH y GPG nunca obtiene acceso a la clave real.
Peter Samuelson
3
"Gpg-agent aún no puede hacer esto, es una característica planificada. SSH ha tenido reenvío de agentes durante mucho tiempo. (Esta es una razón para no usar gpg-agent para claves SSH)". No es del todo cierto. gpg-agent funciona bien con el reenvío de agentes SSH. Lo uso todos los dias. El cliente SSH maneja el reenvío, gpg-agent no está realmente involucrado en eso. Lo que no es compatible es que GPG se comunique con un agente de forma remota.
Peter Samuelson