La idea principal de la criptografía asimétrica es que en una comunicación segura se usan una pareja de claves. Una de ellas, que es la publica, que deberá ser intercambiada con cada una de las entidades con las que quiera comunicarse mensajes secretos, y otra de ellas, que es la privada, y que por tanto no debe ser compartida con nadie.
Para cifrar un mensaje, el emisor utilizara la clave publica del receptor, y a su vez, el receptor descifrara este mensaje usando su clave privada.
Ejemplo:
Supongamos que Fernando y Julia quieren intercambiarse información confidencial usando la criptografía asimétrica. Lo primero que deben hacer, es obtener una pareja de claves propias (privada + publica), cada uno comunica su clave publica al otro, ya que no pasaría nada si cayera en manos de un tercero. Cuando Fernando quiera enviarle un mensaje cifrado a Julia debera usar la clave que le a sido proporcionada anteriormente para cifrar el mensaje.
Como es lógico pensar, estas claves (privada y publica) se generan a la vez y se encuentran relacionadas matemáticamente entre si mediante funciones de un solo sentido. Resulta prácticamente imposible descubrir la clave privada a partir de la publica.
En la imagen de abajo podemos ver un esquema gráfico con el proceso de cifrado:
Generación de claves para uso de cifrado asimétrico
Para la creación de claves asimétricas usare la herramienta GNUPG que se puede descargar desde la pagina oficial . En mi caso usare 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 .
2. Nos aparecerá este menú:
Código
Donde tenemos que elegir el tipo de cifrado, en nuestro caso usaremos RSA y RSA, o sea el numero 1.
Por favor seleccione tipo de clave deseado: (1) RSA y RSA (predeterminado) (2) DSA y Elgamal (3) DSA (solo firmar) (4) RSA (solo firmar) Su seleccion?: 1
3. Elegir el tamaño de la clave. Usaremos 2048 (por defecto).
Código
las claves RSA pueden tener entre 1024 y 4096 bits de longitud. De que tamano quiere la clave? (2048) 2048
4. Indicar el periodo de validez de la clave.
Código
Por favor, especifique el periodo de validez de la clave. 0 = la clave nunca caduca <n> = la clave caduca en n dias <n>w = la clave caduca en n semanas <n>m = la clave caduca en n meses <n>y = la clave caduca en n anyos Validez de la clave (0)? 0
Código
Ponemos <s> si elegimos que nuca caduque.
La clave nunca caduca Es correcto? (s/n) s
5. Introducir Nombre y Apellidos.
Código
Nombre y apellidos: Alex MadPitbull_99
6. Dirección de Correo Electrónico.
Código
Direccion de correo electronico: madpitbull99@elhacker.net
7. Poner comentarios.
Código
Comentario: Claves para cuenta @ehn.net
8. Proceso final. Nos preguntara si todos nuestros datos son correctos. Ponemos v (vale) si es así.
Código
Cambia (N)ombre, (C)omentario, (D)ireccion o (V)ale/(S)alir? v
9. Introducir contraseña. Recordadla o mejor apuntadla en algún lado.
10. Paso final. Sera necesario cargar el microprocesador con algo de carga y esperar a que se genere la clave.
Exportar clave publica
Para exportar nuestra clave publica en un fichero de texto usaremos la instruccion de abajo:
Código
Eso exportara la clave publica en un fichero de texto llamado clave_publica_ehn.pub . Si lo abrimos veremos nuestra clave:
gpg -a --export madpitbul99@elhacker.net >/home/mad/Escritorio/clave_publica_ehn.pub
Esa es la clave que tendremos que pasar a la persona que quiera enviarnos un mensaje cifrado.
Importar clave publica
El emisor debera importar nuestra clave publica en su anillo de claves (base de datos de claves) para que luego pueda cifrar un documento y enviarlo.
Código
gpg --import fichero_clave_publica.txt
Cifrar ficheros
Para que el emisor puede cifrar un documento deberá tener instalado el GPG pero no tiene porque crearse su propia clave privada si no la necesita.
Usaremos este comando para cifrar un documento de texto:
Código
gpg -a --encrypt -r madpitbull99@elhacker.net documento.txt
Donde documento.txt es el fichero a cifrar. Despues de ejecutar este comando nos habrá creado un fichero con un nombre igual que el anterior pero acabado en la extensión .asc (documento.txt.asc)
Ese es el fichero que el emisor deba enviar al receptor de forma segura (cifrado)
Descifrar ficheros
Para descifrar un fichero necesitaremos la clave privada que hemos introducido en el primer paso. Ponemos el comando de abajo y después introduciremos la contraseña privada.
Código
gpg -o documento_descifrado.txt --decrypt documento.txt.asc
Resumen
- Creamos las dos claves, la privada y la publica.
- Le pasamos la clave publica a la persona que nos quiera enviar un mensaje cifrado.
- El emisor cifra el mensaje/documento con nuestra clave publica.
- Envía el documento cifrado.
- El receptor descifrara el documento cifrado usando su clave privada.
Enlaces externos con mas información:
GNU Privacy Guard (GnuPG) Official How-To
Pretty Good Privacy (Wikipedia)
Encrypt your mail using Thunderbird (Lifehacker)
Criptografía Asimétrica (Wikipedia)
Solo se aceptan criticas constructivas. Cualquier mejora a este tutorial/guía es bienvenida.