¿Cuáles son los pasos necesarios para almacenar en caché las frases de contraseña ingresadas a través de pinentry usando gpg-preset-passphrase en 2.1.15?

8

Estoy buscando almacenar en caché las frases de contraseña para usarlas en una máquina desatendida. Como hacer esto plantea algún riesgo, preferiría elegir qué frases de contraseña se almacenan en caché y evitar establecer ambas default-cache-ttly max-cache-ttlvalores desagradablemente altos, así como evitar tener que borrar gpg-agenttodo el caché periódicamente, por lo tanto, estoy buscando una solución gpg-preset-passphrase. Parte de la información que encontré al solucionar problemas se refiere a versiones anteriores de GnuPG, por lo que no estoy seguro de haber explicado suficientemente todas las diferencias.

Primero, según lo prescrito man 1 gpg-agent, tengo export GPG_TTY=$(tty)en mi .bashrc.

Ahora suponga que corro eval $(gpg-agent --daemon --allow-preset-passphrase --default-cache-ttl 1 --max-cache-ttl 31536000)para iniciar gpg-agent, notando que gpg-preset-passphrase todavía cumple con --max-cache-ttl (predeterminado 2 horas).

Luego obtengo el keygrip $KEYGRIPde la subclave secreta deseada con gpg --with-keygrip -K.

Con eso lo intento /path/to/gpg-preset-passphrase -c $KEYGRIP. Al presionar regresar, esto imprime:

   gpg-preset-passphrase: caching passphrase failed: Not implemented

Intentar de nuevo la adición --verbose --debug 6 --log-file /path/to/gpg-agent.loga gpg-agent, mi registro se anexa con

   gpg-agent[4206] listening on socket /run/user/1000/gnupg/S.gpg-agent
   gpg-agent[4207] gpg-agent (GnuPG) 2.1.15 started
   gpg-agent[4207] handler 0x7f86ef783700 for fd 5 started
   gpg-agent[4207] command PRESET_PASSPHRASE failed: Not implemented
   gpg-agent[4207] handler 0x7f86ef783700 for fd 5 terminated

No estoy seguro de dónde proceder, aparte de profundizar en la fuente, por lo que me pregunto si alguien puede corregir primero los pasos que estoy tomando.

usuario5255922
fuente
¿Alguna vez resolviste esto?
AlMehdi
Estoy marginalmente seguro de que la frase de contraseña debe enviarse a stdin gpg-preset-passphrase, mi primer plomo concreto sobre eso es de esta lista de correo lists.gnupg.org/pipermail/gnupg-users/2010-January/037876.html
ThorSummoner
¿Cómo enviarlo desde stdin, en lugar de echo? esto no suena seguro en absoluto
holms

Respuestas:

0

Parece que desea enviar la frase de contraseña a gpg-preset-passphrasemás de stdin, sin hacer eco (para evitar exponerla en la lista de procesos):

/path/to/gpg-preset-passphrase -c $KEYGRIP <<< $PASSPHRASE

Si te importa la portabilidad fuera de bash:

/path/to/gpg-preset-passphrase -c $KEYGRIP <<EOF
$PASSPHRASE
EOF

Esta respuesta sobre la sintaxis "Here Documents" (EOF) fue invaluable para mí: https://unix.stackexchange.com/a/88492

También necesita allow-preset-passphraseen su ~/.gnupg/gpg-agent.confcomo lo menciona holms.

Si está buscando hacer esto con cifrado simétrico (dado que ya perdí la cordura por esto, tal vez no tenga que hacerlo), vea mi respuesta aquí para encontrar el keygrip / cacheid correcto para preestablecer la frase de contraseña en gpg- agente: https://superuser.com/a/1485486/1093343

evnp
fuente