Como o agente GPG funciona?

31

Eu tenho uma linha no meu arquivo gpg.conf que diz use-agent.
Eu entendo que isso se refere ao gpg-agent, que é um daemon. A página do manual declara "gpg-agent é um daemon para gerenciar chaves secretas (privadas) independentemente de qualquer protocolo. É usado como back-end para gpg e gpgsm, bem como para alguns outros utilitários".

Alguém pode explicar o que isso significa no contexto de gpg? Qual é o objetivo do gpg-agent?

Atualmente tenho o GPG 1.4.

  1. Como posso saber se o agente está em execução? Na verdade, nem sei ao certo se o gpg-agent está instalado com o pacote básico do GPG 1.4.
  2. Como posso iniciá-lo, se não estiver em execução?
  3. Como posso pará-lo, se estiver em execução?
SauceCode
fonte

Respostas:

38

Gpg-agent é um programa que é executado em segundo plano (um daemon ) e armazena chaves secretas do GPG na memória. Quando um processo GPG precisa da chave, ele entra em contato com o programa gpg-agent em execução através de um soquete e solicita a chave. Se o processo do agente tiver a chave, ela será fornecida ao gpg. Caso contrário, ele tenta carregar a chave criptografada do seu chaveiro e solicita a senha da chave. Depois que o agente obtém a chave descriptografada, ela a passa para o processo gpg. Além das chaves GPG, o Gpg-agent também pode armazenar chaves SSH e fornecê-las aos processos SSH, como o ssh-agentprograma que acompanha o SSH.

O ponto principal do uso de um agente de chave é para que você não precise digitar sua senha sempre que usar sua chave. O agente mantém a chave na memória de uma vez para a outra. O próprio GPG não pode fazer isso porque o processo termina assim que o trabalho é concluído.

Outra coisa que um agente de chave pode fazer é permitir que o GPG em execução em uma máquina remota obtenha chaves no agente local (que pode carregá-las em um arquivo local e solicitar sua senha). O agente Gpg ainda não pode fazer isso, é um recurso planejado . O SSH tem encaminhamento de agente há muito tempo. (Esse é um motivo para não usar o gpg-agent para chaves SSH.)

O GPG 1.x ou 2.0.x sabe que o agente está em execução porque a GPG_AGENT_INFOvariável está definida. Essa variável contém o local do soquete para se comunicar com o agente, bem como o ID do processo do agente. O GPG 2.1 sempre coloca o soquete do agente ~/.gnupg. O GPG 2.x sempre inicia um processo do agente se não estiver em execução.

Você pode iniciar o agente simplesmente executando gpg-agent. Se você deseja manter um processo do agente como parte da sua sessão, pode substituir a chamada do seu gerenciador de sessões por gpg-agent my-session-manager; algumas distribuições configuram isso automaticamente. O GPG iniciará o agente automaticamente e o GPG 2.1 encontrará um agente em execução sem precisar de uma variável de ambiente, portanto, não é necessário iniciá-lo dessa maneira, a menos que você use uma versão mais antiga do GPG ou use o agente para armazenar outros tipos de chaves como SSH.

Você pode enviar os comandos do agente com o gpg-connect-agentcomando shell. Envie o killcomando para interromper o processo do agente (ou envie um sinal).

O agente Gpg é enviado com o próprio GPG. Algumas distribuições o empacotam separadamente.

Gilles 'SO- parar de ser mau'
fonte
6
"Quando um processo GPG precisa da chave, ele entra em contato com o programa gpg-agent em execução através de um soquete e solicita a chave. Se o processo do agente tiver a chave, ele fornecerá a gpg". Um pouco enganador. O agente não fornece uma chave para o processo do cliente. Em vez disso, ele executa ações usando a chave, em nome do processo do cliente. (O cliente fornece ao agente algo para assinar, criptografar ou descriptografar, e o agente o faz.) Ao usar um agente, seu software cliente SSH e GPG nunca obtém acesso à chave real.
Peter Samuelson
3
"O Gpg-agent ainda não pode fazer isso, é um recurso planejado. O SSH tem encaminhamento de agente há muito tempo. (Esse é um motivo para não usar o gpg-agent para chaves SSH.)" Não é bem verdade. O gpg-agent funciona bem com o encaminhamento de agentes SSH. Eu uso todos os dias. O cliente SSH lida com o encaminhamento, o gpg-agent não está realmente envolvido nisso. O que não é suportado é que o próprio GPG fale com um agente remotamente.
Peter Samuelson