Armazenar em cache todas as senhas de subchave gpg de uma só vez? Evitar a necessidade de várias entradas de senha de gpg?

10

Posso digitar minha senha do gpg apenas uma vez e desbloquear todas as minhas subchaves (assinatura, descriptografia, autenticação)?

No momento, preciso digitar minha senha do gpg três vezes (para assinar, descriptografar e autenticação). Isso é inconveniente.

Eu tentei criar um script de shell.

#!/bin/bash
set -x
set -e
set +o history

signing_key=77BB3C48
encryption_key=CE998547

tempfile="$(mktemp)"
echo "test" > testfile

unset passphrase || exit 1
read -sp 'Enter password. ' passphrase ; echo

exec 3<<<"$passphrase"

gpg2 --no-tty --use-agent --batch --yes --passphrase-fd 3 --sign-with "$signing_key" --clearsign "$tempfile"
gpg2 --no-tty --use-agent --verify "$tempfile.asc"

gpg2 --no-tty --use-agent --yes --armor --recipient "$encryption_key" --encrypt "$tempfile"

exec 3<<<"$passphrase"
gpg2 --no-tty --use-agent --batch --decrypt --passphrase-fd 3 "$tempfile.asc"

Mas, infelizmente, dessa maneira as senhas gnupg-agent não armazenam em cache a senha. Isso pode ser corrigido?

Informação do sistema:

  • Quando não estou usando esse script de shell, não tenho problemas com o gnupg-agent. Quando assino / decodifico manualmente um arquivo no shell, o pinentry solicita a senha duas vezes e o armazena em cache até a reinicialização.
  • Usando o Debian Wheezy.
  • versão gpg:

dpkg -l | grep gnupg

ii  gnupg                                        1.4.12-7+deb7u3                    i386         GNU privacy guard - a free PGP replacement
ii  gnupg-agent                                  2.0.22-3                           i386         GNU privacy guard - password agent
ii  gnupg-curl                                   1.4.12-7+deb7u3                    i386         GNU privacy guard - a free PGP replacement (cURL)
ii  gnupg2                                       2.0.22-3                           i386         GNU privacy guard - a free PGP replacement (new v2.x)

Eu perguntei na lista de discussão gnupg-users há um tempo atrás, mas não respondi.

Talvez essa resposta funcione? Talvez gpg-connect-agentseja necessário?

adrelanos
fonte
Estou impressionado: exec 3<<<"$passphrase"era novo até para mim ... E joguei uma recompensa de 250 representantes na resposta que você citar.
Hauke ​​Laging

Respostas:

3

Existe o gnome-keyring-daemon e o seahorse, que facilitam muito o gerenciamento de chaves e senhas.

Basicamente, se você estiver executando o gnome-keyring-daemon como um agente gpg, ele poderá desbloquear suas chaves GPG automaticamente. Isso é feito mantendo um chaveiro de senha, que contém as senhas de sites, chaves GPG, chaves SSH, etc. Esse chaveiro de senha é protegido com sua própria senha. Então você a desbloqueia e o chaveiro do gnomo desbloqueia todo o resto.
Como um bônus adicional, o gnome-keyring-daemon possui um chaveiro "login", que se a senha corresponder à sua senha de usuário, o chaveiro será desbloqueado automaticamente quando você efetuar o login.


Configuração

Como fazer isso funcionar? Basta instalar o gnome-keyring-daemon e o cavalo-marinho. O pacote deve fazer toda a configuração do sistema para você. Apenas certifique-se de não iniciar outro daemon de chaveiro ou agente GPG . O que quer que comece por último "ganha", e o chaveiro do gnomo começa na pilha do PAM, muito cedo.

Se suas chaves GPG estiverem armazenadas ~/.gnupg, elas serão coletadas automaticamente e atuarão como o agente GPG para elas. O mesmo vale para as chaves SSH armazenadas em~/.ssh

Na primeira vez em que você tentar usar a chave privada, você verá uma caixa de diálogo com a seguinte aparência: (eu a iniciei por uma linha de comando simples gpg -d myfile.gpg) desbloquear chaveiro
Basta selecionar "Desbloquear automaticamente este chaveiro sempre que estiver conectado"

Agora realmente não falamos sobre cavalos-marinhos. Isso é porque não é estritamente necessário. Tudo isso foi feito apenas com o daemon gnome-chaveiro comum. No entanto, com cavalos-marinhos, você pode visualizar e gerenciar todas as suas chaves e chaveiros. E se você usar autenticação centralizada (LDAP), precisará usá-la quando alterar sua senha de login para também alterar a senha no chaveiro "login" para corresponder a ela.

cavalo-marinho - chaves gpg


Outras senhas

Como mencionado anteriormente, o gnome-keyring-daemon também pode armazenar senhas de sites. A última vez que verifiquei o chrome suporta isso, mas o firefox não. No entanto, há um truque para fazê-lo funcionar.
Por padrão, você terá 2 chaveiros, um chaveiro "login" e um chaveiro "padrão". O chaveiro "padrão" é o padrão (daí o nome). Mas é um chaveiro separado, para que não seja desbloqueado automaticamente. No cavalo-marinho, se você clicar com o botão direito do mouse no chaveiro "login", há uma opção para "definir como padrão". Selecione isso e ele começará a se acostumar com senhas. Pessoalmente, apago o "padrão" e uso "login" para tudo.

Patrick
fonte
Pena que eu não sou um usuário gnomo. Eu fiz sudo apt-get remove gnupg-agente sudo apt-get install gnome-keyring seahorse. Em seguida, criou um arquivo /etc/X11/Xsession.d/999gnomekeyringcom o seguinte conteúdo. eval $(/usr/bin/gnome-keyring-daemon --start --components=gpg,pkcs11,secrets,ssh) export GNOME_KEYRING_CONTROL GNOME_KEYRING_PID GPG_AGENT_INFO SSH_AUTH_SOCK(Caso contrário, o gnome-keyring nem começaria no KDE.) Agora, quando eu executar gpg -d myfile.gpg, ser-me-á pedido a senha e ela será armazenada em cache, mas nunca fui solicitado com esta caixa de diálogo.
22414 adrelanos
(Isso é ruim, porque estou de volta onde comecei. A chave de assinatura será armazenada em cache separadamente.) (Há uma nova linha entre a linha de avaliação e de exportação, que não é possível com a marcação de comentário aqui.)
adrelanos
Também não uso o gnome para o meu gerenciador de desktop. Não é necessário. O Gnome faz muito mais do que apenas o gerenciador de desktop. Você não deve adicionar nada a /etc/X11/Xsession.d. Isso deveria ser feito na pilha do PAM. Você deve ter uma session optional pam_gnome_keyring.so auto_startentrada em um ou mais arquivos em /etc/pam.d. Infelizmente eu não uso o debian, então não sei qual. Se não estiver lá, esse é o problema.
Patrick
Sem adicionar a /etc/X11/Xsession.d, ps aux | grep gnomemostra que o gnome-keyring-daemon não é iniciado. (No entanto, removi-o.) /usr/share/doc/libpam-gnome-keyring/README.DebianDiz If you want to start gnome_keyring from another display manager, you need to add the following lines to the corresponding /etc/pam.d/?dm file: auth optional pam_gnome_keyring.so session optional pam_gnome_keyring.so auto_start(novas linhas removidas por comentários). Fez isso, adicionado a /etc/pam.d/kdm, reiniciou o kdm. Nenhum carregamento do agente, nenhum disponível.
22414 adrelanos
Estou perdida. Se você está usando kdme o coloca /etc/pam.d/kdm, deve ter feito. A única coisa que posso sugerir se você ainda deseja seguir essa rota é vasculhar os logs. Desculpe a esperança falsa, pensei que isso seria uma solução simples para você.
Patrick
0

Eu fiz alguma investigação e o resultado é surpreendente para mim, mas simples:

Quando chamado desta forma gpgnão se comunica com gpg-agent em tudo ! gpgé capaz de realizar todas essas operações por conta própria.

Mas se você gpg-agentnem sabe que algo aconteceu, dificilmente poderá saber uma frase secreta que não conhecia antes.

Hauke ​​Laging
fonte
Parece que eu descobri uma maneira, como isso não pode ser resolvido.
Adrelanos
Minha pergunta original ainda está aberta. (Qual é Can I enter my gpg password just once and unlock all my sub keys (signing, decryption, authentication)?) Espero canalizar a senha gpg-agentou gpg-connect-agenté de alguma forma possível.
Adrelanos