- ¿Qué es GPG?
- Consideraciones iniciales
- Cifrado simétrico
- Cifrado Asimétrico
- Creación de un par llaves
- Usando las llaves de cifrado
- Firma de archivos y mensajes
- Servidores de llaves
- Firma de llaves
- Certificado de revocación
- Otras consideraciones
- Cifremos nuestros datos
- Lista de comandos para GnuPG
- Referencias
¿Qué es GPG?
GPG -o GNU Privacy Guard– es un programa, perteneciente al proyecto GNU, que permite usar cifrado y firmas digitales al implementar el estándar OpenPG, la versión libre de PGP. Lo importante, más allá del parecido de los nombres, es que GPG, el programa que usaremos para cifrar, es software libre, lo que garantiza la transparencia de lo que dice hacer, sin perjudicar los intereses del usuario. El programa permite utilizar dos tipos de cifrado, simétrico y asimétrico, cuya descripción y usos las encontramos aquí.
Hay distribuciones GNU/Linux que incorporan de modo predeterminado GPG en su composición, como es el caso de Debian, utilizado en esta guía. Si no es así, es posible que se encuentre en los repositorios de tu distribución y puedas conseguirlo por medio del gestor de paquetes o instalando el programa desde el terminal con, por ejemplo, apt-get install gnupg2
. De todas formas, es posible averiguar en la comunidad que da soporte a nuestra distribución cómo obtener GPG en el caso de que no estuviese ya instalado.
Dependiendo de la versión de GPG que tengamos en nuestra distribución, es posible que, en vez de usar el comando gpg
, debamos emplear gpg2
para todos los ejemplos que aquí se muestran.
Consideraciones iniciales
Para el uso de GPG, se suele utilizar el terminal de comandos. Como se trata de un programa con una ejecución simple, no supone mucha complejidad. Por lo mismo, es adecuado recordar el uso de algunos comandos útiles que son necesarios para acompañar con GPG. Uno de ellos es el comando cd
que permite navegar por los directorios o carpetas del sistema. La estructura básicamente es:
cd [directorio]
Con esto, el terminal se posicionará en la dirección del directorio que se indique. Así, se puede llegar desde el terminal a la carpeta en la cual se quiere hacer uso de GPG. Es posible retroceder un directorio ingresando
cd ..
o dirigirse al directorio personal o /home
con
cd ~
Otro comando útil para trabajar en el terminal es ls
, que despliega el listado de archivos del directorio en el que nos encontramos, para poder elegir el archivo adecuado que queramos cifrar o descifrar. Por supuesto, siempre podemos verlo directamente en la carpeta abierta, fuera del terminal. Recordemos, además, que podemos completar el nombre de un archivo o directorio mientras lo escribimos y presionamos TAB
, ahorrándonos el tiempo de escribir correctamente cada nombre.
Por último, GPG posee una gran documentación de comandos que permite varias combinaciones, pueden ser consultados escribiendo gpg man
. Un listado más reducido puede ser visto con gpg -h
.
Cifrado Simétrico
Con el terminal abierto, ya es momento de cifrar. Estando en cualquier directorio, podemos cifrar cualquier archivo, ya sea un documento de texto, una imagen o una carpeta comprimida. En este caso, el ejemplo es documento.txt.
gpg -c documento.txt
gpg
indica que se está usando este programa, -c
es una opción que le señala al programa que en esta ocasión queremos cifrar el archivo de modo simétrico -solo con contraseña- y, documento.txt
es el ejemplo para el archivo sobre el cual queremos aplicar el cifrado.
Una vez ingresado, el programa pedirá que se escriba la contraseña que protegerá el archivo. Luego de hacerlo, en la misma carpeta en donde está el archivo original o en claro, se encuentra ahora el documento cifrado con la extensión .gpg
documento.txt.gpg
Este documento ya no es accesible por cualquiera, requiere el proceso de descifrado, para lo cual, nuevamente en el terminal, se debe ingresar
gpg documento.txt.gpg
En esta ocasión, no es necesaria una opción que acompañe a GnuPG, ya que es el propio programa el que identifica qué acción se quiere ejecutar en el archivo cifrado. Detectará que se trata de un archivo con cifrado simétrico por lo cual solicitará la contraseña acompañado de lo siguiente.
gpg: WARNING: no command supplied. Trying to guess what you mean ...
gpg: AES encrypted data
gpg: encrypted with 1 passphrase
En primer lugar señala que no se indicó ninguna opción, por lo que identificará qué hacer con el archivo. Posteriormente menciona el algoritmo de cifrado que se usó. En este caso AES, lo que implica que se trata de un algoritmo de cifrado simétrico y pedirá la contraseña. Con eso se extraerá el archivo original en la misma carpeta en donde se encuentra el archivo cifrado. Si ya existe, el sistema preguntará si queremos sobrescribirlo. Cabe señalar que si no nos pide la contraseña para descifrar, es porque GPG cuenta con un plazo de tiempo en que la recuerda.
Este procedimiento es todo lo que se necesita para realizar el cifrado simétrico. Ya podemos empezar a guardar mensajes o archivos, en nuestro sistema o en una memoria USB para resguardar nuestra información para que no sean legibles por nadie más, ya que sólo podrán acceder quienes conozcan la contraseña. Recordemos usar una contraseña fuerte, de al menos 20 caracteres que combinen minúsculas, mayúsculas, números y signos.
Cifrado Simétrico con armadura ASCII
Al procedimiento recién visto se le pueden agregar algunos modificaciones. Por ejemplo, si estamos interesados en que el mensaje cifrado sea compartido en formato de texto, como en un bloc de notas o en el cuerpo de un correo electrónico, simplemente se debe agregar la opción -a
, que generará un archivo de extensión .asc
que permite copiar el texto cifrado. La diferencia con un archivo cifrado con extensión .gpg
es que este se encuentra codificado en binario, mientras que los archivos cifrados con extensión .asc
, se encuentran codificados en ASCII, que contiene caracteres legibles para cualquier editor de texto.
Por ejemplo, en documento.txt está escrito “un gato sonriente”, al aplicar el siguiente comando, el resultado será un archivo .asc
que se podrá abrir como cualquier bloc de notas.
gpg -ca documento.txt
Al abrirlo como bloc de notas con un editor de textos, podremos ver que el contenido es:
-----BEGIN PGP MESSAGE-----
jA0ECQMCP13ezFwsVA7A0lMBcIwKWn4k00L/wDbL0Iv7MwleScAtQcNY7WhWuEMi
g0m6P/vwyvSvrpwhDLq6ADNMbOOKgbTg/N9stjCxelKJf95P1A/b21kfMOQbdtjz
tSmPQA==
=Ipcz
-----END PGP MESSAGE-----
La ventaja de esto es que podemos copiarlo en un correo o en un mensaje de texto, volver a ponerlo en un bloc de notas y descifrarlo con la contraseña correcta. Puedes probar con este mismo ejemplo. La contraseña es “1234”. Una contraseña para nada recomendable, pero que sirve para esta prueba.
Cifrado Simétrico usando algoritmo AES256
Otro aspecto relevante en las opciones de cifrado es el algoritmo elegido. Cuando se descifra un archivo que haya sido encriptado por tu dispositivo, GPG indicará qué algoritmo fue utilizado. Cuando lo revises en el terminal, si ese algoritmo no es AES256, Twofish o Camellia256, es preferible que sea cambiado. Si bien los algoritmos soportados por GPG son varios, AES256, Twofish y Camellia256 cuentan con claves de tamaño de 256 bits, ofreciendo bastante seguridad, siendo una de sus diferencias la cantidad de rondas de ejecución, de 14, 16 y 24 rondas respectivamente. Mientras mayor es el número de rondas, más difícil es que en el futuro puedan ser quebrados estos algoritmos, pero también implica que es relativamente más lento su procesamiento, solo perceptible al cifrar y descifrar grandes cantidades de información. Hasta el momento, ninguno ha podido ser quebrado en condiciones habituales. De los mencionados, AES es el que cuenta con mayor criptoanálisis o verificación de su seguridad, por lo que con AES256 es suficiente.
Existen dos formas de poder cifrar en AES256
- Agregando
--cipher-algo aes256
cada vez que cifremos un archivo para forzar el uso del algoritmo aes256, como en el siguiente ejemplo.gpg -c --cipher-algo aes256 [archivo]
- Cambiando la configuración predeterminada de GnuPG. Para eso hay que modificar el archivo de configuración. Con el usuario normal podemos hacerlo:
nano $HOME/.gnupg/gpg.conf
Una vez abierto el documento, debemos agregar al final del texto la siguiente línea
personal-cipher-preferences AES256
Es posible que el archivo de configuración no tenga nada o no exista, en ese caso debemos simplemente agregar la línea mencionada. Podemos usar el editor de texto que prefiramos. Si usamos Nano, debemos recordar que para guardar los cambios debemos presionar
Ctrl+o
,Enter
,Ctrl+x
. Repetimos el mismo proceso para el usuario root en caso de que lo usáramos para cifrar.sudo nano /root/.gnupg/gpg.conf
Cifrado Asimétrico
Creación de un par llaves
Para utilizar el cifrado asimétrico o de llaves, en primer lugar es necesario crear un par de llaves. Para esto, en el terminal se debe ingresar:
gpg --full-gen-key
Con ello, aparecerá la licencia del programa y luego las opciones de algoritmos que se deben elegir.
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection?
En este caso, se elegirá la opción 1, que utiliza el algoritmo RSA tanto para cifrar como para firmar archivos. Elegimos 1 y presionamos Enter
.
RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Luego de eso, se pregunta por cuál será la extensión o tamaño de las llaves que se crearán. Mientras mayor sea la cantidad de bits, más segura es la llave, aunque demore un poco más en ser generada. Por esto, ingresamos 4096
, luego Enter
.
Please specify how long the key should be valid.
0 = key does not expire
= key expires in n days
w = key expires in n weeks
m = key expires in n months
y = key expires in n years
Key is valid for? (0)
Posteriormente, se consulta el periodo de caducidad de la llave. Si bien puede ser elegido “0” para que la llave se mantenga siempre vigente, es preferible establecer una fecha de caducidad por precaución. Dejar una fecha de caducidad permite que la llave deje de tener validez automáticamente en una fecha determinada, lo que es útil si ocurriese que no podemos volver a tener acceso a ella por diversos motivos. Por ello, es preferible pensar que cada cierto tiempo debemos renovar nuestras llaves con unas nuevas o, si lo consideramos pertinente, extender el plazo de caducidad. Se debe indicar un número, seguido de la letra que indique el plazo de tiempo: días (vacío), semanas (w), meses (m), años (y).
Un plazo razonable es el de dos años, para una llave que tenga un uso constante y público. De elegir esa opción, ingresamos 2y
, Enter
. Al hacer esto, se indicará la fecha exacta en que la llave caducará y dejará de tener validez. Presionamos y
más Enter
para confirmar.
Una vez confirmado lo anterior, el programa empezará a solicitar la información que identifica de modo único a la llave, esto es: nombre, comentario y e-mail. Recordemos que el uso que le queramos dar a esta llave determinará si usamos el nombre real o un seudónimo, así como si queremos indicar un correo electrónico o no. La información de identificación que coloquemos en la llave será de acceso abierto para cualquier persona a la que entreguemos nuestra llave pública. Por esto, debemos considerar esta información como una carta de presentación. Nosotros decidimos el nivel de anonimato y la información que queremos entregar. De todos modos, podemos crear tantos par de llaves como necesidades tengamos, por lo que podemos ir probando qué identidades de cifrado nos acomodan más.
GnuPG needs to construct a user ID to identify your key.
Real name:
Ingresamos nombre, real o apodo. Luego se pedirá correo electrónico, si presionamos Enter
quedará en blanco. Finalmente es posible agregar un comentario que queramos agregar, solo si lo consideramos adecuado. Del mismo modo, si presionamos Enter
, quedará en blanco.
Una vez ingresados los datos, aparecerá un resumen y la opción de modificar algún dato. Nuestro ejemplo (ficticio) es el siguiente:
Real name: Alice
Email address: alice@disonancia.net
Comment:
You selected this USER-ID:
"Alice "
Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
Si queremos modificar algo, ingresamos la letra correspondiente al parámetro que queremos modificar y presionamos Enter
. En caso contrario, solo hay que indicar O
y luego Enter
.
Ahora, se nos pedirá la contraseña. Es de suma importancia que la contraseña sea fuerte, que combine minúsculas, mayúsculas, número y signos. Idealmente, igual o mayor a 20 caracteres. La contraseña protegerá la llave privada en caso de caer en manos inadecuada. Por este motivo, debemos usar una contraseña lo más extensa posible y, más importante aún, no compartir nuestra llave privada ni usarla en computadores de terceros o en celulares. Si nos resulta complicado memorizar una contraseña larga, se recomienda el uso de gestores de contraseña como Keepass.
Luego de ingresar la contraseña, aparecerá:
We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.
Esto indica que GnuPG está creando nuestra llave, generando números aleatorios muy grandes. Para ayudar al proceso, debemos utilizar el equipo, moviendo el mouse, navegando por los directorios, para entregar información aleatoria al procesador que permita el mayor azar posible. El proceso puede demorar bastante tiempo, sobre todo por tratarse de una llave de 4096 bits.
Finalmente aparecerá el resultado:
public and secret key created and signed.
pub rsa4096 2018-04-17 [SC] [expires: 2020-04-16]
B78465754B0578863486463269FF78743A32BACC
B78465754B0578863486463269FF78743A32BACC
uid Alice
sub rsa4096 2018-04-17 [E] [expires: 2020-04-16]
Esto indica que se ha creado el par de llaves, correspondiente a esa identidad, con su fecha de creación y expiración. Además, aparece una secuencia de 40 caracteres hexadecimales que corresponde a la “Huella digital” o fingerprint que es la identidad de nuestro par de llaves. Cuando intercambiemos llaves públicas, esta huella es la garantía de que efectivamente se trata de la llave que recibimos o la que enviamos. Existe un forma abreviada de la huella de la llave llamada ID y consiste en los últimos 16 caracteres del fingerprint; en el caso de nuestra llave es 0x29CA06B24D687E43
. El formato de la ID es mucho más cómodo que corroborar el fingerprint, no obstante, es preferible confiar únicamente en la huella digital cuando se está verificando la autenticidad de una llave.
Si queremos volver a ver nuestra llave, hay que ingresar en el terminal
gpg -k
Lo que hará aparecer el detalle de todas las llaves que se encuentren en nuestro sistema, incluyendo las propias.
Intercambiando llaves públicas
Exportar llave pública.
Para poder usar cifrado de llaves para comunicarte con otra persona o para intercambiar archivos de modo seguro, primero debemos intercambiar llaves públicas. Para hacerlo, primero hay exportar nuestra propia llave ingresando
gpg --export -a [usuario] > [nombre].asc
En donde [usuario] es el nombre de llave, que puede ser el nombre, el correo o la ID de ella. En [nombre] se escribe el nombre que tendrá el archivo de salida, por ejemplo: mi_llave. Como se trata de un archivo de texto, podemos compartir directamente el archivo creado o copiar el contenido en algún bloc de notas o enviándolo por otro medio. Nosotros, por ejemplo, tenemos el texto de nuestra llave publica disponible como texto aquí.
Una vez que compartamos nuestra llave, enviando el archivo o publicando el texto de nuestra llave, debemos asegurarnos también de informar la huella digital de nuestra llave, es decir, entregar o publicar el número de 40 caracteres que es el indicador inequívoco de que se trata de nuestra llave.
Importar llave pública
En el caso de recibir una llave pública de una persona con la que queremos comunicarnos de manera segura, debemos ingresar el siguiente comando una vez que tengamos el archivo de su llave debemos ingresar:
gpg --import [archivo de la llave]
Inmediatamente, quedará registrada la llave en nuestro sistema. Podemos revisar la información de la llave escribiendo uno de estos dos comandos.
gpg -k
o
gpg -k [identidad de la llave]
Idealmente, es preferible intercambiar presencialmente las llaves públicas con nuestro contacto para tener certeza de que se trata de la llave de la persona con la cual queremos contactar. En caso de no poder entregarse de modo presencial, y si necesitamos corroborar que efectivamente la identidad corresponda a la persona que queremos contactar, es necesario corroborar que la huella de la llave -el dígito de 40 caracteres- corresponde al que ha informado nuestro contacto, ya sea porque lo publicó en algún sitio perteneciente a él o porque nos comunicó su huella por otro medio previamente.
Exportar llave privada
Es necesario considerar un respaldo para nuestra llave privada, ya que, por pérdida del computador o daño en él, eventualmente podríamos no volver a tener acceso a nuestra llave privada, perdiendo la posibilidad de comunicarnos de modo seguro con nuestros contactos. Para evitar esta situación, es posible exportar la llave privada con el siguiente comando
gpg --export-secret-key -a [llave] > [nombre].asc
Debemos especificar la llave que exportaremos con sus datos o huella de la misma. Además, al igual que en la exportación de la llave pública, se generará un archivo con lo que hayamos elegido como nombre. Ese archivo es recomendable protegerlo con cifrado simétrico para evitar que pueda ser accesible a cualquiera, y, de ser posible, almacenarlo en una partición o dispositivo externo debidamente cifrado. Podemos usar luego un programa de borrado seguro para eliminar el archivo original creado, eliminando el rastro de la llave privada.
De este modo, si necesitamos volver usar nuestra llave a pesar de haber perdido acceso a nuestro computador, este respaldo será de ayuda. Para importarlo, se deben seguir los mismos pasos que para importar una llave pública.
Usando las llaves de cifrado
Enviando información cifrada con llaves
Ahora que contamos con una llave pública, podemos cifrar un archivo o mensaje y enviárselo a nuestro interlocutor. Para esto, debemos ingresar
gpg -e [archivo]
Luego de eso, se solicitará que indiquemos el nombre de la llave con la cual queremos cifrar. Podemos ingresar el nombre, correo o la ID de la llave, que se desprende de la Huella digital. Luego presionamos Enter
y podemos volver a cifrar con todas las llaves que queramos, lo que permite enviar un mismo mensaje o archivo cifrado para ser abierto por muchos. Una vez hayamos elegido todas las llaves públicas con las que queremos cifrar, simplemente presionamos Enter
nuevamente y se generará el archivo que debemos enviar a nuestro destinatario.
Recibir un archivo cifrado
Cuando recibimos un archivo cifrado, sólo debemos usar el comando gpg
sobre él, una vez estemos en la ubicación de dicho archivo.
gpg [archivo]
y automáticamente identificara qué tipo de cifrado es y, además, si poseemos la llave privada para poder abrirlo. Otra opción es la siguiente
gpg -d [archivo]
En ella, se descifra el archivo y, en el caso de tratarse de un texto, se visualizará en el terminal. Si el mensaje cifrado no viene en un texto y está escrito en el cuerpo de un correo, por ejemplo, debemos copiar el texto y pegarlo en un bloc de notas -o documento de texto sencillo- y luego descifrarlo.
Firma de archivos y mensajes
Si lo que se requiere es firmar el archivo que necesitamos enviar para confirmarle a nuestro destinatario que el mensaje lo enviamos nosotros, existen dos opciones. Una es firmar el mismo archivo que enviamos. En ese caso se debe escribir:
gpg -u [llave privada usada] -se [archivo]
La llave privada es la llave que se usa para firmar —la que te no debemos compartir con nadie—; podemos indicar el nombre o identidad de la misma. Como podemos tener más de una, debemos elegir cuál utiliza. El resto del procedimiento es idéntico al cifrado con llaves, la diferencia práctica es que cuando el archivo se descifre, GnuPG indicará quién firmó el archivo, si es que la persona que recibe el mensaje cuenta con nuestra la llave pública. Lo mismo se aplica para el caso en que recibimos un archivo cifrado y firmado, el cual, una vez descifrado, señalará este mensaje en el terminal.
gpg: encrypted with 4096-bit RSA key, ID 0x34EFB78465754B05 , created 2018-04-01
"Alice "
gpg: Signature made sab 05 may 2018 00:00:00 -00
gpg: using RSA key B753DD01097634EFFF00B753DD01097634EFFF00
gpg: Good signature from "Bob" [ultimate]
Primary key fingerprint: B753 DD01 0976 34EF FF00 B753 DD01 0976 34EF FF00
En este ejemplo recibimos un archivo firmado por Bob, nuestro contacto. Se observa en las primera dos líneas nuestra llave, es decir a quién se envió, y en las siguientes la información de la llave que firmó. Así, podemos corroborar, en nuestra mensajería con GPG, que efectivamente nos comunicamos con la persona que queremos. Incluso aunque los mensajes sean interceptados y modificados, siempre podremos corroborar la firma y darnos cuentas de si el remitente es el adecuado.
Otra opción es cifrar un archivo y firmarlo por separado, es decir, que exista un segundo archivo, con extensión .sig, que consista únicamente en la firma. Para esto, se debe ingresar.
gpg -sb [archivo]
De este modo, podemos enviar el archivo cifrado junto a la firma como archivo a parte. Para ser verificada esta firma, el receptor debe escribir gpg --verify
sobre la firma, que debe encontrase en la misma carpeta o directorio del archivo al cual firma.
Una de las utilidades más evidentes de generar una firma en un archivo separado es poder firmar archivos no cifrados, como en el caso de un documento que requiera certificar una autoría pero que no necesariamente deba estar cifrado.
Otra opción a tener siempre en cuenta es la posibilidad de firmar el texto de un mensaje sin cifrar. El objetivo de esto es poder publicar un mensaje legible por todos, pero que además pueda ser verificada la autoría del mismo. Es ideal para para publicar declaraciones o mensajes que no puedan ser modificados para tergiversar su contenido.
gpg -u [llave privada usada] --clearsign [archivo]
El archivo generado es un documento de texto cuyo contenido puede ser copiado y publicado en algún lugar. En el siguiente ejemplo publicamos un mensaje con nuestra firma, por lo que puede ser verificada por cualquiera que haya importado nuestra llave pública
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
El Cifrado nos protege de la vigilancia
-----BEGIN PGP SIGNATURE-----
iQJKBAEBCgA0FiEEhpEaboZrjDFZ0cvcKcoGsk1ofkMFAlveDmAWHGRpc29uYW5j
aWFAcmlzZXVwLm5ldAAKCRApygayTWh+Q7i9D/9VS9P3JurmY1jNAlbQiBVWy/31
7nAS8sRd1hPzHxHZqrkEY2T+fxKNMawGeEbV6pt7a2moC20KMXalf2ZON0FLGpqr
U1e7juWP+DxR33HWURYhAMLvqe3GeUf14i5Fv23mxBCuBsHdowVKD6ZCwlW6d1FB
SfrgqA3tHg6aVzwLIR5ls6bkOU1ygay5Q1Aq1xry57JwIMGsC15Z9rCI8kPpCBm1
DRBrISn25PGU30dsW9D/M6z/EG9iZ+w11Ib67ILnhbVUsHWP2F2jmt2qpv+e4zNT
3DbG3lpeN4P4kQrNldFbVtJ/15gUZXwwu3T3M0AZMM4XIh/D+uoE0KFOO4lm8xkO
qI1eWV6NsQPB6g3RdF0Re15G2TSPL29fHwRXDfjDM4F/EOqI53zISeHFmVhughig
m3ZEEN5E+5N0O5XOTyObxCfP3/SfDrbFkGYzy76Ifz9zhs0V89wd6oBlMoMs7kpd
54knj3sslz7Tz6asZ04bdOhqTv12L87o94n9RztokC1REfxoJZ0cP0DwN6WHw+61
mGMvuiLNsALNYV8nU1PciW3Hpo9ImBazjpzHZAGJZIgoWegwGGBN1Y+fSybEjWZW
RnOa+e7hM7Eg491bvdZCaj4duI3Yt7VwPnnps5DOAUGckTB3ZFLWE56uQsOjRubq
ltQM/FIEBz0RwHAM3w==
=IPj4
-----END PGP SIGNATURE-----
Servidores de llaves
Existen servidores de llaves que son servios en línea que permiten el almacenamiento y difusión abierta de las llaves públicas para garantizar un fácil acceso. De este modo, quienes quieran tener siempre disponibles sus llaves públicas, pueden subirlas a algún servidor de llaves, en donde se pueden buscar con los datos de la llave o por medio de un enlace.
Primero es necesario corroborar que tengamos instalado el paquete dirmngr
, que permite a GPG conectarse a internet, para lo cual podemos instalarlo con
sudo apt-get install dirmngr
Luego, si querames subir una llave al servidor predeterminado en el programa, que es keys.gnupg.net, debemos escribir lo siguiente, reemplazando la identidad de la llave según cuál sea la que queramos subir.
gpg --send-key 0x34EFB78465754B05
En el caso de que queramos especificar un servidor particular, el comando es este
gpg --keyserver hkps://hkps.pool.sks-keyservers.net --send-key 0x34EFB78465754B05
hkps.pool.sks-keyservers.net
tiene la ventaja de ser una “piscina de servidores”, es decir, una red de servidores de llaves distribuidos en todo el mundo. En caso de subir nuestra llave pública aquí, se mantendrá en esta piscina, sin importar si alguno de sus servidores se encuentra desconectado.
En el caso de querer buscar una llave en un servidor, el procedimiento es similar. Para usar el servidor predeterminado se debe ingresar
gpg --search-key [Información de búsqueda]
En información de búsqueda debemos indicar aquella información que permita identificar la llave que buscamos, puede ser un nombre, correo o, de manera preferible, la huella digital de la llave. Si se quiere seleccionar un servidor particular, entonces debemos escribir lo siguiente
gpg --keyserver hkps://hkps.pool.sks-keyservers.net –search-key 0x29CA06B24D687E43
Es preferible usar hkps en vez de hkp. La “s” indica que la conexión al servidor de llaves está cifrada. De no ser así, cada vez que se busquen, se suban o se refresquen las llaves desde nuestro sistema, cualquiera que tenga acceso a nuestra red -incluyendo nuestro proveedor de internet- sabrá con quiénes nos comunicamos. Si aparecen problemas al usar hkps, puede ser que el paquete gnupg-curl no esté instalado.
También es posible hacer la búsqueda directamente en el navegador web, en los sitios de cada servidor pueden buscarse o subirse llaves. Podemos copiar el texto de nuestra llave pública y ponerlo directamente ahí si no preferimos usar el terminal para esta labor
hkps.pool.sks-keyservers.net
Firma de llaves
Como en los servidores de llaves puede haber confusión con los nombres de las mismas o directamente poner llaves públicas con los mismos nombres de modo malicioso, GnuPG permite firmar llaves públicas, es decir, usar nuestras propias llaves para firmar y dar reconocimiento a la llave de un tercero. Esto solo es recomendable hacerlo en el caso de que poseamos una llave pública en la cual tengamos plena confianza de que corresponde a la persona u organización que dice ser, y, por supuesto, solo si esa persona quiere que su llave pública esté en un servidor.
Para firmar una llave pública de manera local se usa el siguiente comando, que permite validar una llave, pero sin que esa validación pueda subirse a un servidor; es para uso local.
gpg --lsign-key [llave a firmar]
Recordemos que, si tenemos más de una llave privada, podemos especificar qué llave usar para firmar, de manera similar a como se realiza en la firma de archivos o mensajes.
gpg -u -[ID llave propia] --lsign-key [llave a firmar]
Ahora bien, en el caso de querer subir la firma de una llave para contribuir a la validez pública de la llave que buscamos firmar, el comando es
gpg --sign-key [llave a firmar]
Cuando esa llave esté firmada, debemos enviarla al servidor en la que se encuentra para que se registre la nueva firma.
Nivel de confianza de las llaves
Por último, si en vez de firmar una llave, lo que buscamos es establecer el nivel de confianza de cada llave, lo que le indica al sistema si debe entregar advertencias respecto de su uso, debemos escribir
gpg –update-trustdb
De este modo, podremos revisar, una a una, las llaves que están en nuestro sistema y decidir su nivel de validez.
Certificado de revocación
Eventualmente puede ocurrir que alguien haya tenido acceso a nuestra llave privada o que pudo obtener de algún modo la contraseña que la protegía. En estos casos, para evitar que alguien más use nuestra llave privada y suplante nuestra identidad o descifre los mensajes que encriptamos con GPG, resulta necesario dar aviso de esta situación de modo que deje de tener validez nuestro par de llaves. Para esto debemos generar un certificado de revocación. Básicamente, es un archivo que revoca la validez de nuestras llaves al ser importado en el dispositivo en donde se encuentran; ya se en los dispositivos de tus contactos, en los servidores de llaves o en nuestro propio computador
Para generar un certificado de revocación, debemos ingresar:
gpg -ao [salida] --generate-revocation [Identidad]
“Salida” es el nombre que tendrá el archivo de revocación, e “Identidad” es la identificación de la llave privada que buscamos revocar. El archivo generado podemos importarlo en nuestro sistema y la llave será revocada escribiendo
gpg --import [nombre del archivo].asc
También podemos enviar este certificado a nuestros contactos para poder revocar la llave pública que les entregamos. Una vez revocada en nuestro dispositivo, es posible subir la llave pública revocada al servidor de llaves en el que se encontraba, de manera que nuestra llave sea marcada como revocada de ahora en adelante.
Es adecuado tener siempre guardado, de manera segura, un certificado de revocación que permita anular el uso de tu llave en caso eventual en que necesitemos revocar nuestra llave pero, a su vez, hayamos perdido el acceso a nuestro computador con la lave privada.
Del mismo modo, es posible eliminar las llaves de nuestro dispositivo, ejecutando los siguientes comandos, el primero para eliminar llaves públicas y el siguiente para privadas.
gpg --delete-keys [llave]
y
gpg --delete-secret-keys [llave]
Con el uso de estos comandos básicos ya podemos empezar a comunicarnos con nuestros contactos de manera segura con el cifrado de llaves que entrega GnuPG. Antes de utilizarlas, Planifiquemos detenidamente los perfiles de identidad que tendrán cada par de llaves, es decir, si serán publicadas o si serán de uso exclusivo de contactos cercanos.
Otras consideraciones
Configuraciones
De manera similar a cómo se cambió la configuración del programa GnuPG para usar un determinado algoritmo, es posible agregar algunas modificaciones para hacer más seguro el uso del cifrado asimétrico en nuestro sistema. Por medio del siguiente comando podemos entrar a las configuraciones
nano $HOME/.gnupg/gpg.conf
Una vez en el documento, debemos asegurarnos de que al menos se encuentran las siguientes indicaciones:
keyserver hkps://hkps.pool.sks-keyservers.net
cert-digest-algo SHA512
no-emit-version
no-comments
personal-cipher-preferences AES256 AES192 AES CAST5
personal-digest-preferences SHA512 SHA384 SHA256 SHA224
keyid-format 0xlong
with-fingerprint
keyserver hkps://hkps.pool.sks-keyservers.net
Indica el servidor de llaves predeterminado que usaremos. cert-digest-algo SHA512
fuerza el uso del algoritmo SHA512 en las auto-firmas, para aumentar su seguridad. no-emit-version
y no-comments
evitan agregar información innecesaria, que puede perjudicar nuestro anonimato, en los archivos cifrados y llaves.
En el caso de personal-cipher-preferences AES256
, explicado anteriormente, obliga al uso del algoritmo AES256 en el cifrado simétrico y personal-digest-preferences SHA512
fuerza el uso del algoritmo hash SHA512. Por su parte, keyid-format 0xlong
y with-fingerprint
permiten la visualización de la huella completa de las llaves cuando son mostradas en el terminal, debido a que la única identidad confiable de las llaves es su huella completa, el Key Fingerprint de 40 caracteres.
Edición de llaves
Hay información de las llaves, como fecha de expiración, y elementos importantes, como la contraseña, que pueden ser editados en cualquier momento. Además, editar una llave puede servir para agregar una sub llave, lo cual es útil cuando tenemos un uso avanzado de GnuPG. Para cualquiera de estas cosas, es posible escribir el comando
gpg --edit-key [llave]
Esto mostrará los datos de la llave seleccionada y el programa quedará a la espera de seleccionar qué elemento de la llave se va a editar. Para conocer los comandos adecuados que se requieren para la edición de algún aspecto, hay que escribir help
y aparecerá el listado. Siempre es posible salir del programa con Ctrl + C
.
Cifremos nuestros datos
La criptografía práctica, como la que permite GnuPG, entrega a las personas la capacidad de establecer medios de comunicación seguros sin importar qué tan inseguro es el canal utilizado, defendiéndonos de la vigilancia masiva. Del mismo modo, permite crear una comunicación plenamente autónoma dentro de un canal ya existente y perteneciente a un tercero. Con el cifrado podemos contribuir a hacer efectiva la libertad de nuestras comunicaciones y la organización segura de nuestras comunidades.
Lista de comandos para GnuPG
Función | Comando |
---|---|
Cifrado simétrico sobre archivo | gpg -c [archivo] |
Descifar archivo | gpg -d [archivo] |
Cifar simétrico con resultado en .asc | gpg -ca [archivo] |
Cifrado Simétrico en AES256 | gpg -c --cipher-algo aes256 [archivo] |
Generar par de llaves | gpg --full-gen-key |
Ver lista de llaves | gpg -k |
Exportar llave pública | gpg --export -a [usuario] > [nombre].asc |
Exportar llave privada | gpg --export-secret-key -a [user] > [nombre].asc |
Importar llave | gpg --import [archivo de la llave] |
Cifrar con llave pública | gpg -e [archivo] |
Cifrar con Ll. pública y firmar con Ll. Priv. | gpg -u [llave privada usada] -se [archivo] |
Firmar por separado | gpg -sb [archivo] |
Enviar llave a servidor | gpg --send-key [Llave] |
Buscar llave en servidor | gpg --search-key [Información de búsqueda] |
Firma local de llave pública | gpg --lsign-key [llave a firmar] |
Firma de llave pública | gpg --sign-key [llave a firmar] |
Actualizar confianza de llaves | gpg --update-trustdb |
Generar certificado de revocación | gpg -ao [salida] --generate-revocation [Nombre] |
Eliminar llave pública | gpg --delete-keys [llave] |
Eliminar llave privada | gpg --delete-secret-keys [llave] |
Editar llave | gpg --edit-key [llave] |
Consultar lista de comandos | “gpg –help ” y “man gpg ” |
Referencias
Méndez Veiga, Iyán. Microcurso para físicos y matemáticos de criptografía práctica (2016). Enlace
GNU. Guía de “Gnu Privacy Guard’’ (1999) Enlace
Riseup. Managing OpenPGP Keys. Enlace
Riseup. GPG buenas prácticas. Enlace