Cada día existen más amenazas que ponen en peligro nuestros datos. Siempre hemos insistido en la importancia de tener una copia de seguridad en un lugar seguro para poder recuperar los archivos en caso de pérdida. Cuando nuestros datos son personales es conveniente realizar también un cifrado de estos para evitar que puedan caer en malas manos. Existen muchas formas de cifrar archivos. En este artículo os vamos a hablar de una forma sencilla de cifrar archivos con OpenSSL.
OpenSSL es solo una de las muchas opciones que teneos actualmente para criptografía. Lo cual es ideal para las necesidades actuales, de mantener la privacidad y la seguridad en todas las comunicaciones que se realizan por Internet.
¿Qué es OpenSSL?
OpenSSL es la librería criptográfica por excelencia en todos los sistemas operativos, tanto Windows y Linux, como también en los dispositivos móviles basados en Linux. Esta librería dispone de un robusto paquete de herramientas de administración relacionadas con el cifrado o encriptado de los datos, esta librería se encarga de proporcionar todas las funciones criptográficas a protocolos tan importantes como TLS o HTTPS, además, también se encarga de hacer funcionar los servidores y clientes SSH como OpenSSH, por supuesto, también es ampliamente usado en los navegadores web, e incluso en los protocolos de transferencia de ficheros seguros como SFTP y FTPES, ya que estos dos protocolos hacen uso del cifrado de datos para poder transferir los archivos.
Aunque a lo largo del tiempo se han descubierto vulnerabilidades muy graves en esta librería, lo que supuso poner Internet en peligro tal y como lo conocemos, la verdad es que sigue siendo ampliamente utilizado por todo el mundo. No obstante, a raíz de estos fallos de seguridad, aparecieron diferentes proyectos con la finalidad de sustituir a OpenSSL, pero de momento ninguno de ellos lo ha conseguido todavía.
Estamos ante una potente herramienta, la cual no permite realizar un cifrado de archivos de forma integral, para la cual usa diferentes métodos de seguridad. Hoy en día, tener toda nuestra información cifrada puede ser muy importante a la vez que muy beneficioso, de forma que si cae en malas manos, no se pueda ver el contenido. La seguridad en todos nuestros datos, debe ser una prioridad fundamental, y más si se trata de una empresa u otra institución, a mayores de tener un control de los accesos al contenido que tenemos cifrado.
Además de estar presente en los principales protocolos, y que nos permitirá crear diferentes claves públicas/privadas y mucho más, también nos va a permitir cifrar archivos de forma individual a través de la consola, y es que vamos a tener una gran versatilidad.
Tipos de cifrado
OpenSSL se ha convertido en una de las herramientas más representativas en el panorama de la informática. Su capacidad es muy amplia, y proporciona un gran soporte para una variedad muy grande de algoritmos de cifrado. A pesar de que la lista no es exhaustiva, algunos de los más conocidos para el cifrado simétrico son:
- AES (Con disponibilidad de utilizar diferentes modos como CBC, CFB, OFB, entre otros)
- DES y 3DES
- Blowfish
- RC4 y RC5
- Camellia
- IDEA
- CAST
Si nos fijamos en el apartado del cifrado asimétrico para la criptografía con claves públicas, nos encontramos algunos como:
- RSA
- DSA
- ECDSA
- DH
- ECDH
Por otro lado, tenemos las funciones hash criptográficas:
- SHA en sus muchas variantes
- MD5
- RIPEMD
- BLAKE2
También podrá dar uso de otros protocolos criptográficos como:
- SSL/TLS donde se soportan diferentes versiones
- DTLS
Algunos más desconocidos para funciones de derivación de claves y funciones de autenticación de mensajes:
- HMAC
- PBKDF2
- CMAC
Y por último también tenemos sistemas de Compresión como puede ser Zlib, el cual se puede utilizar cuando se realizan compilaciones solo para tal efecto. Incluso podremos utilizar algoritmos de claves elípticas, donde OpenSSL soporta una gran variedad que se pueden utilizar como ACDH o ECDSA. Por lo cual la variedad es muy grande, y siempre podemos elegir el que más nos interese. En todo caso, la lista puede ser más larga con más opciones. Esto hace que realizar la elección del cifrado, sea una tarea importante. Esta requiere un estudio, y una comprensión de los motivos por los cuales se va a realizar la implementación. A mayores será necesario contar con los conocimientos adecuados para que no aparezcan posibles problemas, asegurando todo el sistema y los datos que este contiene. Lo que al fin y al cabo, es la premisa de OpenSSL para cualquier organización.
Generar las claves de cifrado
En primer lugar vamos a generar las claves de cifrado con las que se cifrarán los documentos. Para ello ejecutamos un terminal desde Linux y tecleamos:
openssl genrsa -out clave.pem 2048
Con este paso ya hemos creado una clave pública y privada dentro de un mismo archivo. La clave será de 2048 bits, pudiendo modificar este parámetro por el valor con el que queramos proteger nuestro archivo.
A continuación extraeremos la clave pública del fichero anterior tecleando:
openssl rsa -in clave.pem -out clave.pub.pem -outform PEM -pubout
Con esto ya tenemos la clave pública en un archivo independiente.
Cifrar un archivo con la clave de OpenSSL
El sistema de claves públicas y privadas no puede cifrar archivos de gran tamaño, por lo que hay que dar un rodeo para cifrar los archivos. Para cifrar un archivo grande utilizando este método debemos, en primer lugar, cifrar el archivo con un cifrado simétrico. La clave del cifrado simétrico se calculará de forma aleatoria con OpenSSL y será dicha clave la que cifraremos con la clave pública calculada anteriormente.
Para descifrar un archivo debemos realizar el proceso anterior. En primer lugar tendremos que descifrar la clave aleatoria con nuestra clave pública y una vez tengamos la clave aleatoria aplicársela al archivo cifrado anteriormente.
En primer lugar, vamos a crear una clave aleatoria para cifrar el archivo.
openssl rand -base64 48 -out key.txt
Una vez creada la clave, cifraremos el archivo con la anterior clave aleatoria calculada.
openssl enc -aes-256-cbc -pass file:key.txt -in [archivo original] -out [archivo cifrado].encrypted
Para finalizar cifraremos la clave aleatoria con la que hemos cifrado el archivo anterior con la llave pública generada anteriormente.
openssl rsautl -encrypt -in key.txt -out key.enc -inkey clave.pub.pem -pubin
Con estos pasos tendremos 2 archivos cifrados y una clave. La estructura de cifrado sería similar a la siguiente:
Archivo original > Clave aleatoria > Clave pública
Podemos ver como dispondremos ahora de varios archivos. Los que debemos guardar son:
- archivo.encrypted
- key.enc
- clave.pem
Descifrar archivos cifrados con OpenSSL
El proceso de descifrado es el inverso al de cifrado tal como hemos explicado en el apartado anterior.
En primer lugar debemos descifrar el archivo «key.enc» que contiene la clave aleatoria. Para ello tecleamos:
openssl rsautl -decrypt -inkey ./clave.pem -in key.enc -out key.txt
Con este proceso obtenemos el archivo key.txt que contiene la clave aleatoria con la que ha sido cifrado el fichero. A continuación descifraremos el archivo con:
openssl enc -aes-256-cbc -d -pass file:key.txt -in [archivo cifrado].encrypted -out [archivo original]
Este proceso nos devolverá nuestro archivo a su forma original para poder volver a trabajar con él.
¿Qué usos le podemos dar?
Lo primero que podemos decir, es que con OpenSSL podemos cifrar cualquier archivo, por lo cual no hay una finalidad en concreto para usar esta herramienta. Más bien se basa en una serie de recomendaciones, las cuales sí puede tener mucho sentido tener cifradas, como pueden ser las copias de seguridad, de forma que si intentamos dar uso de alguna, no podremos a no ser que tengamos la contraseña. Otro uso que se le puede dar, es para realizar envíos de archivos de cualquier tipo, pero especialmente si estos contienen información sensible como pueden ser datos personales, médicos o contraseñas.
En caso de tratar de acceder a un archivo cifrado sin la correspondiente contraseña, recibiremos un mensaje de error. Por otro lado, como también es posible realizar una lectura forzada del contenido, podemos decir que no es tan sencillo como simplemente forzar la lectura, en cambio una vez dentro, el contenido se mostrará de una forma la cual no tendrá sentido, por lo cual no se podrá leer o ver directamente. El contenido aparecerá como si fueran un montón de códigos y símbolos. En definitiva, el archivo será ilegible.