Cómo escribir la contraseña de un archivo .gpg solo al abrirlo

17

(Entiendo las implicaciones de seguridad de lo siguiente, y estoy bien con ellas).

Tengo un solo archivo cifrado en mi org, diary.org.gpg. Nunca hice ninguna configuración especial para que funcione, aún

  1. Cada vez que visito el archivo, se me solicita la contraseña de cifrado. Lo cual es genial.
  2. Cada vez que guardo el búfer, se me solicita la contraseña nuevamente dos veces. Lo cual es mi problema .

Tenga en cuenta que no he configurado nada para que esto funcione, por lo que cualquier respuesta con respecto a agentes o llaveros tendrá que venir con instrucciones de configuración.

Pensé en mantener la contraseña escrita en algún lugar dentro del archivo (en el encabezado o en los comentarios al final del archivo). Luego, cada vez que guardo, Emacs podría leer la contraseña en el búfer y usarla en lugar de preguntarme. Pero cuando comencé a investigar esto, me perdí por completo en algún lugar dentro epa.el.

P: ¿Cómo puedo enviar una contraseña directamente desde Emacs al sistema / proceso de cifrado al guardar el búfer, en lugar de que se me solicite?

Todo lo demás (encontrar la contraseña en el búfer) puedo resolverlo yo mismo. Me perdí al tratar de entender cómo Emacs interactuaba con gpg.

Tenga en cuenta que estoy en Ubuntu, Arch Linux y Windows. Por eso mi primera idea fue una solución centrada en emacs.
Puedo vivir con una solución que no funciona en Windows, siempre que pueda acceder al archivo de forma manual.

Malabarba
fuente
Creo que esto: orgmode.org/worg/org-tutorials/encrypting-files.html#sec-5 es lo que quieres (el agente gpg).
wvxvw
@wvxvw Quizás. No dice nada sobre el ahorro, así que tendré que intentarlo.
Malabarba
Para ser sincero, GPG y los programas relacionados tienen una interfaz de usuario notablemente mala. Es realmente difícil entender lo que hacen desde la interfaz o la documentación. Pero entiendo que el propósito gpg-agentes que es similar a ssh-agentsolo almacenar las contraseñas que tiene, una vez que lo activa. Por lo tanto, no se le pedirá la contraseña ni cuando abra un archivo, ni cuando la guarde (siempre que el agente recuerde la contraseña), pero no creo que esto se extienda a la frase de contraseña, que es un poco tonta , si es verdad.
wvxvw
¿Es probable que desee configurar gpg-agentcorrectamente, de modo que guarde en caché la clave por un tiempo? :)
Günther Noack
1
@wvxvw ¿Quizás ese era el caso? Encontré que las páginas de manual de dichas herramientas son bastante detalladas y la interfaz (CLI) es lo que uno esperaría de los programas basados ​​en terminales.
legends2k

Respuestas:

12

Cifrado con contraseña + clave

Esto no guarda la contraseña directamente en el archivo, pero hace algo similar sin ningún riesgo de seguridad y lo ayuda a lograr lo que desea.

  • Debe usar cifrado asimétrico para que su contraseña esté asociada con una ID de correo electrónico en un llavero .

  • Guarde el siguiente en la parte superior de su archivo .gpg

-*- epa-file-encrypt-to: ("[email protected]") -*-

La contraseña se solicita la primera vez que se guarda / crea el archivo. Pero después de eso, la contraseña se solicita solo una vez cada vez que abre el archivo guardado

El único inconveniente es que no debe perder el archivo de llavero que se guarda ~/.gnupg/de forma predeterminada.

Configuración GPG

Configuración de Emacs

No es necesario realizar ninguna configuración para esto en emacs.

Configuración del sistema

Pero debe tener el entorno de su sistema listo con pocas bibliotecas para que funcione la función GPG.

En el momento de configurar esto, tuve que instalar lo siguiente:

  • gpgme-1.5.3
  • libgpg-error-1.17
  • libksba-1.3.2
  • libassuan-2.2.0
  • libgcrypt-1.6.2
  • gnupg-2.0.26
  • pinentry-0.9.0

Necesitaba una o dos de las bibliotecas anteriores y terminé instalando las otras porque eran dependencias obligatorias u opcionales.

Una vez que todo esté instalado, haz

> gpg --gen-key

Y genere una clave que nunca caduque para usted y asóciela con su nombre real y correo electrónico.

La clave generada se guardará en su ~/.gnupg/directorio.

Cambiar la ubicación del llavero

Puede cambiar la ubicación del llavero cambiando $GNUPGHOME, usando --homediru --keyringopciones para gpg.

De man gpg:

--keyring file

Agregar archivo a la lista actual de llaveros. Si el archivo comienza con una tilde y una barra diagonal, estos se reemplazan por el directorio $ HOME. Si el nombre de archivo no contiene una barra oblicua, se supone que está en el directorio de inicio de GnuPG ("~ / .gnupg" si --homedir o $ GNUPGHOME no se usa).

Tenga en cuenta que esto agrega un llavero a la lista actual. Si la intención es usar solo el llavero especificado, use --keyring junto con --no-default-keyring.

Usando GPG con emacs

En emacs, simplemente crea un archivo con una .gpgextensión. Por ejemplo, si el archivo era originalmente auth.el, debería cambiarle el nombre auth.el.gpg.

Coloque esta línea en la parte superior del archivo:

;; -*- epa-file-encrypt-to: ("[email protected]") -*-

Tenga en cuenta que he usado los caracteres de comentario de elisp ;;como el archivo de ejemplo aquí auth.el.gpg.

Utilice la dirección de correo electrónico exacta que utilizó en el momento de la generación de claves.

Cuando intente guardarlo, emacs mostrará este mensaje en un búfer:

Select recipients for encryption.
If no one is selected, symmetric encryption will be performed.  
- `m' to mark a key on the line
- `u' to unmark a key on the line
[Cancel][OK]

  u <GPG KEY> <YOUR NAME> (<YOUR GPG KEY NAME>) <<YOUR GPG KEY EMAIL>>

Navegue el punto a la línea que contiene la clave, presione m.

Navega por el punto hasta el [OK]botón y presiona <return>.

Ahora puede guardar el archivo y eliminar ese búfer de archivo.

La próxima vez que abra ese archivo .gpg, se le pedirá la contraseña solo una vez y luego los archivos guardados consecutivos estarán libres de contraseña.

Más información

  • Aquí está una de las publicaciones de blog que habla sobre la configuración de emacs y GPG que también puede consultar.
  • EasyPG - emacswiki.org
Kaushal Modi
fuente
Si pierdo el archivo de llavero, ¿podré abrir el archivo cifrado con la contraseña habitual o se perderá para siempre?
Malabarba
@Malabarba No lo he intentado pero creo que está perdido para siempre. Pero lo bueno es que ese archivo se genera solo una vez cuando asocia un correo electrónico y una contraseña con un elemento de llavero. No se modifica después de esa primera vez hasta que agregue más elementos de llavero (más pares de contraseña + correo electrónico). Simplemente guardo copias de seguridad de ese archivo en una llave USB y Dropbox y me aseguro de que la contraseña sea súper segura.
Kaushal Modi
He probado los documentos cifrados simétricamente para que sean portátiles. Cifré algo en emacs en Linux y lo abrí usando una de las muchas herramientas de descifrado GPG gratuitas disponibles para Windows. Pidió el llavero y lo apuntó a mi copia de seguridad en Dropbox y funcionó.
Kaushal Modi
Solo para su información: Sí, perder el archivo de clave significa que también perderá permanentemente el acceso a sus archivos cifrados. Necesita tanto la contraseña como el archivo de clave privada para desencriptarlos. Eso es parte del modelo de seguridad GPG para el cifrado asimétrico.
Tyler
Parece que tendré que ir con esta respuesta después de todo. ¿Sabes cómo puedo cambiar la ubicación del archivo de llavero?
Malabarba
9

Resulta que todo lo que tenía que hacer era

(setq epa-file-cache-passphrase-for-symmetric-encryption t)

Esta solución funciona tanto en Linux como en Windows, y es una cortesía de Ted y Michael en help-gnu-emacs.

Malabarba
fuente
¡Es bueno saber que esto funciona para ti! Tenía esta configuración en mi configuración de Emacs durante años, pero en algún momento simplemente dejó de funcionar. Sospecho que tiene que ver con mi uso del gnome-keyring-daemon (que también actúa como un llavero gpg).
pimentón
44
De la cadena de documentación para epa-file-cache-passphrase-for-symmetric-encryption: "Tenga en cuenta que esta opción no tiene efecto si usa GnuPG 2.0".
Wilfred Hughes