Logo GPG

  1. ¿Qué es GPG?
  2. Consideraciones iniciales
  3. Cifrado simétrico
  4. Cifrado Asimétrico
  5. Creación de un par llaves
  6. Usando las llaves de cifrado
  7. Firma de archivos y mensajes
  8. Servidores de llaves
  9. Firma de llaves
  10. Certificado de revocación
  11. Otras consideraciones
  12. Cifremos nuestros datos
  13. Lista de comandos para GnuPG
  14. 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

  1. 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]
    
  2. 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