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.
Dudas que tengo
No estoy muy puesto en cómo funciona GnuPG más allá de necesitar una clave y poder generarla. Estos días de atrás busqué a alguien que me solucionara una duda sobre la caducidad de las claves. Lo pongo aquí por si alguien de los que lleguen a leer esto sabe la contestación y lo puede aclarar en los comentarios1.
La clave que tengo configurada como principal está a punto de caducar, le falta un mes. Tengo bastantes ficheros cifrados con esa clave y se me plantean dos opciones: Extender la caducidad de la clave, que sería la opción que se me ocurre de primeras. Crear una nueva y pasar los ficheros a estar cifrados con ella (supongo que lo podría automatizar con algún script con elisp o guile para no pasarme un par de días sin hacer otra cosa).
¿Qué es más aconsejable? De momento pienso que alargaré la vida de la clave un añito más, y si fuera más aconsejable el cambio iré haciendo el modo durante ese tiempo.
Como he dicho antes, los archivos cifrados los guardo en un disco duro externo dentro de una partición también cifrada por contraseña. El tiempo de acceso es un poco lento, no desesperante, pero lento. ¿Hay alguna forma ─sin perder seguridad─ de acelerar el proceso de carga y guardado?
Footnotes:
Ten en cuenta que si ha pasado más de un mes desde la fecha de publicación de este artículo, llegas tarde a dar consejos: la contraseña habrá caducado. ;-)
Comentarios