Información blog

Linux, tutoriales, noticias, sistemas, redes y seguridad informática, entre otras cosas.

viernes, 22 de mayo de 2015

Cómo cifrar un fichero con gpg

Siguiendo con la línea del cifrado, en este caso voy a hablar de un sistema de cifrado de archivos llamado gpg. GPG (Gnu Privacy Guard) es un clon libre de PGP (Pretty Good Privacy) que funciona bajo Linux, que tiene cómo función cifrar y descifrar archivos y mensajes. Carece de interfaz gráfica, pero sus funciones básicas se puede recordar con bastante facilidad. Dependiendo de las necesidades de uno pueden cifrar los ficheros de dos formas: de forma simétrica o asimétrica.


Cifrado gpg simétrico

El cifrado simétrico es el más simple de los dos; se basa en proteger un mensaje con una sola clave que se encargará de las tareas de cifrado y descifrado. Eso quiere decir que se usará la misma clave para una tarea y otra, lo cual en algunos casos es útil, si bien hoy en día se está optando más por el cifrado asimétrico porque ha demostrado ser más seguro. De todas formas, su simplicidad y su facilidad de implementación la convierten en una opción de cifrado muy cómoda para muchos, y por ello algunos la siguen usando. Para cifrar un fichero de texto con un cifrado simétrico, simplemente habría que escribir:

  1. gpg --symmetric fichero.txt

Al teclear dicho comando debería de preguntarnos por una contraseña, la cual servirá para proteger el archivo en cuestión. Dicha contraseña debe ser robusta con el fin de mantener la confidencialidad de dicho archivo, con lo que es recomendable que esté compuesta por mayúsculas, minúsculas, números y caracteres especiales. Tras finalizar el cifrado, veréis que se ha creado un archivo con el mismo nombre y con la extensión .gpg; ese será el archivo cifrado. Usaré cómo ejemplo un txt ficticio al que he llamado mensaje.txt. Dicho txt posee el siguiente contenido:


El mensaje en cuestión se ve perfectamente legible y sin ningún problema. Ahora habría que pasar al proceso de cifrado mediante el comando mencionado; cómo podéis ver en la siguiente imagen, ahora tenemos dos ficheros: mensaje.txt y mensaje.txt.pgp.


Ahora para comprobar que efectivamente el fichero está cifrado sería tan fácil cómo consultar su contenido mediante el comando cat. El cual os mostraría algo ilegible parecido a lo siguiente:


El contendido en cuestión, sólo se podría descifrar mediante la clave que hemos usado para cifrar el archivo en cuestión, aunque para ello habría que usar un comando especial que sería este:

  1. gpg --decrypt - o fichero.txt.gpg fichero.txt

Cómo podeis ver, primero habría que poner el fichero cifrado y después el fichero de salida que se creará tras el descifrado. Tras teclear dicho comando tocaría introducir la contraseña antes comentada, la cual en caso de ser correcta debería crear el fichero de salida en cuestión; dicho fichero sería perfectamente legible. Basándonos en el ejemplo anterior sería:



Cifrado gpg asimétrico


Este tipo de cifrado es el mismo que mencioné anteriormente a la hora de crear una clave precompartida RSA,. Se basa en la creación de una clave pública y privada: la pública sería la de cifrado y la privada la de descifrado. Ambas claves están relacionadas entre sí pero el hecho de conocer la clave pública no te hace conocer la privada, añadiendo una capa extra de seguridad a la comunicación, pues en este caso existen dos claves y no una cómo en el caso de la simétrica. 


Para cifrar un mensaje de forma asimétrica se necesita primero crear las claves de cifrado gpg. Para ello se usaría el siguiente comando:

  1. gpg --gen-key

Dicho comando se encargaría de crear la clave en cuestión, pero a diferencia de con la clave simétrica, en este caso es necesario seguir una serie de pasos. Lo primera pregunta que os aparecerá cuando introduzcáis el comando, será el tipo de cifrado deseado: DSA y ElGamal, DSA o RSA; En general se escoge la opción por defecto; DSA y ElGamal.


A raíz de realizar la elección, se os preguntará sobre el tamaño de la clave asimétrica, que puede oscilar entre 1024 y 4096; Por defecto está configurado para que se genere una clave de 2048 (un tamaño lo suficientemente grande para crear una clave robusta) pero este valor puede ser modificado. A modo de recomendación personal, recomiendo no escoger el tamaño mínimo, pues ha demostrado que no es del todo seguro.


Luego al tiempo de validez de la clave. El tiempo, establece la cantidad de días que la clave va a ser válida, pero si se quiere, la clave puede tener una validez infinita, cosa que ya está establecida por defecto y que recomiendo mantener como está.


Por último, habría que introducir los datos personales de uno, que harán de identificador de la clave; Ese identificador ayudará a uno a identificar la clave en cuestión, y el valor más importante de éste sería el Alias o Comentario. Además, también habrá que introducir la contraseña que protegerá la clave en cuestión, que al igual que he comentado con la clave simétrica, tiene que ser robusta.


Con estos datos introducidos, ahora tocaría esperar un rato a que se genere la clave. Habrá un momento en el que os mostrará un mensaje parecido a este:


Esto se debe a que para cifrar el archivo se necesita que el ordenador realice algunas tareas que pongan a trabajar sus discos y sus tarjetas de red; Aquí es difícil dar consejos... En mi caso abrí otra terminal y empecé a realizar tareas, tales cómo: hacer pings a diferentes sitios, actualizar los repositorios mediante apt-get update, navegar por internet (en caso de tener interfaz gráfica es el método más rápido y eficaz), ejecutar algunos scripts ficticios con el único fin de poner a trabajar el equipo, etc... Tras unos pocos minutos, ya deberíais tener la clave generada en un formato parecido a este:



Ahora tocaría generar la clave. Para ello el comando varía ligeramente del usado para el cifrado simétrico. 

  1. gpg --encrypt -r alias fichero.txt

Allí donde he puesto alias, habría que introducir el alias que hemos introducido para crear la clave. Yo en mi caso he hecho una clave poniendo cómo Alias ivan, con lo que si quisiésemos cifrar el fichero, mensaje.txt que hemos usado en la anterior prueba habría que escribir:


Cómo habréis podido comprobar, no pide clave alguna cifrar el archivo, ya que se está usando la clave que asimétrica que hemos generado. Para descifrarlo se usaría el mismo comando que hemos usado antes para descifrar el cifrado simétrico, con la diferencia que la contraseña que hay que introducir es la misma que hemos introducido en el proceso de generación de la clave asimétrica:

  1. gpg --decrypt - o fichero.txt.gpg fichero.txt



Importar y exportar la claves asimétricas

El proceso que acabo de realizar, lo he hecho dentro del mismo equipo; pero cómo podríamos hacerlo en otros? Es decir: ¿Cómo podemos hacer que otro equipo que tenga Linux instalado (digo Linux porque gpg va instalado por defecto) sea capaz de leer o de cifrar archivos con la misma facilidad que nosotros? Para ello es necesario exportar e importar las claves en cuestión, lo cual es muy sencillo.

Comencemos con la exportación de claves. La exportación de una clave consiste en preparar esta para ser desplazada a otro equipo. En este caso poseemos dos claves para exportar: Una pública y otra privada. Para exportar la clave pública habría que escribir:

  1. gpg --export -a alias > public.key

En este comando lo que haríamos sería coger la clave pública y volcarla en un fichero llamado public.key, el nombre del fichero destino es opcional, si bien tiene que tener la extensión .key; Por ejemplo, para mi caso particular tendría que escribir:


Para la clave privada, aunque el comando es parecido, varía ligeramente, pues hay que especificar que se trata de la clave privada. El comando sería:

  1. gpg --export-secret-key -a alias > private.key

Es decir, que en este caso, habría que poner especificar que se trata de una clave secreta/privada, para que el sistema reconozca que se quiere exportar la clave privada. Esta clave, private.key, debe de ser guardada en un lugar seguro pues será la que tenga el poder de descifrar los mensajes. En mi caso en particular el comando sería:


Ambos .key, pueden ser almacenados en un USB y transportarlos a la máquina que nosotros queramos. Ahora bien, con tener los .key en otro equipo no basta para que éste sea capaz de cifrar/descifrar los mensajes mediante dichas claves. Hay que importarlas a la base de datos gpg de nuestro equipo. 

Para importar cualquiera de las dos claves bastaría con escribir:

  1. gpg --import clave.key

Eso quiere decir que el comando bastaría tanto para hacer el import de public.key cómo de private.key. Aplicándolo a las claves que hemos generado sería:

y


Espero que os resulte útil.

Saludos.

No hay comentarios :

Publicar un comentario