Cifrado de archivos con emacs.

En una conversación el otro día salió el tema de la seguridad en nuestros ficheros. Mi interlocutor se limitaba a poner una contraseña en un documento «güor» y se quejaba de que algunas veces se le olvidaba la clave y no podía abrir el archivo. Me contaba que había encontrado una herramienta que la averiguaba y que le venía fenomenal en esos casos: ya no había preocupación (¿?). Como psicólogo tengo la obligación de guardar confidencialidad de todos los datos de mis clientes. Horrorizado le pregunté por qué confiaba en un sistema que cualquiera podría descifrar teniendo la misma herramienta y no supo qué contestarme, salvo vaguedades sobre juaskers y que deberían hacer algo las autoridades con ellos. Le pregunté que si no había pensado si él «siendo un negado para la informática» ─como se definía a sí mismo─ era capaz de saltarse la protección con clave del «güor», es porque en definitiva no está protegiendo sus documentos. Y él contestó que, al fin y al cabo no es psicólogo clínico como yo, sólo profesor de primaria, como si los datos de los niños fueran menos importantes.

¿Y tú qué haces?, me preguntó. Mi contestación fue algo larga y algo friki, sobre GnuPG y emacs. Creo que le solté un ladrillo para el que no estaba preparado y, ahora pienso, no llegó a entender ni la primera frase donde le comentaba que utilizaba cifrado asimétrico con un par de claves pública-privada. Gestor de contraseñas, anillo de claves, firmar y verificar documentos son cosas a las que asintió, como el que da la razón a un friki, para al final soltarme el consabido: Ná, si al final todo se puede descifrar. Me callé un: Hombre, sí, pero consiste en ponerlo difícil, no en regalarlo.

De todas maneras, pensé en escribir este post por si a alguien más se le ocurre preguntarme, le pasaré el enlace y que se apañe, si quiere. Aquí va la cosa más o menos explicada con más detalle.

Texto plano: org-mode Toda la información la guardo en texto plano, en un disco duro externo dentro de una partición cifrada con contraseña. Dentro de los formatos de texto plano el formato de org-mode sirve para muchas cosas y yo utilizo muchas de ellas: desde escribir notas o llevar la agenda y gestionar información jerarquizada, hasta escribir libros. Puede producir muchos tipos de archivos de salida: html, pdf, odt, epub... Por lo que con poco esfuerzo puedo gestionar toda la información que luego tengo que volcar en un informe, en un artículo, o en una carta (o email). Hay manuales completos de muchos cientos de páginas explicando qué es el formato org y cómo se utiliza así que no entraré en ello ahora. Sólo decir que desde hace una temporada lo utilizo para todo: incluso tengo algunas rutinas hechas en elisp para corregir algunos tests y que me guarde la información en formato org-mode, dentro del archivo org que guarda la historia clínica. Esas informaciones, que tratan sobre las intimidades más íntimas de las personas que confían en mí, deben ser guardadas con toda la confidencialidad que yo sea capaz de proporcionar. Al principio, utilizaba directamente el comando gpg para cifrar esos archivos. Incluso, creé un par de claves pública─privada, sólo para hacer esos cifrados de manera exclusiva. Guardaba los cambios, cerraba el editor y cifraba el archivo borrando el original. Para abrir los ficheros después, primero lo descifraba con gpg y luego abría con el editor. Un proceso un poco cargante.

EasyPG: emacs facilitando el trabajo Un día por casualidad abrí un fichero que tenía la extensión .org.gpg ( gpg para recordarme a mí que está cifrado y org porque el formato interno es org-mode). El caso es que fue grande mi sorpresa cuando emacs abrió el fichero y el buffer estaba perfectamente claro. Él solo detectó gracias a la extensión gpg que era un archivo cifrado y lo descifró. Al principio me puse nervioso ¿Estoy haciendo las cosas bien? ¿Por qué emacs lo ha descifrado sin despeinarse?. Mirando en la documentación del editor encontré un el paquete EasyPG, una mina para el cifrado, descifrado y gestión de claves GnuPG. Respiré un poco más tranquilo, lo había descifrado automáticamente porque tenía la clave privada para hacerlo. Otro de los puntos que encontré que me gustan de este modo es que puedes hacer que un fichero nunca haya estado descifrado (en claro) en el disco duro. Simplemente tienes que crear un buffer con un nombre que termine en .gpg . Bien llamando desde línea de comandos al editor, por ejemplo: emacs texto-secreto.org.gpg O bien abriendo un buffer nuevo con C-x C-f y escribiendo un nombre de archivo que no exista. Cuando le digas a emacs que lo guarde mostrará una lista de claves para que elijas cuál quieres usar para el cifrado: seleccionas una con m , pulsas en Ok y de la memoria del buffer pasará al disco ya cifrado. Cuando lo abres con C-x C-f lo descifra para mostrarlo en el buffer, cuando lo guardas de nuevo con C-x C-s vuelve a guardar la información cifrada (esta vez ya no pregunta por la clave). Por lo tanto, en el disco duro siempre se guarda cifrada la información. Aunque alguien pudiera acceder al disco duro o incluso hacer una copia a bajo nivel del mismo, la información nunca aparecerá en claro, sólo cifrada. Si tenéis a mano el emacs y utilizáis claves gnupg probad los comandos: M-x epa-list-keys y M-x epa-list-secret-keys El primer comando muestra la lista de claves públicas del sistema y el segundo la lista de claves privadas. Esas listas permiten gestionar las claves, por ejemplo al situar el cursor sobre una de las claves y pulsar <enter> mostrará información sobre la misma: fecha de creación, fecha de expirado, si puede cifrar, si puede firmar, etc. Otro comando que puede ser útil es epa-file-select-keys , que permite seleccionar la clave(s) pública(s) con la(s) que se cifrará el fichero cargado en el buffer.

Cifrar partes del fichero En ocasiones no necesito cifrar todo, sólo la parte que contiene datos personales u otro tipo de contenido que quiero (necesito) ocultar. En ese caso simplemente selecciono la región de texto que quiero cifrar y ejecuto el comando: M-x epa-encrypt-region Dentro del fichero de texto aparecerá una región con un aspecto parecido a lo siguiente: -----BEGIN PGP MESSAGE----- hQEMA/RDkQmHJoMPAQgAwrI+z1VToRnUxHarUHuiwzd5ah07yTN7LnmhdLWGaLeq wIoO0bRvYZmyOAS0fbRWxGj7uLcyW3KNIwrQWi4UFnujfhSsqR8qK+G5haFsapk7 mQEqAkX6qLjIp7P104uyytd1bZSm+wK01f94gdaXEwmtwWxKmhjZcksw8QnPum8l WvTnkWjeI1MZOIlG/NxcjbPPRQQv/ISZD+L3DbzmbMyQZuxgmCDeiazAkDWE5056 +xahCwLjllLwXLlBKOQYb39PVBh9myVqqT2fmbvQj2gld4yDL1DbNOojyCsmQ7VT sOM0EA0yg2OCWj0axG/4wnojm86D2grIY5BoK8EBldJmAcpR8DXXc9o3c67Py4gf /lmyg14KA1l/6ba35pY86WUTTxiTu+tZGjnDemSKnwdEuo6Q+RC5pgLThd2T8/Wg Q5G6xGsrJtUypp1byCguIGDgiKmXkPnpsLwnjrD/8mnUngK8tF3X =oDMU -----END PGP MESSAGE----- También se puede meter la «zona» cifrada dentro de un fichero cifrado. Aunque en este caso no le veo más utilidad que tener algunos párrafos cifrados con otro par de claves, por si acaso la general del fichero se viera comprometida o no confiáramos completamente en ella. Luego sólo hay que marcar las líneas de BEGIN PGP MESSAGE a END PGP MESSAGE y utilizar el comando M-x epa-decrypt-region , preguntará si sustituye el texto cifrado. Si contestamos que sí, desaparecerá el texto cifrado sustituido por su versión en claro y si contestamos que no, nos mostrará el texto en claro en un buffer temporal. Por lo que es recomendable, contestar que sí cuando queremos hacer modificaciones y que no cuando sólo estamos consultando los datos. Lo digo, porque alguna vez puede ocurrir que una vez consultados los datos cerremos bufferes y no nos acordemos de volver a cifrar lo descifrado.

Integración con Dired Una de las cosas que también se pueden hacer es firmar los archivos y verificarlos. Los comandos epa-sign-file y epa-verify-file sirven para estos menesteres. Por supuesto, también podemos utilizar epa-encrypt-file y epa-decrypt-file para cifrar y descifrar cualquier fichero del disco. Además, nos permite realizar todas estas operaciones desde Dired, el gestor de ficheros de emacs. Tan fácil como marcar los archivos con los que vamos a trabajar, pulsar : e y nos pedirá las claves para cifrar. Los comandos en Dired son: : d Descifrar archivos marcados. : v Verificar archivos marcados. : s Firmar (sign) archivos marcados. : e Cifrar (encrypt) archivos marcados.