Quais são as etapas necessárias para armazenar em cache as frases secretas inseridas por meio de pinentry usando gpg-preset-passphrase na versão 2.1.15?

8

Estou procurando armazenar em cache senhas para uso em uma máquina autônoma. Como isso representa algum risco, eu prefiro escolher quais senhas são armazenadas em cache e evitar definir valores altos default-cache-ttle max-cache-ttldesagradáveis, além de evitar a necessidade de limpar gpg-agenttodo o cache periodicamente - por isso estou procurando uma solução gpg-preset-passphrase. Algumas das informações que encontrei durante a solução de problemas referem-se a versões mais antigas do GnuPG, portanto, não tenho certeza se expliquei suficientemente todas as diferenças.

Primeiro, como prescrito por man 1 gpg-agent, eu tenho export GPG_TTY=$(tty)no meu .bashrc.

Agora, suponha que eu corra eval $(gpg-agent --daemon --allow-preset-passphrase --default-cache-ttl 1 --max-cache-ttl 31536000)para iniciar o gpg-agent, observando que a gpg-preset-passphrase ainda honra --max-cache-ttl (padrão 2 horas).

Em seguida, recebo o aperto $KEYGRIPde tecla da subchave secreta desejada com gpg --with-keygrip -K.

Com isso eu tento /path/to/gpg-preset-passphrase -c $KEYGRIP. Ao retornar, isso imprime:

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

Tentando novamente acrescentando --verbose --debug 6 --log-file /path/to/gpg-agent.logque gpg-agent, meu log é anexado com

   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

Não tenho certeza de onde proceder disso além de mergulhar mais fundo na fonte, por isso estou me perguntando se alguém pode primeiro corrigir os passos que estou tomando.

user5255922
fonte
Você já resolveu isso?
AlMehdi 27/02
Estou marginalmente certo de que a senha deve ser enviada para stdin of gpg-preset-passphrase, minha primeira pista concreta é a partir desta lista de discussão.gnupg.org/ pipermail
gnupg-
como enviá-lo de stdin, em vez de eco? isso não parece nada seguro
holms 26/03

Respostas:

0

Parece que você deseja enviar a senha para gpg-preset-passphraseover stdin, sem repeti-la (para evitar a exposição na lista de processos):

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

Se você se preocupa com a portabilidade fora do bash:

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

Esta resposta sobre a sintaxe "Aqui Documentos" (EOF) foi inestimável para mim: https://unix.stackexchange.com/a/88492

Você também precisa allow-preset-passphrase, ~/.gnupg/gpg-agent.confconforme mencionado por holms.

Se você deseja fazer isso com criptografia simétrica (já que eu já perdi minha sanidade, talvez você não precise), veja minha resposta aqui, encontrando o keygrip / cacheid certo para usar para predefinir a senha em gpg- agente: https://superuser.com/a/1485486/1093343

evnp
fonte