Criptografía asimétrica.
====================================================================
Cifrando que es gerundio - Parte I
Cifrando que es gerundio - Parte II
====================================================================
====================================================================
Cifrando que es gerundio - Parte I
Cifrando que es gerundio - Parte II
====================================================================
Continuamos con esto del cifrado. Esta vez, vamos a usar la criptografía asimétrica con la misma herramienta (gpg) y usando la misma maquina CentOS.
Lo primero que vamos a hacer es crear un par de claves de criptografía asimétrica, nuestra clave pública y la clave privada. Para ello usamos el comando:
sudo gpg --gen-key
Al usar el comando nos aparecen unas opciones con el tipo de clave que vamos a usar.
Para este ejemplo vamos a usar la opción dos. que tiene algoritmos distintos - una de tipo DSA que se usa en el algoritmo DSA y la otra Elgamal en un algoritmo Elgamal. Generan dos pares de claves, es decir cuatro claves, dos públicas y dos privadas, esto es porque normalmente se una una clave (un par) para cifrar y otra diferente (el otro par) para firmar- así veremos cuando se utiliza cada clave.
Acto seguido nos pregunta por el tamaño de la clave del algoritmo DSA. Para este ejemplo voy a usar 1024 para tardar menos en generarla, pero por defecto son 2048 y es el que se debe usar.
A continuación nos pide que establezcamos el periodo de validez de la clave. No creo que haga falta recordar la importancia de proteger la clave privada, si la perdiésemos, ésta debería de tener una fecha de caducidad para que pasada dicha fecha, ya no se pueda usar. Para el ejemplo voy a poner que caduque en un día.
También nos indica que se debe construir un ID de usuario para identificar la clave. Sólo debemos rellenar los datos que nos piden.
Para ver la lista de claves usaremos sudo gpg --list-keys y en pantalla veremos la clave principal y la subordinada.
Lo siguiente es sacar la clave del llavero con:
sudo gpg -a --export -o cifrado.pub
En la maquina tenemos un segundo usuario llamado Pepe (su pepe). Hacemos un cambio de usuario para poder enviar un mensaje cifrado al usuario Rober usando:
sudo gpg --import /home/rober/Escritorio/cifrado/cifrado.pub
Obviamente, el usuario pepe debe tener permisos (estar en el visudo con los permisos oportunos, por ejemplo) para poder realizar esta acción. Podemos comprobar de nuevo con sudo gpg --list-keys que se ha creado la lista de claves.
Ahora vamos a crear un archivo llamado mensaje (desde el usuario pepe) para enviárselo al usuario Rober y lo cifraremos (si, hasta ahora no habíamos hecho nada jeje) con los comandos:
sudo gpg -v -a -o /home/rober/Escritorio/cifrado/mensaje.cifrado --encrypt --recipient rober mensaje
Analizando un poco los parámetros:
Solo nos falta volver a usuario rober y descifrar el mensaje, lo que haremos de la siguiente manera:
sudo gpg --decrypt /home/rober/Escritorio/cifrado/mensaje.cifrado -o prueba.txt
En ese momento nos pide la contraseña de acceso a la clave privada (en este caso la del algoritmo Elgamal) y al ponerla podremos ver (en el archivo de salida) el mensaje que pepe mandó a rober.
Y con esto habríamos terminado.
No es recomendable usar el cifrado asimétrico para cifrar los paquetes que se intercambian en una red local, ya que esto ralentizaría el trafico de la misma. Para esto existe una solución, el esquema híbrido
Usamos la criptografía asimétrica solo para el inicio de sesión, cuando necesitamos un canal seguro donde establecer la clave simétrica aleatoria que se usará en la conversación.
Usaremos criptografía simétrica durante la transmisión, usando la clave simétrica pactada en el inicio de sesión.
sudo gpg -v -a -o /home/rober/Escritorio/cifrado/mensaje.cifrado --encrypt --recipient rober mensaje
Analizando un poco los parámetros:
- -v (verbose) lo usamos para saber que usará la clave subordinada (Elgamal) en lugar de la primaria (DSA).
- -a (armor): para que el resultado no sea binario.
- -o (output): como ya hemos dicho antes, indica la salida (igual que poner >)
- encrypt: nos dice que usaremos el cifrado asimétrico.
- recipient: va seguido del identificador de la clave publica que queremos utilizar.
Solo nos falta volver a usuario rober y descifrar el mensaje, lo que haremos de la siguiente manera:
sudo gpg --decrypt /home/rober/Escritorio/cifrado/mensaje.cifrado -o prueba.txt
En ese momento nos pide la contraseña de acceso a la clave privada (en este caso la del algoritmo Elgamal) y al ponerla podremos ver (en el archivo de salida) el mensaje que pepe mandó a rober.
Y con esto habríamos terminado.
No es recomendable usar el cifrado asimétrico para cifrar los paquetes que se intercambian en una red local, ya que esto ralentizaría el trafico de la misma. Para esto existe una solución, el esquema híbrido
Usamos la criptografía asimétrica solo para el inicio de sesión, cuando necesitamos un canal seguro donde establecer la clave simétrica aleatoria que se usará en la conversación.
Usaremos criptografía simétrica durante la transmisión, usando la clave simétrica pactada en el inicio de sesión.
Roberto García (@1gbDeInfo)