Capítulo 1. Primeros Pasos

Tabla de contenidos
Generar un nuevo par de claves
Intercambiar claves
Cifrar y descifrar documentos
Firmar y verificar firmas

GnuPG es una herramienta de seguridad en comunicaciones electrónicas. Este capítulo es una guía rápida que cubre las funciones básicas de GnuPG. Estas funciones incluyen generar un par de claves, intercambiar y comprobar la autenticidad de claves, cifrar y descifrar documentos, y firmar documentos y verificar firmas digitales. En este capítulo no se detallan los conceptos de la criptografía de clave pública, cifrado, y firmas digitales. Todo esto se cubrirá en detalle en el Capítulo 2. Tampoco se explica el uso avanzado the GnuPG. Esto se explica en los Capítulos 3 y 4.

GnuPG utiliza criptografía de clave pública para que los usuarios puedan comunicarse de un modo seguro. En un sistema de claves públicas cada usuario posee un par de claves, compuesto por una clave privada y una clave pública. Cada usuario debe mantener su clave privada secreta; no debe ser revelada nunca. La clave pública se puede entregar a cualquier persona con la que el usuario desee comunicarse. GnuPG implementa un esquema algo más sofisticado en el que un usuario tiene un par de claves primario, y ninguno o más de un par de claves adicionales subordinadas[1]. Los pares de claves primarios y subordinados se encuentran agrupados para facilitar la gestión de claves, y el grupo puede ser considerado como un sólo par de claves.

Generar un nuevo par de claves

La opción de la línea de órdenes --gen-key se usa para generar un nuevo par de claves primario.

javier:~$ gpg --gen-key
gpg (GnuPG) 0.9.8; Copyright (C) 1999 Free Software Foundation, Inc.
This program comes with ABSOLUTELY NO WARRANTY.
This is free software, and you are welcome to redistribute it
under certain conditions. See the file COPYING for details.

Please select what kind of key you want:
   (1) DSA and ElGamal (default)
   (2) DSA (sign only)
   (4) ElGamal (sign and encrypt)
Your selection?
GnuPG es capaz de crear varios tipos diferentes de pares de claves, pero debe existir una clave primaria capaz de generar firmas. Por lo tanto, existen sólo tres opciones. La opción 1 genera dos pares de claves. Un par de claves DSA que es el par de claves primario que se usará sólo para firmar. Un par de claves subordinadas ElGamal que se usará para el cifrado. La opción 2 es parecida a la anterior, pero sólo genera un par de claves DSA. La opción 4[2] genera un único par de claves ElGamal, que se usará tanto para firmar como para cifrar. En todos los casos existe la posibilidad de añadir subclaves adicionales para cifrar y firmar «a posteriori». La mayoría de los usuarios tienen suficiente con la opción por definición.

También hay que escoger un tamaño para la clave. El tamaño de una clave DSA debe estar entre los 512 y 1024 bits, y una clave ElGamal puede ser de cualquier tamaño. Sin embargo, GnuPG requiere que las claves no sean menores de 768 bits. Por tanto, si se escogió la opción 1 y también un tamaño de claves mayor de 1024 bits, la clave ElGamal tendrá el tamaño deseado pero la DSA se limitará a 1024 bits.

DSA keypair will have 1024 bits.
About to generate a new ELG-E keypair.
              minimum keysize is  768 bits
	      default keysize is 1024 bits
    highest suggested keysize is 2048 bits
What keysize do you want? (1024)
Cuanto más larga sea la clave, más segura será contra ataques de «fuerza bruta», pero por lo demás el tamaño de la clave que se da por definición es el adecuado, ya que sería más barato circunvalar el cifrado que intentar entrar mediante ataques de fuerza. Además, el cifrado y descifrado de mensajes se ralentizaría a medida que se incrementara el tamaño de la clave, y un tamaño de clave más grande podría afectar a la longitud de la firma digital. Una vez seleccionado, el tamaño de una clave no se puede cambiar nunca.

Para terminar, hay que escoger un fecha de caducidad. Si se escogió anteriormente la opción 1, la fecha de caducidad se usará para sendos pares de claves, ElGamal y DSA.

Requested keysize is 1024 bits
Please specify how long the key should be valid.
         0 = key does not expire
      <n>  = key expires in n days
      <n>w = key expires in n weeks
      <n>m = key expires in n months
      <n>y = key expires in n years
Key is valid for? (0)

Key does not expire at all
Is this correct (y/n)?
Para la mayoría de los usuarios, una clave sin fecha de caducidad es la adecuada. Sin embargo, si se escoge con fecha de caducidad, el tiempo para ésta debe ser escogido con cuidado, ya que, aunque es posible cambiar la fecha de caducidad posteriormente a la generación de la clave, puede ser difícil comunicar un cambio a aquellos usuarios que posean esta clave pública.

Además de los parámetros de la clave, el usuario debe dar un identificador. El identificador de usuario se usa para asociar la clave que se está creando con una usuario real.

You need a User-ID to identify your key; the software constructs the user id
from Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) <heinrichh@duesseldorf.de>"

Real name:
Email address:
Comment:
Sólo se creará un identificador de usuario al generar una clave, pero es posible crear identificadores adicionales si se desea usar la clave en dos o más contextos, v.g., si se usa por una parte en la oficina como empleado y por otra parte en casa como activista político. Hay que tener cuidado al crear un identificador de usuario, ya que después éste no puede ser editado para introducir cambios.

Aunque los caracteres especiales en iso-8859-1 son aceptados, GnuPG nos avisa si los usamos para rellenar estos campos[3]. Por ejemplo, si rellenáramos los campos con los siguientes datos,

Veríamos lo siguiente: "Javier (P\xc3\xa1ramo S.L.) <javier@mad.es>". Por tanto es mejor evitar estos carácteres.
You are using the `iso-8859-1' character set.
You selected this USER-ID:
    "Javier (Paramo S.L.) <javier@casa.es>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit?
Aún así, dependiendo de la versión que estemos usando, al listar las claves veremos una serie de carácteres extraños en lugar de vocales acentuadas, ñ, ç, etc...

GnuPG necesita una contraseña con el fin de proteger las claves privadas, primarias y secundarias, que posea el usuario[4].

You need a Passphrase to protect your private key.    

Enter passphrase: 
No hay límite para la longitud de una contraseña, y ésta debe ser escogida con sumo cuidado. Desde un punto de vista de seguridad, la contraseña que desbloquea la clave privada es uno de los puntos más débiles en GnuPG (y en otros sistemas de cifrado de clave pública), ya que es la única protección que tiene el usuario si alguien se apoderara de su clave privada. Para una contraseña lo ideal es que no se usen palabras de un diccionario, y que se mezclen mayúsculas y minúsculas, dígitos, y otros caracteres. Una buena contraseña es crucial para el uso seguro de GnuPG.
Repeat passphrase:
Como antes con los campos de identificación del usuario, las contraseñas aceptan caracteres especiales de iso-8859-1. No obstante, debemos tener en cuenta que si alguna vez tuviéramos que usar nuestra contraseña desde una máquina con un teclado distinto al nuestro, nos veríamos imposibilitados a menos que cambiáramos la configuración del sistema.

Generar un certificado de revocación

Después de haber generado un par de claves, el usuario debe, de forma inmediata, generar un certificado de revocación para la clave pública primaria, mediante el uso de la opción --gen-revoke. Si el usuario olvidara la contraseña, o si su clave privada estuviera en peligro o extraviada, este certificado de revocación podría ser hecho público para notificar a otros usuarios que la clave pública no debe ser usada nunca más. Una clave pública revocada puede ser usada para verificar firmas hechas por el usuario en el pasado, pero no puede ser usada para cifrar datos. Esto tampoco afecta a la capacidad de descifrar mensajes que hayan sido cifrados con la clave antes de su revocación, siempre y cuando el usuario todavía tenga acceso a la clave privada.

javier:~$ gpg --output D58711B7.asc --gen-revoke 0xD58711B7

sec  1024D/D58711B7 1999-09-24   Javier (Paramo S.L.) <javier@casa.es>
El argumento miclave debe ser un especificador de clave, ya sea éste el identificador de clave ("key ID") del par primario del usuario, o ya sea cualquier otra parte de un identificador de usuario ("user ID") que identifique el par de claves del susodicho usuario. El certificado que se genere se encontrará en el fichero revoke.asc. Si se omite la opción --output, el resultado se pondrá en la salida típica. Dado que el certificado es corto, es posible que el usuario desee imprimir una copia en papel del certificado para guardarla en algún sitio seguro, como por ejemplo una caja fuerte de seguridad. El certificado no debería ser guardado en lugares a los que otros puedan tener acceso, ya que cualquiera podría hacer público el certificado de revocación e inutilizar la correspondiente clave pública.

Notas

[1]

N. de T. En este y otros documentos se intercambia el término «claves subordinadas» con el de «subclaves»

[2]

La opción 3 es para generar un par de claves ElGamal que no puede ser usado para firmar.

[3]

Se aceptan excepto en la dirección de correo electrónico. En el resto pueden dar problemas, así que se recomienda no usarlos.

[4]

N. de T. Esta contraseña adopta la forma de una «frase» ("passphrase"), no de una sola «palabra» ("password").