Guía del usuario GnuPG de Gentoo
1.
Introducción
Lo que aprenderá con 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,
lea el capítulo Criptografía de Clave Pública
o eche una vistazo 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
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 requerido
En primer lugar, 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 thunderbird), evolution
(evolution es una aplicación del tipo Microsoft Outlook para GNOME) y
KMail 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 unas cuantas características
más.
2.
Generar sus claves y agregar claves públicas a su anillo de claves
Crear sus claves
Para crear sus claves, tan solo ejecute gpg --gen-key. La primera
vez que lo haga, el programa creará algunos directorios; ejecútelo de
nuevo para crear las claves:
Listado de Código 2.1: Proceso de generación de claves |
$ 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.
Por favor seleccione tipo de clave deseado:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sólo firmar)
(4) RSA (sólo firmar)
Su elección: 1
|
Aquí 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. Aquí mientras más
pequeño es mejor, sin embargo, la mayoría de los usuarios usan claves
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 clave |
las claves RSA pueden tener entre 1024 y 4096 bits de longitud.
¿De qué tamaño quiere la clave? (2048) 2048
El tamaño requerido es de 2048 bits
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)? 0
La clave nunca caduca
|
Ahora es el momento de escribir su 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.
Listado de Código 2.3: Ingresar información del usuario |
¿Es correcto? (s/n) s
GnuPG debe construir un ID de usuario para identificar su clave.
Nombre y apellidos: Juan Nadie
Dirección de correo electrónico: juan@ningunsitio.flick
Comentario: El autentico Juan Nadie
Ha seleccionado este ID de usuario:
"Juan Nadie (El autentico Juan Nadie) <juan@ningunsitio.flick>"
¿Cambia (N)ombre, (C)omentario, (D)irección o (V)ale/(S)alir? v
Necesita una frase contraseña para proteger su clave secreta.
Introduzca frase contraseña
|
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 firmados con "su nombre", haciendo creer a todo el mundo
que fue usted el que envió el mensaje.
A continuación, GnuPG generará su clave. 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.
|
Después de crear sus claves debería crear un certificado de revocación.
Haciendo esto le permite revocar su clave en caso que algo
desagradable le ocurra (por ejemplo, que alguien obtenga su clave
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 Juan Nadie (El autentico Juan Nadie) <juan@ningunsitio.flick>
sub 2048g/96D6CDAD 2002-12-08
$ gpg --output revoke.asc --gen-revoke 75447B14
sec 1024D/75447B14 2002-12-08 Juan Nadie (El autentico Juan Nadie) <juan@ningunsitio.flick>
¿Crear un certificado de revocación para esta clave? (s/N) s
Por favor elija una razón para la revocación:
0 = No se dio ninguna razón
1 = La clave ha sido comprometida
2 = La clave ha sido reemplazada.
3 = La clave ya no está en uso
Q = Cancelar
(Probablemente quería seleccionar 1 aquí)
¿Su decisión? 1
Introduzca una descripción opcional; acábela con una línea vacía:
> Alguien obtuvo mi clave y contraseña
>
Razón para la revocación: La clave ha sido comprometida
Alguien obtuvo mi clave y contraseña
¿Es correcto? (s/N) s
Introduzca frase contraseña para desbloquear la clave secreta del
certificado OpenPGP:
"Juan Nadie (El autentico Juan Nadie) <juan@ningunsitio.flick>"
1024-bit DSA key, ID 75447B14, creada el 2002-12-08
se fuerza salida con armadura ASCII.
Certificado de revocación creado.
Por favor consérvelo en un medio que pueda esconder; si alguien consigue
acceso a este certificado puede usarlo para inutilizar su clave.
Es inteligente imprimir este certificado y guardarlo en otro lugar, por
si acaso su medio resulta imposible de leer. Pero precaución: ¡el
sistema de impresión de su máquina podría almacenar los datos y hacerlos
accesibles a otras personas!
|
La orden gpg --list-keys muestra las claves en su anillo 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, e-mail y un
comentario para la segunda ID que usará.
|
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 identifique la clave (aquí usamos una
dirección de e-mail). Juán tiene ahora un archivo
juan.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 claves
Para agregar archivos a su anillo 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.
Nota:
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 mío) a
nuestro anillo de claves públicas. Luego de haberlo llamado por
teléfono y de haberle preguntado por su huella digital, comparo la
huella con la salida de la orden fpr. Como la clave es
auténtica, la agrego al anillo 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.
Listado de Código 2.5: Importar y firmar claves |
$ gpg --import luis.asc
gpg: clave 462405BB: clave pública importada
gpg: Cantidad total procesada: 1
gpg: importadas: 1 (RSA: 1)
$ gpg --list-keys
/home/humpback/.gnupg/pubring.gpg
---------------------------------
pub 1024D/75447B14 2002-12-08 Juan Nadie (El autentico Juan Nadie) <juan@ningunsitio.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 [caduca: 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.
pub 1024D/462405BB creado: 2002-12-01 caduca: 2003-12-01 uso: SC
confianza: desconocido validez: desconocido
sub 4096g/922175B3 creado: 2002-12-01 caduca: 2003-12-01
(1) Luis Pinto <lmpinto@dei.uc.pt>
(2). Luis Pinto <lmpinto@student.dei.uc.pt>
gpg> fpr
pub 1024D/462405BB 2002-12-01 Luis Pinto <lmpinto@dei.uc.pt>
Huella de clave primaria: F056 3697 ADE3 CF98 B80B 8494 0AD3 E57B 4624 05BB
gpg> sign
¿Firmar realmente todos los IDs de usuario? (s/N) s
pub 1024D/462405BB creado: 2002-12-01 caduca: 2003-12-01 uso: SC
Huella de clave primaria: F056 3697 ADE3 CF98 B80B 8494 0AD3 E57B 4624 05BB
Luis Pinto <lmpinto@dei.uc.pt>
Luis Pinto <lmpinto@student.dei.uc.pt>
Esta clave expirará el 2003-12-01.
¿Quiere que su firma caduque al mismo tiempo? (S/n) s
¿Cómo de cuidadosamente ha verificado que la clave que está a
punto de firmar pertenece realmente a la persona arriba nombrada? Si no
sabe que contestar, introduzca "0".
(0) No contesto. (default)
(1) No lo he comprobado en absoluto.
(2) He hecho una comprobación informal.
(3) Lo he comprobado meticulosamente.
¿Su elección? (escriba '?' si desea más información): 3
¿Está realmente seguro de querer firmar esta clave
con su clave: "Juan Nadie (El autentico Juan Nadie) <juan@ningunsitio.flick> (96D6CDAD)?
He comprobado esta clave meticulosamente.
¿Firmar de verdad? (s/N) s
Necesita una frase contraseña para desbloquear la clave secreta
del usuario: "Juan Nadie (El autentico Juan Nadie) <juan@ningunsitio.flick>"
clave DSA de 1024 bits, ID 75447B14, creada el 2002-12-08
gpg> check
uid Luis Pinto <lmpinto@dei.uc.pt>
sig!3 462405BB 2002-12-01 [autofirma]
sig!3 75447B14 2002-12-08 Juan Nadie (El autentico Juan Nadie) <juan@nowhe
uid Luis Pinto <lmpinto@student.dei.uc.pt>
sig!3 462405BB 2002-12-01 [autofirma]
sig!3 75447B14 2002-12-08 Juan Nadie (El autentico Juan Nadie) <juan@nowhe
|
3.
Intercambiar claves con servidores de claves
Enviar claves a 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 ellos. 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://proxy_host: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 tu 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 anillo
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 :) ).
Listado de Código 3.1: Buscar claves en los servidores de claves |
$ gpg --keyserver subkeys.pgp.net --keyserver-options honor-http-proxy --search-keys humpback@felisberto.net
gpg: buscando "humpback@felisberto.net" de hkp servidor subkeys.pgp.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
Keys 1-6 of 6 for "humpback@felisberto.net". Introduzca número(s), O)tro, o F)in > >1
gpg: solicitando clave B9F2D52A de hkp servidor subkeys.pgp.net
gpg: clave B9F2D52A: clave pública "Gustavo Felisberto <humpback@felisberto.net>" importada
gpg: Cantidad total procesada: 1
gpg: importadas: 1
|
Como puede ver desde la respuesta del servidor tiene un par de claves
enviadas al servidor de claves, pero actualmente solo usa
B9F2D52A. Ahora Juan Nadie 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 clave 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 clave - si el
agente GPG se configura para eso, por supuesto.
Gentoo proporciona algunas aplicaciones de agentes 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 y pinentry. El paquete
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ó pinentry con más de un tipo de gestión de la ventana,
puede elegir entre ellas utilizando eselect-pinentry:
Listado de Código 4.1: Cambiar el tipo de ventana emergente |
# eselect pinentry list
Available pinentry implementations:
[1] pinentry-gtk-2 *
[2] pinentry-curses
[3] pinentry-qt4
# eselect pinentry set 1
|
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 gtk+ de pinentry).
Listado de Código 4.2: Editar ~/.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
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 su entorno gráfico es KDE, edite el fichero
/etc/kde/startup/agent-startup.sh si quiere que afecte a
todo el sistema, o el fichero ~/.kde4/env/gpg-agent.sh para
que afecto solo al usuario local y añada la siguiente orden 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)"
|
Elimine las siguientes líneas comentadas del fichero
/etc/kde/shutdown/agent-shutdown.sh (para todo el sistema),
o añádalas al fichero ~/.kde4/shutdown/gpg-agent.sh (para el
usuario local):
Listado de Código 4.5: Hacer que KDE apague 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/...).
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 solo Luis
podrá abrirlo. La firma le dice a Luis que fue realmente Ud. quien
creó el archivo.
Las tres órdenes siguientes harán solo 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, solo
agregue el parámetro --clearsign al principio de la orden
Descifrar y verificar firmas
Suponga que ha recibido un archivo que está 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
Es posible cifrar archivos usando contraseñas en vez de claves. La
contraseña funcionará como clave y será utilizada como cifrado
simétrico. Se puede cifrar el archivo usando el parámetro
--symmetric de la orden gpg; el descifrado usa la misma
orden.
Listado de Código 5.2: Cifrar archivos con una contraseña |
$ gpg --output document.gpg --symmetric document
|
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 elimine los comentarios. Con esto,
cada vez que GnuPG necesite comprobar una firma y no encuentre la
clave pública en el anillo de claves local, contactará al servidor
de claves en
subkeys.pgp.net
e intentará obtenerla allí.
Otra orden a tener en cuenta es gpg --refresh-keys. Esto
contactará con el servidor de claves definido en el archivo de
opciones y actualizará las claves públicas de su anillo 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 clave.
6.
Interfaces GnuPG
Acerca de las firmas de correo electrónico
El 95 % del tiempo usará GnuPG con el correo, firmando/cifrando sus
mensajes salientes 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 |
 |
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 |
 |
Ahora puede ver la ventana de administración de claves. Desde aquí
podemos ver nuestra clave correcta para Juan Nadie. Las dos claves de
confianza de Gustavo y Luis, y la clave sin confianza de Daniel
Robbins (sigo sin llamarlo para preguntarle su huella de la clave :)
).
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.
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 Usar 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
clic 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 clave gpg con Claws-Mail solo vaya a la configuración de
la cuenta y seleccione la pestaña "privacy". Una vez ahí, elija qué
clave va a usar, la mayoría de los usuarios probablemente irá por la
clave por defecto.
7.
Criptografía de clave pública
Criptografía de clave pública básica
El concepto de criptografía de clave pública fue originalmente ideado
por Whitfield Diffie y Martin Hellman in 1976. Cuando escuché por
primera vez las palabras "clave 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 solo
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 Clave 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 "CLAVE PRIVADA" y el
número grande no primo es la "CLAVE 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
clave 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 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 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
carácter cambió en el mensaje, éste puede (y será) detectado.
Servidores de claves y claves firmadas
Digamos que no tenga contacto previo con Ud. hasta que me envía un
mensaje, la pregunta es ¿Cómo obtengo su clave pública? y ¿Cómo se 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. Luego de esto,
cualquier persona puede recuperarla desde ahí. 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 introduce
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 la
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, valga la
redundancia, 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 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 clave pública de Lisa desde
algún servidor de claves y chequeará el mensaje, si todo marcha bien
él 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
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 claves. 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 claves tampoco le gustan mucho las
claves con 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 anillo al servidor de claves.
¿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.
El contenido de este documento, a no ser que se especifique
expresamente, está registrado bajo los términos de la licencia
CC-BY-SA-2.5. Se aplican las
Pautas de
Utilización del logotipo y nombre de Gentoo.
|