Gentoo Logo

Guía del usuario GnuPG de Gentoo

Contenido:

1.  Introducción

Lo que aprenderá con esta guía

Esta guía asume que está familiarizado con la criptografía de llave pública, cifrado y firmas digitales. Si no es el caso, lea el capítulo Criptografía de Llave Pública o dé una mirada al capítulo 2 del Manual de GnuPG y luego regrese a esta guía.

Esta guía le enseñará cómo instalar GnuPG, cómo crear su par de llaves, cómo agregar llaves a su anillo de llaves, cómo enviar su llave pública a un servidor de llave y cómo firmar, cifrar y verificar o decodificar los mensajes que recibe o envía. También aprenderá cómo cifrar archivos en su computadora local para prevenir que la gente vea el contenido.

Instalación del software requerido

En primera instancia necesita ejecutar emerge gnupg. Muchas aplicaciones hoy en día tienen algún grado de soporte de gpg, así que tener crypt en su variable USE es, probablemente, una buena idea. Si desea tener un cliente de correo electrónico que sea capaz de usar gnupg, puede usar pine (emerge pinepgp), mutt (emerge mutt), Mozilla Thunderbird (emerge mozilla-thunderbird), evolution (evolution es una aplicación del tipo Microsoft Outlook para GNOME) y KMail de KDE (KMail es parte del paquete kdepim).

Kgpg puede interesarle si usa KDE. Este pequeño programa le permite generar pares de llaves, importar llaves desde archivos ASCII, firmar llaves importadas, exportar llaves y unas cuantas características más.

2.  Generar su llave y agregar llaves públicas a su anillo de llaves

Crear su llave

Para crear su llave, tan sólo ejecute gpg --gen-key. La primera vez que lo haga, el programa creará algunos directorios; ejecútelo de nuevo para crear las llaves:

Listado de Código 2.1: Proceso de generación de llaves

$ gpg --gen-key
gpg (GnuPG) 1.0.7; Copyright (C) 2002 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)
  (5) RSA (sign only)
  Your selection? 1

Aquí tiene la posibilidad de elegir el tipo de llave que quiere usar. La mayoría de los usuarios elegirán la predeterminada DSA y ElGamal. Lo próximo es el tamaño, recuerde que mientras más grande es mejor, pero tampoco use llaves más grandes de 2048 con llaves DSA/ElGamal. Normalmente 1024 es más que suficiente para correos electrónicos normales.

Después del tamaño viene la fecha de expiración. Aquí mientras más pequeño es mejor, sin embargo, la mayoría de los usuarios usan llaves que nunca expiran o a lo sumo lo hacen en 2 ó 3 años.

Listado de Código 2.2: Eligir el tamaño de la llave

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) 2048
Requested keysize is 2048 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) 0
Key does not expire at all

Ahora es tiempo de ingresar alguna información personal suya. Si va a enviar su llave pública a otras personas tendrá que usar su dirección real de correo-e aquí.

Listado de Código 2.3: Ingresar información del usuario

Is this correct (y/n)? y

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: John Doe
Email address: john@nowhere.someplace.flick
Comment: The Real John Doe
You selected this USER-ID:
"John Doe (The Real John Doe) <john@nowhere.someplace.flick>"

Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? O
You need a Passphrase to protect your secret key.

Enter passphrase:

Ahora ingrese la contraseña de su llave dos veces. Es una buena idea usar una contraseña segura. Si alguien obtiene su llave privada y logra saber de alguna forma su contraseña, será capaz de enviar mensajes firmados en su nombre haciendo que todos piensen que quien lo envió fue Ud.

Luego, GnuPG generará su llave. Moviendo el ratón o reproduciendo un mp3 en segundo plano ayudará a acelerar el proceso porque esto genera datos aleatorios.

Generar un certificado de revocación

Importante: Esta parte es muy importante y debe hacerla AHORA.

Luego de crear sus llaves debería crear un certificado de revocación. Haciendo esto le permite revocar su llave en caso que algo desagradable le pase a su llave (que alguien tenga su llave privada/contraseña).

Listado de Código 2.4: Generar un certificado de revocación

$ gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub  1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick>
sub  2048g/96D6CDAD 2002-12-08

$ gpg --output revoke.asc --gen-revoke 75447B14

sec  1024D/75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhere.someplace.flick>

Create a revocation certificate for this key? y
Please select the reason for the revocation:
  0 = No reason specified
  1 = Key has been compromised
  2 = Key is superseded
  3 = Key is no longer used
  Q = Cancel
(Probably you want to select 1 here)
Your decision? 1
Enter an optional description; end it with an empty line:
> Alguien obtuvo mi llave y contraseña
>
Reason for revocation: Key has been compromised
Alguien obtuvo mi llave y contraseña
Is this okay? y

You need a passphrase to unlock the secret key for
user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"
1024-bit DSA key, ID 75447B14, created 2002-12-08

ASCII armored output forced.
Revocation certificate created.

Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable.  But have some caution: The print system
of your machine might store the data and make it available to others!

El comando gpg --list-keys muestra las llaves en su anillo de llaves públicas. Puedes usarlo para ver el ID de su llave y poder crear el certificado de revocación. Ahora es un buen momento para copiar todo el directorio .gnupg y el certificado de revocación (en escudo ASCII - revoke.asc) a un medio seguro (dos disquetes o un CD-R que guarde en un lugar seguro). Recuerde que puede usar revoke.asc para revocar sus llaves y hacerlas inusables en el futuro.

Nota: Si tiene varias direcciones de correo electrónico que quiera usar con esta llave, puede ejecutar gpg --edit-key SU_ID y luego usar el comando adduid. Le preguntará por el nombre, e-mail y un comentario para la segunda ID que usará.

Exportar llaves

Para exportar su llave, tipee gpg --armor --output john.asc --export john@nowhere.someplace.flick. Casi siempre puede usar el ID de la llave o algo que identifique la llave (aquí usamos una dirección de e-mail). John tiene ahora un archivo john.asc que puede enviar a sus amigos, o poner en su sitio web para que la gente se comunique de forma segura con él.

Importar llaves

Para agregar archivos a su anillo de llaves públicas, primero debe importarlas, luego comprobar la huella digital de la llave. Y después de verificar la huella digital debe validarla.

Nota: Sea cuidadoso cuando verifique las llaves. Este es uno de los puntos débiles de la criptografía de llave pública.

Ahora agregaremos la llave pública de Luis Pinto (un amigo mío) a nuestro anillo de llaves públicas. Luego de haberlo llamado por teléfono y de haberle preguntado por su huella digital, comparo la huella con la salida del comando fpr. Como la llave es auténtica, la agrego al anillo de llaves públicas. En este caso particular, la llave de Luis expira el 2003-12-01 entonces se me preguntará si quiero que mi firma en su llave expire en el mismo día.

Listado de Código 2.5: Importar y firmar llaves

$ gpg --import luis.asc
gpg: key 462405BB: public key imported
gpg: Total number processed: 1
gpg:               imported: 1
$ gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub  1024D/75447B14 2002-12-08 John Doe (The Real John Doe) <john@nowhere.someplace.flick>
sub  2048g/96D6CDAD 2002-12-08

pub  1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@student.dei.uc.pt>
uid                            Luis Pinto <lmpinto@dei.uc.pt>
sub  4096g/922175B3 2002-12-01 [expires: 2003-12-01]

$ gpg --edit-key lmpinto@dei.uc.pt
gpg (GnuPG) 1.0.7; Copyright (C) 2002 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.


gpg: checking the trustdb
gpg: checking at depth 0 signed=0 ot(-/q/n/m/f/u)=0/0/0/0/0/1
pub  1024D/462405BB  created: 2002-12-01 expires: 2003-12-01 trust: -/-
sub  4096g/922175B3  created: 2002-12-01 expires: 2003-12-01
(1)  Luis Pinto <lmpinto@dei.uc.pt>
(2). Luis Pinto <lmpinto@student.dei.uc.pt>

Command> fpr
pub  1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@dei.uc.pt>
Fingerprint: F056 3697 ADE3 CF98 B80B  8494 0AD3 E57B 4624 05BB
Command> sign
Really sign all user IDs? y

pub  1024D/462405BB  created: 2002-12-01 expires: 2003-12-01 trust: -/-
Fingerprint: F056 3697 ADE3 CF98 B80B  8494 0AD3 E57B 4624 05BB

    Luis Pinto <lmpinto@dei.uc.pt>
    Luis Pinto <lmpinto@student.dei.uc.pt>

This key is due to expire on 2003-12-01.
Do you want your signature to expire at the same time? (Y/n) Y
How carefully have you verified the key you are about to sign actually belongs
to the person named above?  If you don't know what to answer, enter "0".

    (0) I will not answer. (default)
    (1) I have not checked at all.
    (2) I have done casual checking.
    (3) I have done very careful checking.

    Your selection? 3
Are you really sure that you want to sign this key
with your key: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"

I have checked this key very carefully.

Really sign? y

You need a passphrase to unlock the secret key for
user: "John Doe (The Real John Doe) <john@nowhere.someplace.flick>"
1024-bit DSA key, ID 75447B14, created 2002-12-08

Command> check
uid  Luis Pinto <lmpinto@dei.uc.pt>
sig!3       462405BB 2002-12-01   [self-signature]
sig!3       75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhe
uid  Luis Pinto <lmpinto@student.dei.uc.pt>
sig!3       462405BB 2002-12-01   [self-signature]
sig!3       75447B14 2002-12-08   John Doe (The Real John Doe) <john@nowhe

3.  Intercambiar llaves con servidores de llaves

Enviar llaves a servidores de llaves

Ahora que tiene su llave, es buena idea enviarla a un servidor de llaves. Hay un montón de servidores de llaves en el mundo y muchos de ellos intercambian llaves entre ellos. Vamos a enviar la llave de Luis al servidor subkeys.pgp.net. Este usa HTTP, o sea que si necesita usar un proxy para el tráfico HTTP no olvide de configurarlo (export http_proxy=http://proxy_host:port/). El comando para enviar llaves es: gpg --keyserver subkeys.pgp.net --keyserver-options honor-http-proxy --send-key 75447B14 donde 75447B14 es el ID de la llave. Si no necesita un proxy HTTP puede quitar la opción --keyserver-options honor-http-proxy.

Puede también enviar las llaves de otras personas que ha firmado al servidor de llaves. Podríamos enviar la llave de Luis Pinto al servidor. De esta forma alguien que confía en tu llave puede usar la firma que pusimos ahí para confiar en la llave de Luis.

Obtener llaves desde los servidores de llaves

Ahora buscaremos la llave de Gustavo Felisberto y agregarla al anillo de llaves de John Doe (sólo en el caso que no se haya enterado que Gustavo Felisberto es la persona que escribió esta guía :) ).

Listado de Código 3.1: Buscar llaves en los servidores de llaves

$ gpg --keyserver subkeys.pgp.net --keyserver-options honor-http-proxy --search-keys humpback@felisberto.net
gpg: searching for "humpback@felisberto.net" from HKP server subkeys.pgp.net
Keys 1-5 of 5 for "humpback@felisberto.net"
(1)Gustavo Felisberto (apt-get install anarchy) <humpback@felisberto.net> 1024
  created 2002-12-06, key B9F2D52A
(2)Gustavo Felisberto <humpback@altavista.net> 1024
  created 1999-08-03, key E97E0B46
(3)Gustavo A.S.R. Felisberto <humpback@altavista.net> 1024
  created 1998-12-10, key B59AB043
(4)Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024
  created 1998-08-26, key 39EB133D
(5)Gustavo Adolfo Silva Ribeiro Felisberto <humpback@altavista.net> 1024
  created 1998-06-14, key AE02AF87
  Enter number(s), N)ext, or Q)uit >1
gpg: requesting key B9F2D52A from HKP keyserver subkeys.pgp.net
gpg: key B9F2D52A: public key imported
gpg: Total number processed: 1
gpg:               imported: 1

Como puede ver desde la respuesta del servidor tiene un par de llaves enviadas al servidor de llaves, pero actualmente sólo usa B9F2D52A. Ahora John Doe podrá obtenerla y firmarla si confía en ella.

4.  Usar un Agente GPG

¿Qué es un Agente GPG?

Hay casos cuando se está trabajando con ciertas aplicaciones donde usa su llave GPG muy frecuentemente, lo que significa debe tipear su contraseña muchas veces. Diversas aplicaciones solían ofrecer un mecanismo de caching de la contraseña para facilitar la vida de los usuario, esto sin embargo, inhabilitaba el compartir este caché con otros programas (¿cuán seguro sería esto?) y forzaba a las aplicaciones a reinventar la rueda una y otra vez.

Un agente GPG es una aplicación separada que GPG usa para mantener en caché la contraseña de forma estándar y segura. Permite a las aplicaciones usar GPG concurrentemente: si ingresa su contraseña mientras trabaja en una aplicación, otra puede trabajar con GPG sin pedir reiteradamente la contraseña para acceder a la llave - si el agente GPG se configura para eso, por supuesto.

Gentoo proporciona algunas aplicaciones de agentes GPG. app-crypt/gnupg-1.9.* se puede considerar como referencia, y será la que usemos en este documento.

Instalar y configurar gpg-agent y pinentry

Debería instalar, gnupg-1.9.* el cual incluye gpg-agent, y pinentry. pinentry es la aplicación auxiliar que usa el gpg-agent para pedir la contraseña en una ventana gráfica. Viene en tres sabores: puede que haga aparecer una ventana emergente usando gtk+, Qt o la biblioteca curses (dependiendo de la bandera USE que configuró cuando lo instaló con emerge).

Listado de Código 4.1: Instalar gpg-agent y pinentry

# emerge \>=gnupg-1.9.20 pinentry

A continuación, cree un archivo llamado ~/.gnupg/gpg-agent.conf e ingrese las siguientes líneas que definen el timeout por defecto de la contraseña (por ejemplo, 30 minutos) y la aplicación que será llamada cuando la contraseña sea recuperada la primera vez (por ejemplo, la versión Qt de pinentry).

Listado de Código 4.2: Editar ~/.gnupg/gpg-agent.conf

pinentry-program /usr/bin/pinentry-qt
no-grab
default-cache-ttl 1800

Ahora configure GnuPG para que use un agente cuando sea apropiado. Edite ~/.gnupg/gpg.conf y agregue la siguiente línea:

Listado de Código 4.3: Configurar GnuPG para usar un Agente GPG

use-agent

Ahora su sistema está (casi) listo para usar el agente GPG.

Iniciar automáticamente el agente GPG

Si usa KDE como ambiente gráfico, edite /usr/kde/3.x/env/agent-startup.sh (a nivel de todo el sistema) o ~/.kde/env/gpgagent.sh (a nivel de usuario local) y agregue el siguiente comando para que KDE inicie automáticamente el agente GPG:

Listado de Código 4.4: Configurar KDE para inicie automáticamente el agente GPG

eval "$(gpg-agent --daemon)"

Si usa un ambiente distinto, coloque dicha línea mencionada arriba en ~/.xinitrc (si usa startx) o ~/.xsession (si usa XDM/GDM/KDM/...).

5.  Trabajar con documentos

Cifrar y firmar

Digamos que tiene un archivo que quiere enviar a Luis. Puede cifrarlo, firmarlo, o cifrarlo y firmarlo. Cifrarlo significa que sólo Luis podrá abrirlo. La firma le dice a Luis que fue realmente Ud. quien creó el archivo.

Los siguientes tres comandos harán sólo eso, cifrar, firmar y cifrar/firmar.

Listado de Código 5.1: Cifrar y firmar los archivos

$ gpg --output doc.gpg --encrypt --recipient lmpinto@dei.uc.pt documento_a_cifrar
$ gpg --output doc.gpg --sign --recipient lmpinto@dei.uc.pt documento_a_firmar
$ gpg --output doc.gpg --encrypt --sign --recipient lmpinto@dei.uc.pt documento_a_cifrar_y_firmar

Esto creará archivos binarios. Si desea crear archivos ASCII, sólo agregue el parámetro --clearsign al principio del comando

Descifrar y verificar firmas

Suponga que ha recibido un archivo que está cifrado El comando para descifrarlo es gpg --output document --decrypt documento_cifrado.gpg. Esto descifrará el documento y verificará la firma (si es que hay una).

Encriptando y descifrando sin claves

Es posible encriptar archivos usando contraseñas en vez de claves. La contraseña funcionará como clave y será utilizada como encriptado simétrico. Se puede encriptar el archivo usando el parámetro --symmetric del comando gpg; el descifrado usa el mismo comando.

Listado de Código 5.2: Encriptando archivos con una contraseña

$ gpg --output document.gpg --symmetric document
(GnuPG pedirá una una contraseña y su verificación)

Características avanzadas

Hay algunas agradables características avanzadas en GnuPG. Para encontrarlas, abra el archivo ~/.gnupg/gpg.conf.

Listado de Código 5.3: ~/.gnupg/gpg.conf

#keyserver x-hkp://subkeys.pgp.net
#keyserver-options auto-key-retrieve include-disabled include-revoked

Busque las dos líneas anteriores y descoméntelas. Con esto, cada vez que GnuPG necesite chequear un firma y no encuentre la llave pública en el anillo de llaves local, contactará al servidor de llaves en subkeys.pgp.net e intentará obtenerla desde ahí.

Otro buen comando es gpg --refresh-keys. Este contactará el servidor de llaves definido en el archivos de opciones y actualizará las llaves públicas en su anillo de llaves local a partir de ahí, buscando llaves revocadas, nuevos identificadores, nuevas firmas en llaves. Probablemente debería ejecutar esto una o dos veces al mes así puede saber si alguien revocó su llave.

6.  Interfaces GnuPG

Acerca de las firmas de correo electrónico

El 95 % del tiempo usará GnuPG con el correo, firmando/cifrando sus mensajes saliente y leyendo mensajes firmados/cifrados. Así que es justo que hablemos acerca de lo primero.

Existen dos formas de firmar/cifrar un correo electrónico con GnuPG, la antigua y nueva forma :). En la antigua, los mensajes aparecían en texto plano sin formateo posible y los archivos adjuntos estaban sin firmar o sin cifrar, a continuación hay un ejemplo de un mensaje firmado a la antigua:

Listado de Código 6.1: Una firma en texto plano

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Test message

-----BEGIN PGP SIGNATURE-----
Version: PGPfreeware 6.5.8 for non-commercial use

iQA/AwUBP8461jMX0745gR7AEQIEOwCg011GbufXO3ED3FkLWXmfzg7xm1cAoJD0
0EU3Kd2EKNCqataEqM5qjpPs
=LchZ
-----END PGP SIGNATURE-----

Mensajes como este no son buenos en el mundo de hoy, donde tenemos agradables interfaces de usuario gráficas y lectores de correo que entienden HTML.

Para solucionar esto se creó un extensión a MIME (Extensiones de Correo de Internet Multipropósito). Esto añade un campo al correo que le notifica al programa lector que el contenido completo del mensaje está firmado y/o cifrado. El problema con esto es que no todos los lectores de correo lo soportan. Y en algunos casos desordena el contenido, el programa Microsoft Outlook es famoso por no funcionar con esto.

Kgpg

kgpg es una agradable GUI para GnuPG. En la pantalla principal puede pegar el texto que desea firmar o cifrar, y también puede pegar el texto con armadura ASCII que desea descifrar.


Ilustración 6.1

Fig. 1: Pantalla principal de kgpg

En esta imagen puede ver la ventana principal de Kpgp con el texto con armadura ASCII y texto cifrado pegado en ella. Desde aquí puede descifrarlo (tendrá que suministrar su contraseña), cifrar otros archivos, pegar nuevo texto para firmar ...


Ilustración 6.2

Fig. 2: Ventana de administración de llaves kgpg

Ahora puede ver la ventana de administración de llaves. Desde aquí podemos ver nuestra llave correcta para John Doe. Las dos llaves de confianza de Gustavo y Luis, y la llave sin confianza de Daniel Robbins (sigo sin llamarlo para preguntarle su huella de la llave :) ).

Seahorse

Seahorse apunta a ser una interfaz GUI de GnuPG para el escritorio Gnome. El software ha evolucionado rápido, pero aún carece de muchas características importantes que pueden ser encontradas en Kgpg o en la versión de línea de comandos.

Enigmail

Enigmail es un "plug-in" para los clientes de correo electrónico basados en Mozilla (tales como Thunderbird y Seamonkey) que es bastante sencillo de configurar. En Seamonkey, basta con ir a Preferences -> Privacy & Security -> Enigmail. Allí ingresa la llave del correo y eso es todo. Primero, debe hacer emerge enigmail para usarlo con Thunderbird. Luego puede configurarlo yendo a Edit -> Account Settings -> OpenPGP Security.

Los correos que llegan con una firma pgp o gpg que no es confiable serán marcados con un bolígrafo roto. Otros que tengan firmas correctas aparecerán con un lindo bolígrafo entero. Enigmail además viene con la posibilidad de obtener llaves desde servidores de llaves, pero si tiene problemas imprimirá algunos mensajes muy raros (pero todavía recuerda cómo usar la línea de comandos, ¿cierto?).

KMail

Si tiene configurada la bandera USE crypt, KMail será compilado con soporte gpg y será capaz de cifrar y descifrar correos PGP "inline" así como cifrar correos OpenPGP/MIME. Si quiere también descifrar correos OpenPGP/MIME (probablemente sí) necesita tener un agente GPG funcional (vea Usando un Agente GPG).

Puede verificar si KMail está configurado apropiadamente yendo a Settings, Configure KMail, Security, Crypto Backends. Debería ver un entorno basado en GpgME y ser capaz de marcar la casilla OpenPGP. Si está listada pero en color gris, haga un click en Rescan. Si el entorno permanece grisáceo significa que KMail no está funcionando correctamente.

Si aún es incapaz de hacer funcionar correctamente KMail, por favor vea el KMail PGP HowTo para más información.

Claws-Mail

Este lector de correos es muy rápido con buzones de correo grandes, tiene todas las agradables característica que uno quiere en un programa de este tipo y funciona bastante bien con gpg. El único problema es que no funciona con las firmas PGP de antaño, así que cuando recibe correos de ese tipo tiene que chequear manualmente las firmas.

Para usar su llave gpg con Claws-Mail sólo vaya a la configuración de la cuenta y seleccione la pestaña "privacy". Una vez ahí, elija qué llave va a usar, la mayoría de los usuarios probablemente irá por la llave por defecto.

7.  Criptografía de llave pública

Criptografía de llave pública básica

El concepto de criptografía de llave pública fue originalmente ideado por Whitfield Diffie y Martin Hellman in 1976. Cuando escuché por primera vez las palabras "llave pública" y "criptografía" en la misma oración en el '93, pensé a mi mismo que sería imposible hacer aquello. En ese entonces no había Internet (bueno había, pero no para mí) así que fui a la biblioteca pública y pregunté por libros acerca de Criptografía. Debo decir que tenía 16 años así que el encargado me miró con asombro y me trajo un libro para niños sobre cifradores por substitución (esos en que uno cambia una letra por otra como el famoso Cifrador de César o ROT-13 (Tragbb rf yb zrwbe, l fnor dhr rf ohrab cbedhr rfgn yrlraqb rfgr qbphzragb., (instale rotix si es que no puede leer el texto anterior)). Me enojé mucho por esta situación y empecé la búsqueda de más información al respecto. Es bueno tener matemáticos en la familia, porque tan pronto hablé con uno de ellos, me vi metido en un nuevo mundo.

Ahora, veamos un poco de matemáticas:

Listado de Código 7.1: Conceptos matemáticos

Definiciones:

1- Un número primo es un número entero positivo mayor que 1 que es sólo
divisible por 1 y por sigo mismo (El resto de la división es 0).
Los primeros 8 números primos son 2,3,5,7,11,13,17,19.

Teorema (No se demuestra aquí)
1- Para cualquier número no primo entero positivo es posible separarlo como el
producto de números primos, y aquel producto es único.
4=2*2
6=2*3
8=2*4=2*2*2
10=2*5
12=2*6=2*2*3

"Hechos":
1- Es matemáticamente fácil multiplicar dos enteros grandes.
2- Es difícil encontrar los factores primos dado un entero positivo.

Si le doy el número 35 y le digo que este número es el producto de dos números primos, es fácil encontrar que son el 5 y 7. Pero si le digo lo mismo para el número 1588522601 gastará un montón de tiempo (o ciclos de CPU) para encontrar que era 49811*31891. Y si este número es realmente grande la tarea se vuelve "imposible". Así que ahora si le digo al mundo el número más grande que conozco y que es el producto de dos primos sé entonces algo acerca de ese número que nadie más conoce.

Esta es la base de las implementaciones de hoy en día de Criptografía de Llave Pública (PKC en inglés). Como ejemplo, no realista, le doy a alguien mi número y que aquella persona usará para cifrar un mensaje para mi. Cualquier persona puede ver el mensaje cifrado porque soy el único que sabe un atajo para leerlo, cualquier otra persona tendría primero que "dividir" el número grande para ser capaz de leer el mensaje, y es un "hecho" que es imposible de hacer eso en un periodo corto de tiempo (los métodos actuales y las computadoras más rápidas del mundo tomarían miles de años en hacerlo). En esta configuración los dos números primos grandes serían llamados la "LLAVE PRIVADA" y el número grande no primo es la "LLAVE PÚBLICA".

En la práctica esto no es un 100% acorde a la realidad, pero le dará una buena idea al neófito. Puede encontrar más información en Wikipedia sobre el protocolo de Diffie-Hellman. Si está interesado, vaya a una biblioteca pública y obtenga una copia del libro "Handbook of Applied Cryptography" escrito por Alfred J. Menezes, Paul C. van Oorschot and Scott A. Vanstone, este libro también está disponible en línea sin costo alguno en el sitio mencionado anteriormente.

Como consecuencia de lo descrito más arriba, si cifra un mensaje para mi y pierde el mensaje original no cifrado no será capaz de recuperarlo a partir de la versión cifrada.

Firmas

Ya vimos cómo alguien puede enviarnos un mensaje cifrado si tiene su llave pública. Pero, ¿Cómo sabemos que el autor del mensaje es realmente quien dice ser?. En otras palabras: Si recibo un mail suyo, ¿Cómo se que es realmente suyo y no otra persona que trata de suplantarlo?

¿Recuerda que le mencioné que la PKC no era tan simple como había dicho? La idea es que cuando cifre un mensaje dirigido a mi, tiene que firmarlo con su llave privada para que, cuando lo reciba pueda usar su llave pública para verificar su firma y luego usar mi llave privada para descifrar el mensaje. Como puede ver, no podríamos hacer eso con la configuración descrita arriba.

También es muy importante lo siguiente, para firmar mensajes no tiene que cifrarlos antes. Así que puede crear mensajes que pueden ser leídos por cualquiera pero que vengan con su "marca". Y si algún caracter cambió en el mensaje, éste puede (y será) detectado.

Servidores de llaves y llaves firmadas

Digamos que no tenga contacto previo con Ud. hasta que me envía un mensaje, la pregunta es ¿Cómo obtengo su llave pública? y ¿Cómo se que realmente es suya?

Para resolver este problema se crearon los Servidores de llaves. Cuando crea su par de llaves (pública y privada), debería enviar su llave pública al servidor de llaves. Luego de esto, cualquier persona puede recuperarla desde ahí. Esto resuelve el problema de encontrar la llave. Pero ¿Cómo sé realmente que la llave corresponde a la llave del autor del mensaje? Para esto, se introduce otro concepto, y es el de firmado de llaves:

Firmar una llave significa que, si tiene la llave pública de otra persona, y sabe con seguridad que realmente es la llave de la persona (es su amigo personal, alguien que conoce en la vida real, etc.) puede firmar la llave pública y enviarla a los servidores de llaves, de esa manera estará diciéndole al mundo: "Esta llave realmente pertenece a la persona que dice ser". Así, las personas que tengan su llave pública puede usar esa "confianza" para, valga la redundancia, confiar en otras llaves.

Esto algunas veces puede causar confusión, así que veamos una situación real:

Imaginemos una situación en que participan 3 personas: Juan, María y Lisa. Juan es un buen amigo de María pero no conoce a Lisa; Lisa es buena amiga de María pero no conoce a Juan. Un día Lisa le envía a Juan un correo firmado. Juan recuperará la llave pública de Lisa desde algún servidor de llaves y chequeará el mensaje, si todo marcha bien él verá que quien haya creado el mensaje también creó la llave. Pero, ¿Cómo sabe que es realmente la persona que dice ser?

Juan entonces ve que la llave está firmada por María, puede chequearlo porque ya tiene la llave de María y confía en esa llave. Con este anillo de confianza, Juan puede concluir que el correo que recibió realmente fue escrito por Lisa.

Ahora está listo para usar esta guía, vuelva al Capítulo 1 y aprenda a cómo usar gpg.

8.  Consideraciones finales y créditos

Algunos problemas

Tuve algunos problemas con fotos en las llaves. Verifique la versión que está usando. Si tiene la versión GnuPG 1.2.1-r1 o mayor probablemente no tenga problemas, versiones más viejas pueden tenerlos. A muchos servidores de llaves tampoco le gustan mucho las llaves con fotos.

Las últimas versiones de gnupg no parecen funcionar con el comando gpg --send-keys que fue usado para enviar todas las llaves de su anillo al servidor de llaves.

¿Qué es lo que no hay aquí?

gpg es una herramienta muy compleja, le permite hacer mucho más de lo cubierto aquí. Este documento es para el usuario que es nuevo en GnuPG. Para más información, deberá leer el sitio Web de GnuPG.

No se escribió de otras herramientas como pgp4pine, gpgpine, evolution o tal vez herramientas para Windows, probablemente se extienda este documento en el futuro.

Créditos

El Manual de GnuPG de John Michael Ashley es muy buen libro para los principiantes.

Swift (Sven Vermeulen) por motivarme a reescribir esta guía.

A todos los integrantes del canal de IRC #gentoo-doc.

Gracias a Tiago Serra por apoyarme en el estudio de la privacidad.



Imprimir

Actualizado 29 de diciembre, 2007

Sumario: Esta pequeña guía le enseñará lo básico del uso de GnuPG, una herramienta para el cifrado seguro.

Gustavo Felisberto
Author

John P. Davis
Editor

Sven Vermeulen
Editor

José Alberto Suárez López
Traductor

John Christian Stoddart
Traductor

Andrés Pereira
Traductor

Manuel Peral González
Traductor

Donate to support our development efforts.

Support OSL

Support OSL

Gentoo Centric Hosting: vr.org

VR Hosted

Tek Alchemy

Tek Alchemy

SevenL.net

SevenL.net

Global Netoptex Inc.

Global Netoptex Inc.

Linux World Expo

Linux World Expo

Copyright 2001-2008 Gentoo Foundation, Inc. Questions, Comments? Contact us.