GPG: Tutorial de cifrado, firma y envío de datos de forma segura

Cifrado GPG - Blog - 2

Mucho se ha hablado ya sobre la criptografía simétrica y asimétrica y sobre la firma digital, solo toca ponerlo en práctica con GnuPG (la versión libre de PGP o mejor dicho Pretty Good Privacy), con el que cifraremos cualquier tipo de archivo que podremos mandar “libremente” con cierta seguridad de que nadie lo podrá leer. Y puede que a muchos os ayude a entender como funciona la criptografía y como funciona el polémico cifrado de Mega, que tanto está dando que hablar estos días.

cifrado mega

Vámos al lío… }:P

¿Qué es GnuPG?

linux

Antes de empezar con lo interesante tenemos que saber que es GPG (GNU Privacy Guard), que es un derivado libre de PGP y su utilidad es la de cifrar y firmar digitalmente, siendo además multiplataforma (podéis descargarlo desde la página oficial) aunque viene incorporado en algunos sistemas Linux, como en Ubuntu (será con el sistema que haré todos los ejemplos, en Windows se encuentra solo con gestor gráfico).

Anillo de claves

GPG tiene un repositorio de claves (anillo de claves) donde guarda todas las que tenemos almacenadas en nuestro sistema, ya sean privadas o públicas (como comenté, con la clave pública cifraremos un mensaje que solo podrá descifrar el que posee la clave privada).

Más adelante cuando veamos un anillo de claves debemos de recordar que pub hace referencia a la clave pública y sub hace referencia a la privada (y que tenemos que tener a buen recaudo).

Servidores de claves

servidor claves públicas

Para que nos cifren un mensaje tenemos que compartir la clave pública de nuestro par de claves para cifrar, y como es un poco engorroso difundir una clave a muchas personas existen los servidores de claves PGP (compatibles con GPG), donde subiré una clave pública para el que quiera probar los ejemplos.

Unos ejemplos de servidores son estos:

 – Red Iris (español).

 – MIT PGP Public Key Server (Americano)

Cifrado simétrico

clave secreta

Como ya sabéis el cifrado simétrico es el tipo de cifrado más sencillo que hay, es más rápido de procesar y por desgracia menos seguro que el cifrado asimétrico.

Para empezar la prueba tenemos que tener un archivo de cualquier tipo e introducir en la terminal de Linux el comando gpg con el parámetro -c para cifrar y -d para descifrar.

lin - 1

Tras crear un archivo de texto usamos el comando gpg -c [archivo], nos aparecerá un cuadro que nos pide la contraseña y se generará un archivo .gpg. Y después lo descifraremos con el comando gpg -d [archivo] (e introduciendo la clave de alta seguridad, en este caso qwerty).

lin - 2

Podéis probar a descifrar este archivo usando la clave qwerty.

Cifrado asimétrico

clave privada

Generar las claves

Para poder cifrar asimétricamente primero tenemos que crear la pareja de claves (pública y privada) con el comando gpg --gen-key.

lin - 3

GPG nos permite elegir el tipo de clave que queremos usar, hay opciones que solo permiten firmar y otras que permiten firmar y cifrar, en este caso usaremos DSA y Elgamal.

lin - 4

Nos piden el tamaño de la clave que puede variar entre 1024 bits y 3072, esto es de libre elección, yo tomaré el término medio que es el que propone por defecto (2048).

A partir de aquí todo es más trivial, nos pide la fecha en la que expirará la clave, la información del emisor de la clave (nombre, mail y algunos datos extra que queramos dar) y por último nos pedirá la contraseña que salvaguarda la clave privada.

Tras generar las claves podemos verlas con el comando gpg -k que nos muestra nuestro anillo de claves, lo importante de este paso es que veremos la identificación de cada una, que es necesaria para poderlas exportar y enviar.

lin - 5

Exportar y enviar la clave privada

El objetivo de esta pareja de claves es que cualquiera nos pueda mandar un archivo cifrado que solo veremos nosotros y esto se hace difundiendo la clave pública que acabamos de crear (la pública,nunca la privada), para exportarla en un archivo usaremos el comando gpg -output [archivo destino] --export [ID de a clave pública] (la clave pública generada antes tiene la ID18384645).

lin - 6

Este archivo ahora se puede difundir por el medio que queramos, tenemos que tener en cuenta que el único problema de seguridad que habría en difundir la clave es que alguien se hiciese pasar por otro al mandarnos un mensaje, algo que pasaría igual si no estuviese cifrado, por eso el que nos envíe algo lo debería de firmar (si fuese pertinente).

Podéis descargar esta clave pública, que ahora veremos como importar y sirve para mandarme un archivo cifrado o para comprobar que un archivo lo he firmado yo.

Subir una clave pública a un servidor de claves

Los servidores de claves suelen ser de acceso público (al no haber mucho problema por difundir una clave pública) y en este caso subiremos una clave a los servidores del MIT (pgp.mit.edu) usando el comando gpg --send-keys --keyserver [Dirección del servidor] [ID de la clave pública] (al igual que antes la ID es 18384645).

lin - 7

A partir de este momento la clave estará accesible desde este servidor específico.

Importar la clave desde el archivo o servidor de claves

Para poder usar la clave pública para cifrar o comprobar la identidad del remitente tenemos que importar previamente la clave, desde un archivo debemos de usar el comando gpg --import [Archivo de la clave pública] (el que hemos descargado anteriormente).

lin - 8

Al tener la clave ya en mi anillo de claves me contesta que no hay cambios.
Para realizar la importación desde el servidor tenemos que usar el comando gpg --keyserver [Dirección del servidor] --recv-keys [ID de la clave].

lin - 9

Como podemos ver al tener ya la clave nos devuelve el mismo mensaje.

Cifrar con la clave pública

Ahora tenemos que pensar que hemos importado una clave pública, por ejemplo de nuestro jefe y tenemos que mandarle un documento, para cifrar el documento usaremos el comando gpg —encrypt —recipient [ID de la clave] [Archivo]

lin - 10

Y ya tenemos el archivo listo para mandarlo de forma segura.

Descifrar un archivo con la clave privada

Y ahora es el momento de descifrar con nuestra clave privada el documento tras recibirlo, con el comando gpg -d [Archivo] e introduciendo la contraseña que creamos para salvaguardar la clave privada.

lin - 11

Y el resultado nos lo muestra a continuación (Genbeta Dev), aunque si queremos especificar la salida debemos de usar el parámetro -o [Archivo de salida].

Firmar archivos

Una de las medidas de seguridad básicas al pasar un mensaje es asegurarnos que el emisor es quien dice ser, para asegurarnos de esto digitalmente existe la firma digital, en el artículo anterior expliqué como GPG usaba los hash para crear una firma simple, pero también podemos cifrarlo y a su vez firmarlo, que es lo que haremos con el comando gpg -u [ID de la clave privada] --output [Archivo resultante] --sign [Archivo para firmar] e introduciendo la contraseña de la clave privada.

lin - 12

Y ahora para asegurarse la confidencialidad del documento (ahora que esta firmado por nosotros) deberíamos de cifrarlo con la clave pública del destinatario.

Verificar y descifrar un archivo firmado

Cualquiera con la clave pública asociada a la que ha firmado el documento puede leerlo, de la misma forma que desciframos un archivo (gpg -d [Archivo]) o verificándolo únicamente con el comandogpg --verify [Archivo].

lin - 13

Y el resultado es la información del remitente, que podéis comprobar vosotros con este archivo y con la clave pública de los pasos anteriores.

Resumen

GPG es una herramienta de cifrado muy potente y fácil de usar, que en principio, a la mayoría no nos hace falta, pero puede que se nos presente la necesidad de enviar algo por medio inseguros (porque no haya más remedio), haciéndolo de esta forma podremos hacerlo sin miedo ha que lean el contenido del archivo o nos den el cambiazo.
Este es un tema bastante extenso y si no lo acabas de entender puede ser un lío.

From: genbetadev

TonyHAT - 005

Anuncios

Un comentario en “GPG: Tutorial de cifrado, firma y envío de datos de forma segura”

Responder

Por favor, inicia sesión con uno de estos métodos para publicar tu comentario:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s