gnupg - tutorial - gpg significado
¿Cómo usar el argumento de contraseña-fd de Gnupg? (4)
Como recientemente tuve que resolver esto, pensé que valdría la pena participar.
La respuesta de kylehuff es muy buena si está descifrando archivos; sin embargo, si necesita redirección de entrada / salida, como tuberías, aquí hay un ejemplo de cómo usar un descriptor de archivo que no sea 0
para pasar la frase de contraseña.
#!/usr/bin/env bash
# Set some variables for easy modding
Var_fd=''9''
Var_pass_location="/path/to/passphrase.file"
Var_gpg_decrypt_opts="--passphrase-fd ${Var_fd} --decrypt"
Var_output_location="out.txt"
Arr_string=( "$@" )
# Open file descriptor and shove the passphrase file into it
exec ${Var_fd}<${Var_pass_location}
# Pipe input array though gpg and append to output file
cat <<<"${Arr_string[*]}" | $(which gpg) ${Var_gpg_decrypt_opts} >> ${Var_output_location}
# Do not forget to close the file descriptor
exec ${Var_fd}>&-
Tenga en cuenta, fuera de los casos de uso especiales, que guardar la frase de contraseña de sus claves privadas generalmente se considera una mala idea o una mala práctica de seguridad. -También, por favor, no olvide cerrar el descriptor cuando termine para que su frase de contraseña no sea accesible a través de ese método.- A menudo, en estos casos de uso, he aconsejado usar teclas protegidas específicamente que no están protegidas por frase de contraseña, pero es su elección. . Si le gusta el código anterior, es posible que también desee revisar el script que he depurado para la generación de claves, ya sea desatendido o asistido, ya que cubre las opciones de descriptor de archivos gpg que se utilizan con menos frecuencia.
Ediciones / actualizaciones
Así que he estado depurando las operaciones de descifrado masivo y tengo evidencia para mostrar que los descriptores de archivos parecen cerrarse automáticamente o quizás se cerró automáticamente por GnuPG. Verifique la compilación 152 en la parte inferior de los registros sin procesar, justo antes de las comprobaciones de diff
, encontrará que el primer bloque de datos cifrados ingresa a la frase de paso, dejando los siguientes dos bloques de datos sin una frase de paso válida. Los scripts relacionados en esta operación son; primero, el script_decrypt.sh creación script_decrypt.sh establece la frase de contraseña de la clave de prueba en el descriptor de archivo 9
como se muestra en los ejemplos anteriores, luego se llama el script de ayuda para que use ese descriptor de archivo ... es un caso de uso funky pero la moraleja La historia parece ser que cualquier operación de descifrado masivo que planee implementar con los descriptores de archivos GnuPG probablemente tendrá que seguir los pasos descritos anteriormente como una función completa para que los descriptores de archivos vuelvan a abrirse. Estaré reescribiendo el script de ayuda en los próximos empujones, así que revise los registros de compilación de Travis-CI más de 152
para encontrar si tengo una solución a dónde se cierran los descriptores de archivos ...
... de modo que solo se tomaron dos intentos para que las cosas funcionen, vea la diferencia en la compilación 154 tanto el archivo cifrado como la coincidencia del registro de entrada sin procesar. Según la hipótesis, los descriptores de archivo se vuelcan después del primer uso, ya sea por GnuPG o por un sub shell, por lo que la frase de contraseña debe asignarse antes de cada comando de descifrado para que se realice el descifrado masivo.
Espero que esto sea valioso para todos ustedes.
Me gustaría usar el comando de decrypt
GnuPG sin ninguna intervención del usuario. El argumento --passphrase-fd
del script parece exactamente lo que necesito. Pero no sé cómo funciona, no he encontrado ejemplos.
¿Alguien podría darme un ejemplo de dicho comando, tanto en entornos Windows como UNIX?
(FYI, estoy usando GnuPG 2).
Gracias ya :)
La respuesta de Kylehuff todavía no funcionaría para mí, con gpupg aún aparece un mensaje de contraseña.
De acuerdo con https://wiki.archlinux.org/index.php/GnuPG#Unattended_passphrase con gnupg versión 2.1.0 y superior, debe realizar pasos adicionales para admitir --passphrase-fd
Primero, edite la configuración de gpg-agent para permitir el modo de inserción de pinback en bucle: ~ / .gnupg / gpg-agent.conf
allow-loopback-pinentry
Reinicie el proceso de gpg-agent si se está ejecutando para que el cambio tenga efecto.
En segundo lugar, cualquiera de las dos aplicaciones debe actualizarse para incluir un parámetro de línea de comandos para usar el modo de bucle invertido, de este modo:
$ gpg --pinentry-mode loopback ...
Para utilizar la opción gpg --passphrase-fd
en GnuPG v2, debe especificar el parámetro --batch
. Primero explicaré cómo funciona --passphrase-fd
, y luego --passphrase-fd
los ejemplos.
--passphrase-fd
le dice a GnuPG de qué descriptor de archivo (-fd) espera que venga la frase de contraseña. Los descriptores de archivo estándar son STDIN (0), STDOUT (1) y STDERR (2). Para el contexto de esta pregunta, normalmente solo estaría preocupado por STDIN (0).
No especificó de dónde quiere que venga la frase de contraseña, así que demostraré el uso de STDIN (estándar en) de varias maneras.
--passphrase-fd 0
le dice a GnuPG que recupere la contraseña de la entrada en el shell actual; así, por ejemplo, si desea que GnuPG obtenga los datos de la frase de contraseña en la siguiente línea de entrada de la consola, el comando y la salida serían así:
gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp
<next line of input is passphrase followed by hitting enter>
gpg: encrypted with 1024-bit RSA key, ID EC18C175, created 2013-10-26
"testkey4321 (4321) <[email protected]>"
this is a test... this is only a test...
En el ejemplo anterior, la frase de contraseña se proporcionó a través del descriptor de archivo 0 (STDIN), que proporcionamos ingresándola en la entrada estándar actual de las carcasas.
En el siguiente ejemplo, le diremos a GnuPG que recupere la frase de contraseña de la entrada en el shell actual que es en realidad la salida de otro comando (eco, en este caso, que simplemente "hace" lo que le dices):
echo "mypassphrase" | gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp
gpg: encrypted with 1024-bit RSA key, ID EC18C175, created 2013-10-26
"testkey4321 (4321) <[email protected]>"
this is a test... this is only a test...
Otro ejemplo que vuelca el contenido de un archivo que contiene la frase de paso a STDIN -
cat /path/to/file_with_passphrase | gpg2 --batch --passphrase-fd 0 --armor --decrypt /path/to/encrypted_file.pgp
gpg: encrypted with 1024-bit RSA key, ID EC18C175, created 2013-10-26
"testkey4321 (4321) <[email protected]>"
this is a test... this is only a test...
En resumen, --passphrase-fd
simplemente le dice a GnuPG que desea darle la frase de contraseña necesaria a través de un descriptor de archivo estándar; La diferencia entre GnuPG v2 y GnuPG es simplemente el parámetro --batch
.
Los ejemplos anteriores deberían funcionar igual en los entornos Windows y * nix, con la única diferencia de que en Windows, dependiendo de su configuración y versión, deberá reemplazar cat
por type
para volcar el contenido de un archivo a STDIN.
Utilizando GPG4win / gpg 2.2.3: para usar la passphrase-fd 0
y omitir la solicitud, puedo confirmar que funciona lo siguiente:
--pinentry-mode loopback