¿Caché todas las contraseñas de subclaves gpg a la vez? ¿Prevenir la necesidad de ingresar múltiples contraseñas gpg?

10

¿Puedo ingresar mi contraseña gpg solo una vez y desbloquear todas mis claves secundarias (firma, descifrado, autenticación)?

Por el momento, necesito ingresar mi contraseña gpg tres veces (para firmar, para descifrar, para autenticación). Esto es inconveniente.

Traté de crear un 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"

Pero desafortunadamente, de esa manera las contraseñas gnupg-agent no almacenan en caché la contraseña. ¿Se puede arreglar esto?

Información del sistema:

  • Cuando no uso ese script de shell, no tengo problemas con gnupg-agent. Cuando firmo / descifro manualmente un archivo en shell, pinentry solicita la contraseña dos veces, luego la almacena en caché hasta que se reinicia.
  • Usando Debian Wheezy.
  • versión 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)

He preguntado en la lista de correo de gnupg-users hace un tiempo, pero no hay respuesta.

¿Quizás esta respuesta funcionaría? Tal vez gpg-connect-agentse requiere?

adrelanos
fuente
Estoy impresionado: exec 3<<<"$passphrase"era nuevo incluso para mí ... Y acabo de ofrecer una recompensa de 250 repeticiones por la respuesta que usted cita.
Hauke ​​Laging

Respuestas:

3

Existe el gnome-keyring-daemon y seahorse que hace que la administración de claves y contraseñas sea muy fácil.

Básicamente, si está ejecutando gnome-keyring-daemon como agente gpg, tiene la capacidad de desbloquear sus claves GPG automáticamente. Lo hace manteniendo un llavero de contraseña, que contiene las contraseñas de sitios web, claves GPG, claves SSH, etc. Este llavero de contraseña se asegura con su propia contraseña. Entonces lo desbloqueas, y el llavero de gnomo desbloquea todo lo demás.
Como beneficio adicional, gnome-keyring-daemon tiene un llavero de "inicio de sesión", que si su contraseña coincide con su contraseña de usuario, el llavero se desbloquea automáticamente cuando inicia sesión.


Configuración

¿Cómo hacer que esto funcione? Simplemente instale gnome-keyring-daemon y seahorse. El paquete debe hacer toda la configuración del sistema por usted. Solo asegúrese de no iniciar otro demonio de llavero o agente GPG . Cualquiera que comience el último "gana", y el llavero de gnomo comienza en la pila PAM, muy temprano.

Si sus claves GPG están almacenadas ~/.gnupg, las recogerá automáticamente y actuará como su agente GPG. Lo mismo ocurre con las claves SSH almacenadas en~/.ssh

La primera vez que intente usar la clave privada, obtendrá un cuadro de diálogo similar al siguiente: (Lo activé mediante una línea de comando simple gpg -d myfile.gpg) desbloquear llavero
Simplemente seleccione "Desbloquear este llavero automáticamente cada vez que inicie sesión"

Ahora no hemos hablado realmente sobre el caballito de mar. Eso es porque no es estrictamente necesario. Todo esto se ha hecho solo con el demonio gnomo-llavero regular. Sin embargo, con seahorse puedes ver y administrar todas tus llaves y llaveros. Y si usa la autenticación centralizada (LDAP), deberá usarla cuando cambie su contraseña de inicio de sesión para cambiar también la contraseña en el llavero de "inicio de sesión" para que coincida.

caballito de mar - claves gpg


Otras contraseñas

Como se mencionó anteriormente, gnome-keyring-daemon también puede almacenar contraseñas de sitios web. La última vez que verifiqué Chrome admite esto, pero Firefox no. Sin embargo, hay un truco para que funcione.
Por defecto, tendrá 2 llaveros, un llavero de "inicio de sesión" y un llavero "predeterminado". El llavero "predeterminado" es el predeterminado (de ahí el nombre). Pero es un llavero separado, por lo que no se desbloquea automáticamente. En Seahorse, si hace clic con el botón derecho en el llavero "iniciar sesión", hay una opción para "establecer como predeterminado". Seleccione esto y comenzará a acostumbrarse a las contraseñas. Personalmente, simplemente elimino el "predeterminado" y uso "iniciar sesión" para todo.

Patricio
fuente
Lástima que no soy un usuario gnomo. Lo hice sudo apt-get remove gnupg-agenty sudo apt-get install gnome-keyring seahorse. Luego creó un archivo /etc/X11/Xsession.d/999gnomekeyringcon el siguiente contenido. 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(De lo contrario, el llavero de gnomo ni siquiera comenzaría en KDE.) Ahora, cuando ejecuto gpg -d myfile.gpg, se me pedirá la contraseña y se guardará en caché, pero nunca se me solicitó este diálogo.
adrelanos
(Esto es malo, porque estoy de vuelta donde comencé. La clave de firma se almacenará en caché por separado). (Hay una nueva línea entre la línea de evaluación y la de exportación, que no es posible con el marcado de comentario aquí.)
adrelanos
Tampoco uso gnome para mi administrador de escritorio. No es requerido Gnome hace mucho más que solo su administrador de escritorio. No debería tener que agregarle nada /etc/X11/Xsession.d. Eso se supone que debe hacerse en la pila PAM. Debe tener una session optional pam_gnome_keyring.so auto_startentrada en uno o más archivos /etc/pam.d. Lamentablemente no uso Debian, así que no sé cuál. Si eso no está allí, entonces ese es el problema.
Patrick
Sin agregar a /etc/X11/Xsession.d, ps aux | grep gnomemuestra que gnome-keyring-daemon no comienza. (Sin embargo, lo eliminó) /usr/share/doc/libpam-gnome-keyring/README.Debiandice 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(nuevas líneas eliminadas por los comentarios). Hizo eso, agregado a /etc/pam.d/kdm, reinició kdm. Sin carga de agente, ninguno disponible.
adrelanos
Estoy perdido Si estás usando kdmy lo pones /etc/pam.d/kdm, eso debería haberlo hecho. Lo único que puedo sugerir si aún desea seguir esta ruta es cavar a través de los registros. Perdón por la falsa esperanza, pensé que esta sería una solución simple para ti.
Patrick
0

He investigado un poco y el resultado me sorprende pero es simple:

Cuando se llama de esta manera, ¡ gpgno se comunica con gpg-agent nada ! gpges capaz de realizar todas estas operaciones por sí solo.

Pero si gpg-agentni siquiera sabe que algo ha sucedido, difícilmente puede saber una frase de contraseña que no conocía antes.

Hauke ​​Laging
fuente
Parece que descubrí una forma, cómo esto no se puede resolver.
adrelanos
Mi pregunta original aún está abierta. (Que es Can I enter my gpg password just once and unlock all my sub keys (signing, decryption, authentication)?) Espero ingresar la contraseña gpg-agento de gpg-connect-agentalguna manera es posible.
adrelanos