Cómo cifrar y descifrar archivos con GPG en Linux

  • Dave McKay

    @TheGurkha

  • 12 de julio de 2019, 8:00am EDT
Ventana de terminal de Linux en un portátil
Fatmawati Achmad Zaenuri/.com

Protege tu privacidad con el comando Linux gpg. Utiliza una encriptación de primer nivel para mantener tus secretos a salvo. Le mostraremos cómo utilizar gpg para trabajar con claves, cifrar archivos y descifrarlos.

GnuPrivacy Guard (GPG) le permite cifrar archivos de forma segura para que sólo el destinatario previsto pueda descifrarlos. En concreto, GPG cumple con el estándar OpenPGP. Está basado en un programa llamado Pretty Good Privacy (PGP). PGP fue escrito en 1991 por Phil Zimmerman.

GPG se basa en la idea de dos claves de cifrado por persona. Cada persona tiene una clave privada y una clave pública. La clave pública puede descifrar algo que fue encriptado usando la clave privada.

Publicidad

Para enviar un archivo de forma segura, lo encriptas con tu clave privada y la clave pública del destinatario. Para descifrar el archivo, necesitan su clave privada y tu clave pública.

De esto se desprende que las claves públicas deben ser compartidas. Necesitas tener la clave pública del destinatario para cifrar el archivo, y el destinatario necesita tu clave pública para descifrarlo. No hay ningún peligro en hacer que tus claves públicas sean sólo eso: públicas. De hecho, existen servidores de claves públicas para ese mismo fin, como veremos. Las claves privadas deben mantenerse privadas. Si su clave pública es de dominio público, entonces su clave privada debe mantenerse secreta y segura.

Hay más pasos involucrados en la configuración de GPG que en su uso. Afortunadamente, por lo general sólo es necesario configurarlo una vez.

Generando tus claves

El comando gpg estaba instalado en todas las distribuciones de Linux que se comprobaron, incluyendo Ubuntu, Fedora y Manjaro.

Publicidad

No tienes que usar GPG con el correo electrónico. Puedes cifrar los archivos y ponerlos a disposición para su descarga, o pasarlos físicamente al destinatario. Eso sí, tienes que asociar una dirección de correo electrónico a las claves que generes, así que elige qué dirección de correo vas a utilizar.

Aquí tienes el comando para generar tus claves. La opción --full-generate-key genera tus claves en una sesión interactiva dentro de tu ventana de terminal. También se le pedirá una frase de contraseña. Asegúrese de recordar cuál es la frase de contraseña. Tres o cuatro palabras sencillas unidas con signos de puntuación es un modelo bueno y robusto para las contraseñas y las frases de contraseña.

gpg --full-generate-key

gpg --full-generate-key in a terminal window

Se le pedirá que elija un tipo de cifrado de un menú. A menos que tenga una buena razón para no hacerlo, escriba 1 y pulse Enter.

Debe elegir una longitud de bits para las claves de cifrado. Pulsa Enter para aceptar la predeterminada.

preguntas de generación de claves en una ventana de terminal

Publicidad

Debes especificar cuánto tiempo debe durar la clave. Si estás probando el sistema, introduce una duración corta como 5 para cinco días. Si va a mantener esta clave, introduzca una duración más larga como 1y para un año. La clave durará 12 meses y, por lo tanto, será necesario renovarla al cabo de un año. Confirma tu elección con un Y.

Debes introducir tu nombre y tu dirección de correo electrónico. Puedes añadir un comentario si lo deseas.

preguntas de generación de claves en una ventana de terminal

Se te pedirá tu frase de acceso. Necesitarás la frase de contraseña siempre que trabajes con tus claves, así que asegúrate de saber cuál es.

ventana de frase de contraseña gpg

Haz clic en el botón OK cuando hayas introducido tu frase de contraseña. Verás esta ventana mientras trabajas con gpg, así que asegúrate de recordar tu frase de contraseña.

Publicidad

La generación de la clave se llevará a cabo, y volverás al símbolo del sistema.

Generación de claves gpg completada en una ventana de terminal

Generación de un certificado de revocación

Si tu clave privada llega a ser conocida por otros, necesitarás desvincular las claves antiguas de tu identidad, para poder generar otras nuevas. Para ello, necesitarás un certificado de revocación. Lo haremos ahora y lo almacenaremos en algún lugar seguro.

La opción --output debe ir seguida del nombre de archivo del certificado que deseas crear. La opción --gen-revoke hace que gpg genere un certificado de revocación. Debe proporcionar la dirección de correo electrónico que utilizó cuando se generaron las claves.

gpg --output ~/revocation.crt --gen-revoke [email protected]

gpg --output ~/revocation.crt --gen-revoke dave-geek@protonmail.com en una ventana de terminal

Se le pedirá que confirme que desea generar un certificado. Pulsa Y y pulsa Enter. Se le pedirá la razón por la que está generando el certificado. Como estamos haciendo esto antes de tiempo, no lo sabemos con seguridad. Pulsa 1 como una conjetura plausible y pulsa Enter.

Publicidad

Puedes introducir una descripción si lo deseas. Presione Enter dos veces para terminar su descripción.

Se le pedirá que confirme su configuración, presione Y y presione Enter.

preguntas sobre el certificado gpg en una ventana de terminal

Se generará el certificado. Verá un mensaje que refuerza la necesidad de mantener este certificado seguro.

Menciona a alguien llamado Mallory. Las discusiones sobre criptografía han utilizado durante mucho tiempo a Bob y Alice como las dos personas que se comunican. Hay otros personajes secundarios. Eve es un espía, Mallory es un atacante malicioso. Todo lo que necesitamos saber es que debemos mantener el certificado a salvo y seguro.

Publicidad

Como mínimo, eliminemos todos los permisos, aparte del nuestro, del certificado.

chmod 600 ~/revocation.crt

chmod 600 ~/revocation.crt en una ventana de terminal

Comprobemos con ls para ver cuáles son los permisos ahora:

ls -l

en una ventana de terminal

Eso es perfecto. Nadie más que el propietario del archivo -nosotros- puede hacer nada con el certificado.

Importar la clave pública de otra persona

Para cifrar un mensaje que otra persona pueda descifrar, debemos tener su clave pública.

Publicidad

Si te han proporcionado su clave en un archivo, puedes importarla con el siguiente comando. En este ejemplo, el archivo de la clave se llama «mary-geek.key»

gpg --import mary-geek.key

gpg --import mary-geek.key ina terminal window

Se importa la clave, y se muestra el nombre y la dirección de correo electrónico asociados a esa clave. Obviamente, eso debería coincidir con la persona de la que la recibiste.

clave importada con éxito en una ventana de terminal

También existe la posibilidad de que la persona de la que necesitas una clave haya subido su clave a un servidor de claves públicas. Estos servidores almacenan las claves públicas de personas de todo el mundo. Los servidores de claves se sincronizan entre sí periódicamente para que las claves estén disponibles de forma universal.

El servidor de claves públicas del MIT es un servidor de claves popular y uno que se sincroniza regularmente, por lo que la búsqueda allí debería tener éxito. Si alguien ha subido una clave recientemente, puede tardar unos días en aparecer.

Publicidad

La opción --keyserver debe ir seguida del nombre del servidor de claves que se desea buscar. La opción --search-keys debe ir seguida del nombre de la persona que buscas o de su dirección de correo electrónico. Usaremos la dirección de correo electrónico:

gpg --keyserver pgp.mit.edu --search-keys [email protected]

gpg --keyserver pgp.mit.edu --search-keys mary-geek@protonmail.com en una ventana de terminal

Las coincidencias se listan para ti y se numeran. Para importar una, escriba el número y pulse Intro. En este caso, hay una única coincidencia, así que escribimos 1 y pulsamos Enter.

gpg keyserver results in a terminal window

Se importa la clave, y se nos muestra el nombre y la dirección de correo electrónico asociados a esa clave.

Verificar y firmar una clave

Si te ha pasado un archivo de clave pública alguien conocido, puedes decir con seguridad que pertenece a esa persona. Si lo has descargado de un servidor de claves públicas, puedes sentir la necesidad de verificar que la clave pertenece a la persona a la que va dirigida.

Publicidad

La opción --fingerprint hace que gpg cree una breve secuencia de diez conjuntos de cuatro caracteres hexadecimales. Puedes pedirle a la persona que te envíe la huella digital de su clave.

Entonces puedes usar la opción --fingerprint para generar la misma secuencia de huella digital de caracteres hexadecimales y compararlos. Si coinciden, sabes que la clave pertenece a esa persona.

gpg --fingerprint [email protected]

gpg --fingerprint mary-geek@protonmail.com en una ventana de terminal

La huella digital se genera.

gpg fingerprint en una ventana de terminal

Cuando estés convencido de que la clave es genuina y es propiedad de la persona a la que se supone que está asociada, puedes firmar su clave.

Si no haces esto, puedes seguir utilizándola para cifrar y descifrar mensajes de y para esa persona. Pero gpg te preguntará cada vez si quieres proceder porque la clave está sin firmar. Utilizaremos la opción bien llamada --sign-key y proporcionaremos la dirección de correo electrónico de la persona, para que gpg sepa qué clave debe firmar.

gpg --sign-key [email protected]

gpg --sign-key mary-geek@protonmail.com en una ventana de terminal

Publicidad

Verás información sobre la clave y la persona, y se te pedirá que verifiques que realmente quieres firmar la clave. Pulsa Y y dale a Enter para firmar la clave.

confirmación de la firma de la clave gpg en una ventana de terminal

Cómo compartir tu clave pública

Para compartir tu clave como un archivo, necesitamos exportarla desde el gpg almacén de claves local. Para ello, utilizaremos la opción --export, que debe ir seguida de la dirección de correo electrónico que utilizaste para generar la clave. La opción --output debe ir seguida del nombre del archivo al que quieres exportar la clave. La opción --armor indica a gpg que genere una salida de armadura ASCII en lugar de un archivo binario.

gpg --output ~/dave-geek.key --armor --export [email protected]

gpg --output ~/dave-geek.key --armor --export dave-geek@protonmail.com en una ventana de terminal

Podemos echar un vistazo dentro del archivo de claves con less.

less dave-geek.key

Archivo de claves públicas en less en una ventana de terminal

La clave se muestra en todo su esplendor:

archivo de clave pública en less en una ventana de terminal

También puedes compartir tu clave pública en un servidor de clave pública. La opción --send-keys envía la clave al servidor de claves. La opción --keyserver debe ir seguida de la dirección web del servidor de claves públicas. Para identificar la clave que se debe enviar, se debe proporcionar la huella digital de la clave en la línea de comandos. Tenga en cuenta que no hay espacios entre los conjuntos de cuatro caracteres.

Publicidad

(Puede ver la huella digital de su clave utilizando la opción --fingerprint.)

gpg --send-keys --keyserver pgp.mit.edu 31A4E3BE6C022830A804DA0EE9E4D6D0F64EEED4

gpg --send-keys --keyserver pgp.mit.edu 31A4E3BE6C022830A804DA0EE9E4D6D0F64EEED4 en una ventana de terminal

Obtendrás la confirmación de que la clave ha sido enviada.

confirmación de que la clave ha sido enviada al servidor de claves en una ventana de terminal

Encriptando archivos

Finalmente estamos listos para encriptar un archivo y enviarlo a María. El archivo se llama Raven.txt.

La opción --encrypt le dice a gpg que cifre el archivo, y la opción --sign le dice que firme el archivo con sus datos. La opción --armor le dice a gpg que cree un archivo ASCII. La opción -r (destinatario) debe ir seguida de la dirección de correo electrónico de la persona a la que vas a enviar el archivo.

gpg --encrypt --sign --armor -r [email protected]

gpg --encrypt --sign --armor -r mary-geek@protonmail.com en una ventana de terminal

El archivo se crea con el mismo nombre que el original, pero con «.asc» añadido al nombre del archivo. Echemos un vistazo dentro de él.

less Raven.txt.asc

menos Raven.txt.asc en una ventana de terminal

Publicidad

El archivo es completamente ilegible, y sólo puede ser descifrado por alguien que tenga tu clave pública y la clave privada de Mary. La única persona que debe tener ambas debe ser María.

Contenido cifrado de raven.txt.asc en una ventana de terminal

Ahora podemos enviar el archivo a María con la seguridad de que nadie más puede descifrarlo.

Descifrar archivos

María ha enviado una respuesta. Está en un archivo cifrado llamado coded.asc. Podemos desencriptarlo muy fácilmente usando la opción --decrypt. Vamos a redirigir la salida a otro archivo llamado plain.txt.

Nota que no tenemos que decirle a gpg de quién es el archivo. Puede averiguarlo a partir del contenido cifrado del archivo.

gpg --decrypt coded.asc > plain.txt

gpg --decrypt coded.asc plain.txt en una ventana de terminal

Miremos el archivo plain.txt:

less plain.txt

menos plain.txt en una ventana de terminal

El archivo ha sido desencriptado con éxito para nosotros.

archivo descifrado en less en una ventana de terminal

Refrescar tus claves

Periódicamente, puedes pedirle a gpg que compruebe las claves que tiene contra un servidor de claves públicas y que refresque las que hayan cambiado. Puedes hacer esto cada pocos meses o cuando recibas una clave de un nuevo contacto.

Publicidad

La opción --refresh-keys hace que gpg realice la comprobación. La opción --keyserver debe ir seguida del servidor de claves de su elección. Una vez que las claves se hayan sincronizado entre los servidores de claves públicas, no debería importar cuál elijas.

gpg --keyserver pgp.mit.edu --refresh-keys

gpg --keyserver pgp.mit.edu --refresh-keys en una ventana de terminal

gpg responde listando las claves que comprueba y avisando si alguna ha cambiado y se ha actualizado.

Las claves gpg se actualizan en una ventana de terminal

La privacidad es un tema candente

La privacidad nunca está lejos de las noticias estos días. Sean cuales sean las razones por las que quieres mantener tu información segura y privada, gpg proporciona un medio sencillo para aplicar una encriptación increíblemente fuerte a tus archivos y comunicaciones.

Publicidad

Hay otras formas de utilizar gpg. Puedes conseguir un plugin para Thunderbird llamado Enigmail. Se conecta directamente a tu configuración de gpg para permitirte encriptar los mensajes de correo electrónico desde dentro de Thunderbird.

Dave McKay
Dave McKay utilizó por primera vez los ordenadores cuando la cinta de papel perforado estaba de moda, y ha estado programando desde entonces. Después de más de 30 años en la industria de la informática, ahora es un periodista de tecnología a tiempo completo. A lo largo de su carrera, ha trabajado como programador independiente, director de un equipo internacional de desarrollo de software, gestor de proyectos de servicios informáticos y, más recientemente, como responsable de protección de datos. Dave es un evangelista de Linux y defensor del código abierto.Read Full Bio »

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *