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.
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.
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.
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.