privacy

Llaves GnuPG

GnuPG es una aplicación que sirve para cifrar (también se usa el término ‘encriptar’) mensajes, documentos, etc. GnuPG usa un sistema de claves públicas lo que quiere decir que cada usuario tiene una clave privada y una clave pública. La clave privada es la que se usa para descifrar (o ‘desencriptar’) aquello que nos envían cifrado con nuestra clave pública, La clave privada es una clave que sólo ha de conocer el propietario ya que si alguien más la conociese podría descifrar lo que nos mandan cifrado. La clave pública es la que se da a la gente para que nos manden cosas cifradas y usarán para cifrar aquello que nos quieran enviar.

Para poder entender mejor el sistema de codificación usado por los sistemas de claves asimétricas (ej. claves públicas y privadas), es necesario entender las diferencias con los sistemas de claves simétricas (ej. claves secretas).

Los sistemas de cifrado con clave simétrica son aquéllos en los que la clave que se usa para cifrar una serie de datos, es la misma que la que se usará para descifrar estos datos. En el caso del correo electrónico, el remitente cifraría el mensaje con una clave secreta, y para que el destinatario pueda descifrarlo, necesitaría haber obtenido previamente esta misma clave de un modo «seguro», o sea de modo que la clave no haya podido ser interceptada durante la entrega. Si no tenemos la completa seguridad de que el intercambio de la clave ha sido seguro, la validez de este sistema es nula.

CriptografiaAsimetrica

Por el contrario, los sistemas de cifrado con claves asimétricas usan claves distintas para el cifrado y posterior descifrado de los datos. En un caso como el anterior, el remitente usaría la clave pública del destinatario para cifrar el mensaje, y el destinatario descifraría el mensaje con su propia clave privada. Así pues, la clave privada no debe ser accesible para nadie que no sea el propio dueño de la misma, mientras que la clave pública, puede ser entregada a cualquier persona. En un sistema de cifrado bien implementado, la clave privada no debe derivar nunca de la clave pública.

Firmas Digitales

El concepto de la firma digital se basa en la verificación de la autoría de un mensaje. Esto quiere decir que se puede comprobar que el destinatario del mensaje puede comprobar que el «supuesto» remitente es quien afirma ser. Para ello, el remitente, una vez compuesto el mensaje, lo firma usando su propia clave privada. El destinatario, una vez ha recibido el mensaje, comprobará la veracidad de éste, esto es, lo verificará usando la clave pública del remitente.

Este método es de especial utilidad para reducir riesgos de seguridad en nuestros sistemas (nos podrían enviar un supuesto parche para un programa, y éste en realidad ser un virus o un troyano); también podrían enviarnos información o datos, como provenientes de una fuente lícita o fiable. En ambos casos, no sería muy difícil falsificar la dirección y nombre del remitente, pero sí imposible falsificar la firma digital de éste.

Como ya hemos dicho, la verificación de un mensaje firmado digitalmente se lleva a cabo mediante el uso de la clave pública del remitente sobre el texto del propio mensaje. De este modo no sólo podemos verificar la identidad del autor, sino que también podemos comprobar la integridad del mensaje, ya que la firma digital ha sido generada con el texto y la clave privada. Así pues, una alteración o modificación del texto «a posteriori», o cualquier manipulación del mensaje (especialmente si hacemos uso de las especificaciones MIME/PGP), daría como resultado un error en la verificación.

Anillos de Confianza

Un punto flaco en los algoritmos de clave asimétrica es la transmisión del código público. Es posible que una persona ponga en circulación código con un identificador de usuario falso. Si se codifican mensajes con este pseudo código, el intruso los puede descodificar y leerlos.

encripcion-LinuxLa solución PGP (y por consiguiente la solución GnuPG) está en firmar los códigos. La clave pública de un usuario puede estar firmada con las claves de otros usuarios. El objetivo de estas firmas es el de reconocer que el UID (identificador de usuario) de la clave pertenece al usuario a quien dice pertenecer. A partir de ahí es un problema de cada usuario de GnuPG el decidir hasta qué punto se puede fiar de la firma. Una clave se puede considerar fiable cuando se confía en el remitente y cuando se sabe con seguridad que dicha clave pertenece a éste. Sólo cuando se puede confiar plenamente en la clave del firmante, se puede confiar en la firma que acompaña a la clave de un tercero. Para tener la certeza de que la clave es correcta hay que compararla con la huella digital por medio de canales fiables (por ejemplo, podríamos buscar el teléfono en la guía y llamarle, y que nos la dijera de palabra para poder compararla), antes de darle una confianza absoluta.

Generación de claves para uso cifrado asimétrico

Para la creación de claves asimétricas usaremos la herramienta GNUPG que se puede descargar desde la página oficial. En mi caso usaré una distribución GNU/Linux, pero el proceso es igual para Windows.

1. Abrimos una consola y ejecutamos la instrucción gpg con el parámetro –gen-key .

$ gpg --gen-key

2. Nos aparecerá este menú:

gpg (GnuPG) 1.4.12; Copyright (C) 2012 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

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?

Donde tenemos que elegir el tipo de cifrado, en nuestro caso usaremos RSA y RSA, o sea el numero 1.

Your selection? 1

3. Elegir el tamaño de la clave. Usaremos 2048 (por defecto).

RSA keys may be between 1024 and 4096 bits long.
What keysize do you want? (2048)
Requested keysize is 2048 bits
Please specify how long the key should be valid.
         0 = key does not expire
        = key expires in n days
      w = key expires in n weeks
      m = key expires in n months
      y = key expires in n years
Key is valid for? (0)

4. Colocamos la opción para vencimiento (w=semanas; m=meses; y=años) o le damos al enter si elegimos que nunca caduque.

5. Introducir Nombre y Apellidos.

Is this correct? (y/N) y

You need a user ID to identify your key; the software constructs the user ID
from the Real Name, Comment and Email Address in this form:
    "Heinrich Heine (Der Dichter) "

Real name: harold

6. Dirección de Correo Electrónico.

Email address: hluzardo@GUSL.org

7. Poner comentarios.

De lo contrario sólo oprima el botón de enter.

8. Proceso final. Nos preguntará si todos nuestros datos son correctos.

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

9. Introducir contraseña. Recuérdala o mejor anótala en algún lado.

Te pedirá que la coloques dos veces (2)

10. Paso final. Será necesario cargar el microprocesador con algo de carga y esperar a que se genere la clave, es decir, realiza acciones como utilizar el teclado y mover el ratón, esto permite ganar entropía al generador de números aleatorios.

We need to generate a lot of random bytes. It is a good idea to perform
some other action (type on the keyboard, move the mouse, utilize the
disks) during the prime generation; this gives the random number
generator a better chance to gain enough entropy.

Not enough random bytes available.  Please do some other work to give
the OS a chance to collect more entropy! (Need 284 more bytes)

Registar la  clave pública

Este comando enviará la clave pública al Servidor de Llaves en el dominio de PgP Corporation’s pgp.net, de esta manera otros podrán validar tu clave y certificar la autenticidad de la misma:

$ gpg --send-keys 'nombre_del_archivo_.pub' --keyserver hkp://subkeys.pgp.net

Exportación de clave pública

Para exportar nuestra clave pública en un fichero de texto usaremos la instrucción de abajo:

$ gpg --export hluzardo@GUSL.org /home/hluzardo/Escritorio/clave_publica_hluzardo.pub

Eso exportará la clave pública en un fichero de texto llamado clave_publica_hluzardo.pub (especifica la ruta hacia ese fichero). Si lo abrimos veremos nuestra clave:

Esa es la clave que tendremos que pasar a la persona que quiera enviarnos un mensaje cifrado.

Importación de clave pública

El emisor deberá importar nuestra clave pública en su anillo de claves (base de datos de claves) para que luego pueda cifrar un documento y enviarlo.

$ gpg --import archivo_clave_publica.txt

Cifrar archivo

Para que el emisor pueda cifrar un documento deberá tener instalado el GPG pero no tiene porqué crearse su propia clave privada si no la necesita.

Usaremos este comando para cifrar un documento de texto:

$ gpg -a --encrypt -r hluzardo@GUSL.org documento.txt

Donde documento.txt es el archivo a cifrar. Después de ejecutar este comando nos habrá creado un archivo con un nombre igual que el anterior pero acabado en la extensión .asc (documento.txt.asc).

Ese es el archivo que el emisor debe enviar al receptor de forma segura (cifrado).

Descifrar archivo

Para descifrar un archivo necesitaremos la clave privada que hemos introducido en el primer paso. Ponemos el comando de abajo y después introduciremos la contraseña privada.

$ gpg -o documento_descifrado.txt --decrypt documento.txt.asc

De esta manera podemos hacer cifrado y descifrar archivos usando nuestra clave GnuPG.

En un próximo artículo hablaré de como aplicar llaves GnuPG en correos electrónicos usando clientes de correos y navegadores web.