GnuPG o GPG Es una herramienta basada en la implementación del estándar OpenPGP en el RFC 4880 del Internet Engineering Task Force (IETF). Esta herramienta permite la encriptación y la utilización de firmas digitales para asegurare de tener una comunicación segura. Cuenta con un sistema de gestión de llaves versátil. GPG es comúnmente incluido en los sistemas operativos GNU/Linux, y es integrado dentro de otras herramientas o incluso plugins para navegadores. Aunque también puede ser compilado en otros sistemas operativos privativos.

GnuPG es software libre, puede ser usado, modificado y distribuido bajo los términos de la licencia GNU General Public License (GPL).

Se basa en  la utilización de criptografía asimétrica y la manipulación de llaves. Esta herramienta cifra los documentos y/o mensajes usando un par de llaves, una pública y un privada, estas claves son individuales y asimétricas, la clave que es pública se utiliza para distribuir a las personas con las cuales se intercambian los documentos. Aunque también permite sistemas de cifrado simétrico o híbrido.

Una firma digital es utilizada para verificar que el autor es quien dice ser, y que el archivo no ha sido modificado desde que se firmó. Para la creación y verificación de firmas, se utiliza el par público y privado de claves en una operación que es diferente a la de cifrado y descifrado.

Generar un nuevo par de claves

Para generar un nuevo par de claves escribimos la siguiente orden:

$ gpg --gen-key

gpg (GnuPG) 2.0.24; Copyright (C) 2013 Free Software Foundation, Inc.

This is free software: you are free to change and redistribute it.

There is NO WARRANTY, to the extent permitted by law.




Por favor seleccione tipo de clave deseado:

  (1) RSA y RSA (por defecto)

  (2) DSA y ElGamal

  (3) DSA (sólo firmar)

  (4) RSA (sólo firmar)

Su elección:

Debemos seleccionar el tipo el o los algoritmos que se van a utilizar para cifrar y firmar, en este caso dejamos la opción por defecto RSA y RSA, esto quiere decir que utilizaremos el algoritmo criptográfico de llave pública RSA definido en el RFC 8017 en su versión 2.2 para generar nuestras llaves, cifrar y firmar documentos. Y se obtiene la siguiente salida

as claves RSA pueden tener entre 1024 y 4096 bits de longitud.
¿De qué tamaño quiere la clave? (2048)

Nos pregunta el tamaño de la clave, entre mas larga se tiene mayor seguridad, por lo general se deja la opción por defecto.

Por favor, especifique el período de validez de la clave.
         0 = la clave nunca caduca
      <n>  = la clave caduca en n días
      <n>w = la clave caduca en n semanas
      <n>m = la clave caduca en n meses
      <n>y = la clave caduca en n años
¿Validez de la clave (0)?

En este paso podemos configurar dentro de cuanto tiempo caduca la clave, o si no caduca que es la opción por defecto. Por ejemplo si queremos que caduque en tres semanas se ingresa 3w.

A continuación se realiza la confirmación llenamos nombre, apellidos, email y un comentario que nos servirá para incluir en la firma digital, por ejemplo Estudiante de ingeniería de sistemas.  Después nos pedirá una contraseña, esta es una frase y no un palabra como estamos acostumbrados para añadir mayor seguridad.

Intercambio de llaves.

Para el intercambio de llaves es importante asegurarse de que se hace de una forma segura, ya que si estos son interceptados por un tercero, este tendrá la capacidad de utilizarlas suplantando la identidad del titular de la llave.

Para exportar una llave pública generamos un archivo con extensión .gpg utilizando los comandos –output (especifica el nombre del archivo que se va a obtener) y –export seguido del correo con el cual esta registrada la llave.

$ gpg --output archivo.gpg --export correo@ccorreo.com

o

$ gpg --output archivo.gpg --export -a “Nombre de Usuario"

Para exportar una llave secreta se utliza el comando –export-secret-key

$ gpg --output llaveSecreta.gpg --export-secret-ket correro@correo.com

El archivo que generamos lo compartimos para que otras personas lo importen. Para importar llave utilizamos la instrucción –import seguido del archivo.

$ gpg --import archivos.gpg

Cifrar y descifrar documentos

Para cifrar un documento se usa la opción –encrypt

$ gpg --output doc.gpg --encrypt --recipient correo@ccorreo.com doc

El parámetro –output especifica el nombre del documento cifrado que se obtiene, –recipient seguido del correo del destinatario del documento, para esto de debió importar la llave pública previamente, y al finalizar la instrucción el documento de entrada que se va a cifrar.

Para descifrar utilizamos  el comando –decrypt

$ gpg --output doc --decrypt doc.gpg

Para esto se necesita tener la clave privada del destinatario para el cual se cifro el documento.

Firmar y verificar firmas

Utilizamos la orden –sign para firmar un documento.

$ gpg --output doc.sig --sign doc

Al igual que en el cifrado El parámetro –output especifica el nombre del documento firmado que se obtiene, doc nombre del documento a firmar.

Para sólo verificar se utiliza el comando –verify para descifrar y extraer el documento usamos la orden –decrypt, para esto último el archivo debe estar firmado y  cifrado.

$ gpg --output doc --decrypt doc.gpg

$ gpg --output doc --verify doc.sig

Otros comandos útiles

Eliminar una clave privada:

$ gpg --delete-secret-key correo@correo.com

Eliminar una llave pública, hay que tener en cuenta que si hay una llave privada asociada a la llave pública generará error, hay que eliminar primero la llave privada:

$ gpg --delete-key correo@correo.com

Listar las llaves públicas:

$ gpg --list-keys

Listar llaves privadas:

$ gpg --list-secret-keys

Referencias

The Free Software Foundation, Guía de ”Gnu Privacy Guard”

https://www.gnupg.org/gph/es/manual/book1.html