GnuPG

From Gentoo Wiki
Revision as of 14:42, 27 April 2014 by FuzzyBot (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
Other languages:English 100% • ‎español 100% • ‎français 1% • ‎italiano 19% • ‎한국어 100% • ‎русский 100% • ‎中文(中国大陆)‎ 32%

Esta pequeña guía le enseñará lo básico del uso de GnuPG, una herramienta para comunicaciones seguras.

Introducción

Lo que aprenderá en esta guía

Esta guía asume que está familiarizado con la criptografía de clave pública, cifrado y firmas digitales. Si no es el caso, eche un vistazo al manual de GnuPG, capítulo 2, y luego vuelva a esta guía.

Esta guía le enseñará cómo instalar GnuPG, cómo crear su par de claves, cómo agregar claves a su anillo de claves, cómo enviar su clave pública a un servidor de claves 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 necesario

En primer lugar, necesita ejecutar emerge gnupg. Muchas aplicaciones hoy en día tienen algún grado de soporte para gpg, así que es una buena idea definir crypt en su variable USE. Si quiere tener un cliente de correo electrónico que pueda usar gnupg, puede usar pine (emerge pinepgp), mutt (emerge mutt), Mozilla Thunderbird (emerge thunderbird), evolution (evolution es una aplicación del tipo Microsoft Outlook para GNOME) y el cliente de correo KMail propio de KDE.

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

Generar su clave y agregar claves públicas a su llavero

Crear su clave

Para crea su clave, debe ejecutar gpg --gen-key. La primera vez que lo haga, el programa creará algunos directorios; ejecútelo de nuevo para crear las claves:

user $ 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) RSA and RSA (default)
  (2) DSA and Elgamal
  (3) DSA (sign only)
  (4) RSA (sign only) Your selection? 1

En este momento tiene la posibilidad de elegir el tipo de clave que quiere usar. La mayoría de los usuarios elegirán la predeterminada RSA y RSA. Lo siguiente a elegir es el tamaño de la clave, recuerde que cuanto más grande se la clave, mejor. No use un tamaño superior a 2048 con claves DSA/ElGamal. Normalmente 2048 es más que suficiente para mensajes de correo electrónico normales.

Después del tamaño viene la fecha de expiración. Cuanto antes sea esta fecha, mejor. Sin embargo, la mayoría de los usuarios usan claves que nunca expiran o a lo sumo lo hacen en dos o tres años.

CodeElegir el tamaño de la clave

RSA keypair will have 1024 bits.
RSA keys may be between 1024 and 4096 bits long.
  What keysize do you want? (2048) 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 el momento de introducir alguna información personal. Si va a enviar su clave pública a otras personas tendrá que usar su dirección real de correo electrónico.

CodeIntroducir información de usuario

Is this correct (y/n)? y

GnuPG needs to construct a user ID to identify your key.

Real name: Juan Nadie
Email address: juan@ningunsitio.flick
Comment: El auténtico Juan Nadie
You selected this USER-ID:
"Juan Nadie (El auténtico Juan Nadie) <juan@ningunsitio.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 introduzca la contraseña de su clave dos veces. Es una buena idea usar una contraseña segura. Si alguien consigue acceder a su clave privada y obtiene su contraseña, podrá enviar mensajes de correo electrónico en "su nombre", haciendo creer a todo el mundo que fue usted el que envió el mensaje.

A continuación, GnuPG generará su clave. Mover el ratón o reproducir 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 realizarla AHORA.

Después de crear sus claves debería crear un certificado de revocación. Hacer esto le permite revocar su clave en caso que algo desagradable ocurra (por ejemplo, que alguien obtenga su clave privada o contraseña).

user $ gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub 1024D/75447B14 2002-12-08 Juan Nadie (El auténtico Juan Nadie)
<juan@ningunsitio.flick>
sub 2048g/96D6CDAD 2002-12-08
user $ gpg --output revoke.asc --gen-revoke 75447B14
sec 1024D/75447B14 2002-12-08 Juan Nadie (El auténtico Juan Nadie)
<juan@ningunsitio.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:
> Someone cracked me and got my key and passphrase
>
Reason for revocation: Key has been compromised
Someone cracked me and got my key and passphrase
Is this okay? y

You need a passphrase to unlock the secret key for
user: "Juan Nadie (El auténtico Juan Nadie) <juan@nadie.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!

La orden gpg --list-keys muestra las claves en su llavero de claves públicas. Puedes usarlo para ver el ID de su clave 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 claves y hacerlas inutilizables en el futuro.

Nota
Si tiene varias direcciones de correo electrónico que quiera usar con esta clave, puede ejecutar gpg --edit-key SU_ID y luego usar la orden adduid. Le preguntará por el nombre, dirección de correo electrónico y un comentario para la segunda ID que vaya a utilizar.

Exportar claves

Para exportar su clave, teclee gpg --armor --output juan.asc --export juan@ningunsitio.flick. Casi siempre puede usar el ID de la clave o algo que la identifique (aquí hemo usado una dirección de correo electrónico). Juan tiene ahora un archivo juan.asc que puede enviar a sus amigos, o poner en su sitio web para que la gente se comunique con él de forma segura.

Importar claves

Para agregar archivos a llavero de claves públicas, primero debe importarlas, luego comprobar la huella digital de la clave. Y después de verificar la huella digital debe validarla.

Note
Sea cuidadoso cuando verifique las claves. Este es uno de los puntos débiles de la criptografía de clave pública.

Ahora agregaremos la clave pública de Luis Pinto (un amigo mio) a nuestro llavero de claves públicas. Despúes de hablar con él por teléfono y de haberle preguntado por su huella digital, comparo esta huella con la salida de la orden fpr. Como la clave es auténtica, la agrego al llavero de claves públicas. En este caso particular, la clave de Luis expira el 2003-12-01 entonces se me preguntará si quiero que mi firma en su clave expire en el mismo día.

user $ gpg --import luis.asc
gpg: key 462405BB: public key imported
gpg: Total number processed: 1
gpg: imported: 1
user $ gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub 1024D/75447B14 2002-12-08 Juan Nadie (El auténtico Juan Nadie) <juan@ningunlugar.algunlugar.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]
user $ 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: "Juan Nadie (El auténtico Juan Nadie)
<juan@ningunsitio.flick>"

I have checked this key very carefully.

Really sign? y

You need a passphrase to unlock the secret key for
user: "Juan Nadie (El auténtico Juan Nadie)
<juan@ningunsitio.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 Juan Nadie (El auténtico Juan Nadie) <juan@ningunsitio.flick>
uid Luis Pinto <lmpinto@student.dei.uc.pt>
sig!3 462405BB 2002-12-01 [self-signature]
sig!3 75447B14 2002-12-08 Juan Nadie (El auténtico Juan Nadie) <juan@ningunsitio.flick>

Intercambiar claves con servidores de claves

Enviar claves a los servidores de claves

Ahora que tiene su clave, es buena idea enviarla a un servidor de claves. Hay un montón de servidores de claves en el mundo y muchos de ellos intercambian claves entre sí. Vamos a enviar la clave de Juan Nadie al servidor subkeys.pgp.net. Usaremos HTTP, por lo que si necesita usar un proxy para el tráfico HTTP, no olvide configurarlo (export http_proxy=http://maquina_proxy:puerto/). La orden para enviar la clave es: gpg --keyserver subkeys.pgp.net --keyserver-options honor-http-proxy --send-key 75447B14 donde 75447B14 es el ID de la clave. Si no necesita un proxy HTTP puede quitar la opción --keyserver-options honor-http-proxy.

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

Obtener claves desde los servidores de claves

Ahora buscaremos la clave de Gustavo Felisberto y agregarla al llavero de claves de Juan Nadie (solo en el caso que no se haya enterado que Gustavo Felisberto es la persona que escribió esta guía :)).

user $ 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 en la respuesta del servidor tengo un par de claves que he enviado al servidor, pero actualmente solo uso B9F2D52A. Ahora Juan Nadie podrá obtenerla y firmarla si confía en ella.

Usar un Agente GPG

¿Qué es un Agente GPG?

Hay casos cuando se está trabajando con ciertas aplicaciones donde usa su clave GPG muy frecuentemente, lo que significa debe teclear su contraseña muchas veces. Diversas aplicaciones solían ofrecer un mecanismo de cacheo de la contraseña para facilitar la vida de los usuarios. Esto, sin embargo, inhabilitaba el poder compartir esta caché con otros programas (¿Sería esto seguro?) y forzaba a las aplicaciones a reinventar la rueda una y otra vez.

Un agente GPG es una aplicación no incluida en GPG que se utiliza para mantener en caché la contraseña de forma estándar y segura. Permite a las aplicaciones usar GPG de forma concurrente: si teclea su contraseña mientras trabaja en una aplicación, otra puede trabajar con GPG sin pedir reiteradamente la contraseña para acceder a la clave, siempre y cuando el se configure correctamente el agente GPG.

Gentoo proporciona algunas aplicaciones de agente GPG. El paquete app-crypt/gnupg se puede considerar como referencia, y será el que usaremos en este documento.

Configurar gpg-agent y pinentry

GnuPG incluye gpg-agent. app-crypt/pinentry es la herramienta de ayuda que utiliza gpg-agent para solicitar la contraseña en una ventana gráfica. Se puede utilizar de tres formas: Puede mostrar una ventana utilizando gtk+, Qt, o la librería curses (dependiendo de sus ajustes USE en /etc/portage/make.conf).

Si instaló app-crypt/pinentry con más de un tipo de gestión de la ventana, puede elegir entre ellas utilizando eselect-pinentry:

root # eselect pinentry list
Available pinentry implementations:
 [1] pinentry-gtk-2 *
 [2] pinentry-curses
 [3] pinentry-qt4
root # eselect pinentry set 1

A continuación, cree un archivo llamado ~/.gnupg/gpg-agent.conf e introduzca las siguientes líneas que definen el tiempo de espera por defecto para mantener al contraseña (por ejemplo, 30 minutos) y la aplicación que se llamará cuando se recupere la contraseña por primera vez (por ejemplo, la versión gtk+ de pinentry).

File~/.gnupg/gpg-agent.conf

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

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

File~/.gnupg/gpg.confConfigurar 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 utiliza KDE como entorno gráfico, edite el fichero /etc/kde/startup/agent-startup.sh y elimine el comentario siguiente (para todo el sistema) o ~/.kde4/env/gpg-agent.sh (para el usuario local) y añada la siguiente orden para que KDE inicie automáticamente el agente GPG:

File/etc/kde/startup/agent-startup.kshHacer que KDE inicie automáticamente el agente GPG

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

Además, elimine los comentarios siguiente en /etc/kde/shutdown/agent-shutdown.sh (para todo el sistema) o añádalo a ~/.kde4/shutdown/gpg-agent.sh (para el usuario local):

File/etc/kde/shutdown/agent-shutdown.shAsegúrese de que KDE detiene el agente GPG

if [ -n "${GPG_AGENT_INFO}" ]; then
  kill $(echo ${GPG_AGENT_INFO} | cut -d':' -f 2) >/dev/null 2>&1
fi

Si utiliza otro entorno gráfico, coloque la línea mencionada arriba en ~/.xinitrc (si usa startx) o ~/.xsession (si usa XDM/GDM/KDM/...).

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 solo Luis podrá abrirlo. La firma le indica a Luis que el archivó lo creó la persona que lo ha firmado.

Las tres órdenes siguientes harán solo eso, cifrar, firmar y cifrar/firmar.

user $ gpg --output doc.gpg --encrypt --recipient lmpinto@dei.uc.pt doc_to_encrypt
user $
gpg --output doc.gpg --sign --recipient lmpinto@dei.uc.pt doc_to_sign
user $
gpg --output doc.gpg --encrypt --sign --recipient lmpinto@dei.uc.pt doc_to_encrypt_and_sign

Esto creará archivos binarios. Si desea crear archivos ASCII, agregue únicamente el parámetro --clearsign al principio de la orden.

Descifrar y verificar firmas

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

Cifrar y descifrar sin claves

También es posible cifrar archivos usando contraseñas en vez de claves. La contraseña funcionará como clave y se utilizará como cifrado simétrico. Se puede cifrar el archivo usando el parámetro --symmetric de la orden gpg; el descifrado usa la misma orden.

user $ gpg --output documento.gpg --symmetric documento

GnuPG le pedirá una una contraseña y su verificación.


Características avanzadas

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

File~/.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 elimine los comentarios. Con esto, cada vez que GnuPG necesite comprobar una firma y no encuentre la clave pública en el llavero de claves local, contactará con el servidor de claves en subkeys.pgp.net e intentará obtenerla allí.

Otra orden a tener en cuenta es gpg --refresh-keys. Esta contacta con el servidor de claves definido en el archivo de opciones y actualizará las claves públicas de su llavero de claves local a partir de ahí, buscando claves revocadas, nuevos identificadores, nuevas firmas en claves. Probablemente debería ejecutar esto una o dos veces al mes así puede saber si alguien revocó su propia clave.

Interfaces GnuPG

Acerca de las firmas en los correos electrónicos

El 95 % del tiempo usará GnuPG con el correo, firmando o cifrando sus mensajes salientes y leyendo mensajes firmados o cifrados. Así que es justo que hablemos acerca de esto en primer lugar.

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

CodeUna firma en texto plano

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


Mensaje de prueba

-----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 actual, en el que tenemos preciosas interfaces gráficas y lectores de correo que comprended html.

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

Kgpg

Kppg es un GUI agradable para GnuPG. En la ventana principal puede pegar el texto que desea firmar o cifrar, y también puede pegar texto armado ASCII que desea descifrar.

Desde la ventana principal puede descifrar texto (tendrá que introducir su contraseña), cifrar otros ficheros, pegar nuevo texto para firmar...

Seahorse

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

KMail

Si tiene definido el ajuste USE crypt, KMail se compilará con soporte gpg y podrá cifrar y descifrar mensajes de correo electrónico PGP en línea así como cifrar mensajes OpenPGP/MIME. Si quiere también descifrar mensajes OpenPGP/MIME (probablemente sea así) necesita tener un agente GPG corriendo.

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

Si aún es incapaz de hacer funcionar correctamente KMail, por favor lea la página KMail PGP HowTo para obtener más información.

Claws-Mail

Este lector de correo electrónico es muy rápido con buzones de correo grandes, tiene todas las buenas características 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 antiguas, así que cuando reciba correos de ese tipo tendrá que comprobar las firmas manualmente.

Para usar su clave gpg con Claws-Mail simplemente vaya a la configuración de la cuenta y seleccione la pestaña privacy. Una vez ahí, elija qué clave va a utilizar. Probablemente la mayoría de los usuarios elegirá la clave por defecto.

Criptografía de clave pública

Criptografía de clave pública básica

El concepto de criptografía de clave pública lo idearon originalmente Whitfield Diffie y Martin Hellman in 1976. Cuando escuché por primera vez las palabras "clave pública" y "criptografía" en la misma frase en 1993, pensé que sería imposible hacer aquello. Entonces no existía Internet (bueno había, pero no para mí) así que fui a la biblioteca pública y pregunté por libros sobre 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 cifrados por substitución (esos en que uno cambia una letra por otra como en el famoso Cifrador 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, se abrieron las puertas de un nuevo mundo.

Y ahora veamos un poco de matemáticas:

CodeConceptos matemáticos

Definitions:

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

Teorema (No daremos la demostración aquí)
1- Es posible romper cualquier número entero positivo no primo en el producto de números primos. Además, este 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- Matemáticamente es fácil multiplicar dos números enteros grandes.
2- Es difícil encontrar los factores primos de un número 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 empleará bastante tiempo (o ciclos de CPU) para encontrar que es 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 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 Clave Pública (PKC en inglés). Como ejemplo (no realista) le doy a alguien mi número que esa persona usará para cifrar un mensaje dirigido a mi. Cualquier persona puede ver el mensaje cifrado porque soy el único que conoce una forma rápida de leerlo, cualquier otra persona tendría primero que "dividir" el número grande para poder 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 emplearía miles de años en hacerlo). En esta configuración los dos números primos grandes serían la CLAVE PRIVADA y el número grande no primo es la CLAVE PÚBLICA.

En la práctica esto no es correcto al 100% pero le dará una buena idea al neófito. Puede encontrar más información en la Wikipedia sobre el protocolo Diffie-Hellman. Para obtener más información, vaya a una biblioteca pública y obtenga una copia del libro "Handbook of Applied Cryptography" de Alfred J. Menezes, Paul C. van Oorschot y 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 dirigido a 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 nuestra clave pública. Pero, ¿Cómo sabemos que el autor del mensaje es realmente quien dice ser?. En otras palabras: Si recibo un mensaje de correo electrónico ¿Cómo se que es realmente suyo y no de 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 clave privada para que, cuando lo reciba pueda usar su clave pública para verificar su firma y luego usar mi clave privada para descifrar el mensaje. Como puede ver, no podríamos hacer eso con la configuración descrita arriba.

También es muy importante firmar mensajes de modo que no tenga que cifrarlos antes. Ahora puede crear mensajes que puede leer cualquiera pero que vienen con su "marca". Y si se cambió algún carácter del mensaje, éste puede (y será) detectado.

Servidores de claves y claves firmadas

Pero digamos que no hemos tenido contacto previo hasta que me envía un mensaje. La pregunta es ¿Cómo obtengo su clave pública? y ¿Cómo sé que realmente es suya?

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

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

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

Imaginemos una situación en que participan tres 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 mensaje de correo electrónico firmado. Juan recuperará la clave pública de Lisa desde algún servidor de claves y chequea el mensaje, si todo marcha bien, verá que quien haya creado el mensaje también creó la clave. Pero, ¿Cómo sabe que es realmente la persona que dice ser?

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

Ahora está listo para usar esta guía, puede volver al capítulo 1 y aprender a usar gpg.

Consideraciones finales y créditos

Algunos problemas

He tenido algunos problemas con fotos en las claves. Verifique la versión que está usando. Si tiene la versión GnuPG 1.2.1-r1 o mayor probablemente no tenga problemas, puede tener problemas con versiones más antiguas. A muchos servidores de claves tampoco le gustan mucho las claves con fotos, por lo que es mejor no añadir fotos.

Las últimas versiones de gnupg no parecen funcionar con la orden gpg --send-keys que se usó para enviar todas las claves de su llavero al servidor de claves.

¿Qué no se ha incluido aquí?

La herramienta gpg es muy compleja, le permite hacer mucho más de lo cubierto aquí. Este documento está indicado para los nuevos usuarios de GnuPG. Para más información, deberá leer el sitio web de GnuPG.

No he escrito nada sobre otras herramientas como pgp4pine, gpgpine, evolution o tal vez herramientas para Windows, pero probablemente extienda este documento en el futuro.

Créditos

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

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

A todos los miembros del equipo #gentoo-doc, tíos, moláis.

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

Agradecimientos

Nos gustaría dar las gracias a los siguientes autores y editores por sus contribuciones a esta guía:


  • Gustavo Felisberto
  • John P. Davis
  • Sven Vermeulen
  • nightmorph