Deja de tener tus datos desprotegidos
En criptografía, el cifrado es el proceso de codificación de la información. En este proceso convierte la representación original de la información, conocida como texto plano, en una forma alternativa conocida como texto cifrado. Gracias a GnuPG podemos cifrar nuestros archivos y documentos de forma sencilla para proteger la información que se encuentra en ellos haciendo uso del cifrado por claves.
Los dos tipos que existen de cifrado según sus claves son: simétrico y asimétrico.
Cifrado simétrico
En el esquema de clave simétrica, las claves de cifrado y descifrado son las mismas (Una contraseña). En caso de usar la criptografía para el envío de mensajes con información sensible, ambas partes deben de disponer de la misma clave para lograr una comunicación segura. Este método es más sencillo de implementar y usar, más rápido, consume menos recursos y es bueno para manejar y transferir grandes cantidades de datos. No obstante, tiene una gran desventaja y es que si se pierde una clave, los datos cifrados quedan en riesgo y que la clave debe compartirse de manera segura con la otra parte. Algunos de los protocolos que usa el cifrado simétrico son AES, DES, 3DES y RC5.
Cifrado de archivos
Gracias a GnuPG podremos cifrar archivos de forma muy sencilla e intuitiva. Accediendo a la terminal (cmd), ejecutaremos el comando gpg -c <nombre_del_archivo>. Si queremos tener un cifrado algo más seguro, podemos usar el siguiente comando gpg --s2k-mode 3 --s2k-count 65011712 --s2k-digest-algo SHA512 --s2k-cipher-algo AES256 -c <nombre_del_archivo>
- --s2k-mode n: Selecciona como se alternan las frases de la contraseña para el cifrado simétrico. Si n es 0, se usará una frase de contraseña simple (no se recomienda), un 3 (valor predeterminado), itera todo el proceso varias veces, especificadas por --s2k-count
- --s2k-count n: Especifica cuantas veces se repite la manipulación de frases de contraseña. El valor puede oscilar entre 1024 y 65011712.
- --s2k-digest-algo: Utiliza el nombre como el algoritmo de resumen utilizado para manipular las frases de contraseña para el cifrado simetrico. El valor predeterminado es SHA-1.
- --s2k-cipher-algo: Utiliza el nombre como algoritmo de cifrado para el cifrado simétrico con una frase de contrasñea si --personal-cipher-preferences y --cipher-algo no se dan. El valor por defecto es AES-128.
- -c o --symmetric: Cifra con un cifrado simetrico utilizando una frase de contraseña.
Descifrado de archivos cifrados
Una vez tenemos un archivo cifrado que queremos descifrar para poder ver el contenido en su interior, usaremos el comando gpg -o <nombre_del_archivo_final> -d <nombre_del_archivo_cifrado>. Si lo deseamos, aunque no es recomendable, podemos usar el parámetro --passphrase para pasarle la contraseña de la clave al tiempo de usar el comando gpg --passphrase <Contrasñea> -o <nombre_del_archivo_final> -d <nombre_del_archivo_cifrado>.
Cifrado Asimétrico
En el caso del cifrado asimétrico, se hacen uso de dos claves, la pública y la privada. Ambas claves están conectadas entre si, pues la clave pública es la que se encarga del cifrado y la privada del descifrado. El destinatario genera ambas claves y comunica la clave pública al emisor para que pueda cifrarlo. Esto hace que el mensaje solo pueda ser descifrado por la clave privada del destinatario, quien tiene la pareja de la clave que cifró el mensaje.
Otra de las ventajas que presenta el cifrado asimétrico, es la firma digital, y se dá cuando el emisor cifra con su clave privada el mensaje, haciendo que cualquiera con su clave pública pueda descifrarlo, pero logrando identificar al propietario del mensaje.
La ventaja que presenta el cifrado asimétrico es que los datos solo pueden ser descifrados por el propietario de la clave privada, pareja de la clave pública que cifró el mensaje; si la clave pública se pierde o es robada, los datos no quedan comprometidos; Ofrece autenticación y no repudio, además de confidencialidad.
Algunas de las desventajas que presenta son: Es más lento que el cifrado simétrico, consume más recursos, si se pierde la clave privada, no hay forma de recuperarla.
Crear la pareja de claves
El primer paso de todos, será generar nuestra pareja de claves pública y privada. Para ello, haremos uso del comando gpg --full-generate-key.
1. Empezaremos por indicarle que tipo de clave queremos, en nuestro caso elegiremos "RSA and RSA". Como podemos observar en la captura, podemos seleccionar también DSA o RSA para solo realizar firmas.
2. El segundo paso será indicarle la longitud de bits entre 1024 y 4096. Para una mayor seguridad, hemos seleccionado la longitud máxima que pueden tener, 4096.
3. A continuación nos pedirá si queremos que la clave expire y cuando queremos que expire, pudiendole indicarle desde dias, semanas, meses hasta años.
4. Siguiendo con el proceso, deberemos pasarle una serie de información que nos ayudará a identificar las claves, así como nuestro nombre, correo electrónico y, adicionalmente, un comentario que nos ayude a saber los motivos con el que fue creada la clave. Es importante destacar que lo que realmente identifica la clave es el correo electrónico.
5. Por último, nos solicitará que le pasemos la contraseña de nuestra clave privada, la que usaremos para descifrar los archivos cifrados con nuestra clave pública, firmar documentos, etc.
Exportar la clave pública
Para enviar la clave pública a otra persona, deberemos usar gpg -o <clave_publiga.gpg> --export <correo@electrónico.com>. Eso nos generará el arcivo de la clave pública listo para ser enviado.
Copias de seguridad de la clave privada
Como bien dijimos anteriormente, la clave privada es la que debemos proteger. Si alguien nos la roba, significaría que podría firmar documentos bajo nuestro nombre, descifrar archivos que se suponen que solo deberíamos recibir nosotros, y si la perdemos significaría no poder recuperar los datos de los archivos cifrados. Por ello, hacer copias de seguridad de la clave privada y guardarla de forma local, en algún dispositivo que tengamos custodiado a buen recaudo, sería una buena práctica (como un dispositivo USB protegido con contraseña). El comando que nos ayudará a exportar la clave privada es gpg --output <nombre_del_archivo> --export-secret-keys <correo@electrónico.com>.
Copia de seguridad de relaciones de confianza
Si quieres realizar una copia de las relaciones de confianza, bastará con usar gpg --export-ownertrust > <nombre_del_archivo>
Importar las claves y relaciones de confianza
Para importar cada una de las copias que hemos hecho, bastará hacerlo con el parámetro --import.
- gpg --import <nombre_archivo> (Pública/Privada)
- gpg --import-ownertrust < <nombre_del_archivo> (Relaciones de confianza).
Cifrar con clave pública
Utilizaremos el parámetro --encrypt para cifrar con nuestra clave pública. gpg -o <archivo_cifrado> --encrypt --recipient <correo@electrónico.com> <archivo_a_cifrar>.
- --encrypt: Cifra los datos de una o más claves públicas
- --recipient: Nombre de identificación del usuario (correo).Si esta la opción o la de --hidden-recipient no están, GnuPG pregunta por el identificador de usuario a menos que el parámetro --default-recipient esté configurado.
Descifrar archivos
Por último veremos como descifrar un archivo cifrado. Recordemos que para ello debemos tener la clave privada que pertenezca a la pareja de la clave pública que cifró el documento. Los comandos que podemos usar son:
- gpg -o <archivo_sin_cifrar> --decrypt <archivo_cifrado>
- gpg --passphrase <contraseña> -o <archivo_sin_cifrar> --decrypt <archivo_cifrado>
- gpg --pinentry-mode=loopback --passphrase <contraseña> --output <archivo_descifrado> --decrypt <archivo_cifrado>
El parámetro --passphrase hará que no haga falta pasarle la contraseña manualmente (no recomendado, útil para automatización de copias de seguridad). El parámetro --pinentry-mode=loopback es porque, en Windows, es posible que aún poniendo el parámetro --passphrase, el programa nos solicite que le introduzcamos la contraseña (Algunos usuarios han reportado dicho error con la respectiva solución: --pinentry-mode=loopback).