Quelles sont les étapes nécessaires pour mettre en cache les mots de passe entrés via pinentry en utilisant gpg-preset-passphrase dans 2.1.15?

8

Je cherche à mettre en cache les mots de passe pour une utilisation sur une machine sans surveillance. Comme cela pose un certain risque, je préférerais choisir les phrases secrètes à mettre en cache et éviter de définir les deux default-cache-ttlet max-cache-ttldes valeurs odieusement élevées ainsi que d'éviter d'avoir à effacer gpg-agentle cache entier de façon périodique - c'est pourquoi je cherche une solution avec gpg-preset-passphrase. Certaines des informations que j'ai trouvées lors du dépannage se réfèrent à des versions plus anciennes de GnuPG, donc je ne sais pas si j'ai suffisamment pris en compte toutes les différences.

Tout d'abord, comme prescrit par man 1 gpg-agent, j'ai export GPG_TTY=$(tty)dans mon .bashrc.

Supposons maintenant que je cours eval $(gpg-agent --daemon --allow-preset-passphrase --default-cache-ttl 1 --max-cache-ttl 31536000)pour démarrer gpg-agent, notant que gpg-preset-passphrase honore toujours --max-cache-ttl (par défaut 2 heures).

J'obtiens ensuite le clavier $KEYGRIPde la sous-clé secrète souhaitée avec gpg --with-keygrip -K.

Avec ça j'essaye /path/to/gpg-preset-passphrase -c $KEYGRIP. Au retour, ceci imprime:

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

Tentant à nouveau d'ajouter --verbose --debug 6 --log-file /path/to/gpg-agent.logà gpg-agent, mon journal est accompagné de

   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

Je ne sais pas où procéder en dehors de plonger plus profondément dans la source, alors je me demande si quelqu'un peut d'abord corriger les étapes que je prends.

user5255922
la source
Avez-vous déjà résolu cela?
AlMehdi
Je suis légèrement sûr que la phrase secrète doit être envoyée à stdin de gpg-preset-passphrase, ma première piste concrète à partir de cette liste de diffusion lists.gnupg.org/pipermail/gnupg-users/2010-January/037876.html
ThorSummoner
comment l'envoyer depuis stdin, au lieu de l'écho? cela ne semble pas du tout sécurisé
holms

Réponses:

0

Il semble que vous souhaitiez envoyer la phrase secrète gpg-preset-passphrasesur stdin, sans l' écho (pour éviter de l'exposer dans la liste des processus):

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

Si vous vous souciez de la portabilité en dehors de bash:

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

Cette réponse sur la syntaxe "Here Documents" (EOF) a été inestimable pour moi: https://unix.stackexchange.com/a/88492

Vous avez également besoin allow-preset-passphrasede votre ~/.gnupg/gpg-agent.confcomme mentionné par Holms.

Si vous cherchez à le faire avec un cryptage symétrique (puisque j'ai déjà perdu ma raison à ce sujet, vous n'aurez peut-être pas à le faire), voyez ma réponse ici pour trouver le bon keygrip / cacheid à utiliser pour prérégler la phrase de passe dans gpg- agent: https://superuser.com/a/1485486/1093343

evnp
la source