Cifrado fácil de ficheros con OpenSSL

Si eres de los que te gusta más abrir una ventana de terminal que a un niño un caramelo, te voy a explicar un método sencillito para tener tus secretos a salvo. Vamos a usar OpenSSL para cifrar (encriptar) un fichero. Sí, sí ya sé que existen muchas formas de hacerlo: PGP, Truecrypt, ZIP, RAR, cifrando desde ficheros Office, etc. pero aquí lo voy a explicar con OpenSSL y por línea de comandos.

Si has visto OpenSSL y se te han puesto los ojos como platos porque últimamente has leído algo de una vulnerabilidad relacionada con él, no te preocupes, no afecta a lo que vamos a hacer ahora porque vamos a usar criptografía simétrica, no asimétrica (de clave pública). Además, a día de hoy, la vulnerabilidad está subsanada, pero te recomiendo revisar todas tus claves generadas en los dos últimos años, por si acaso.Bien, vamos al tema. Ejemplo facilón, tenemos un ficherito con secretos, por ejemplo, las tropecientas contraseñas que utilizas para distintas cuestiones y que deberás proteger con un cifrado si no quieres ver comprometida tu existencia digital (y algo más que la digital). Supongamos que ese fichero se llama passwords.txt. Vamos a cifrarlo con un par:

openssl enc -aes-256-cbc -a -in passwords.txt -out passwords.enc

Evidentemente, nos pedirá una clave, que será nuestra contraseña maestra, es decir, la que protege nuestro fichero que contiene todas nuestras contraseñas. Te puedes permitir olvidar todas, menos la maestra, y ni lo pienses, borra esa idea de la cabeza, no se te ocurra escribirla en ninguna parte. Hemos usado AES de 256 bits en modo CBC, la opción -a es para que la salida no sea un binario, sino que lo encodee a Base64 (usease texto imprimible para poder pegarlo en un email, por ejemplo). El fichero de salida contiene el contenido encriptado de nuestro fichero de contraseñas, passwords.txt. No debemos olvidar que no se ha borrado el fichero original, se ha generado uno nuevo, así que habrá que borrarlo para que nadie lo encuentre :)¿y alo has borrado? bien, y ¿por qué lo has hecho si todavía no sabes cómo desencriptar el fichero que acabamos de cifrar?  Bueno vamos a ver como se hace eso: 

openssl enc -aes-256-cbc -a -d -in passwords.enc -out passwords.txt

La diferencia es la opción ‘d’, evidentemente indica a OpenSSL que queremos desencriptar el fichero. El resultado lo deja de nuevo en passwords.txt, pero si sólo deseamos consultar el contenido del fichero cifrado, podemos obviar el -out passwords.txt y nos mostraría el contenido por la pantalla. Vale pero teclear todo eso es un poco palo cada vez que queramos hacer la operación. Cierto, pero para eso están los scripts, por ejemplo.

enc-dec.sh:
  openssl enc -aes-256-cbc -a -d -in passwords.enc -out passwords.txt
enc-enc.sh:
  openssl enc -aes-256-cbc -a -d -in passwords.enc -out passwords.txt
  rm passwords.txt
  echo "Fichero cifrado de pwds con AES 256 CBC encodeado en Base64" | mutt -a ./pwds.enc -s “Envío copia fichero pwds? cuenta decorreo(arroba)gmail.com

Mediante estos sencillos scripts puedes cifrar y descifrar con facilidad y además, cada vez he añadido una última línea, de modo que cada vez que se ejecuta el cifrado, envía un email adjuntando el fichero de contraseñas cifrado passwords.enc.A modo de copia de seguridad, esa línea la puedes poner antes del cifrado y así te enviará la última versión del fichero, antes de proceder a cifrar y borrar el fichero de testo plano, por lo que pueda pasar.