Cifrar ficheros con algoritmos asimétricos mediante la herramienta gpg.
Entramos con un usuario de la máquina (en este ejemplo, administrador). Lo primero será generar un par de claves de criptografía asimétrica, nuestra propia clave pública
y clave privada. El comando es
alumno$ gpg --gen-key
En el proceso de generación de la clave nos preguntarán varios detalles. El primero es el tipo de clave. La herramienta nos ofrece cuatro opciones. Los nombres se corresponden con el tipo de algoritmo asimétrico asociado (hay varios tipos, como también ocurría en criptografía simétrica: DES, AES, etc.). Es decir, una clave de tipo DSA se utiliza en un algoritmo DSA, y una
clave Elgamal, en un algoritmo Elgamal. Las dos primeras opciones ofrecen dos algoritmos, luego generan dos pares de claves: en total, cuatro claves, dos públicas y dos privadas. El motivo es que generalmente se utiliza una clave (un par) para cifrar y otra diferente (otro par) para firmar, como veremos en el siguiente apartado de esta unidad. Elegimos la opción 2, que tiene algoritmos distintos, y así veremos claramente cuándo se utiliza cada clave.
A continuación nos pregunta el tamaño de la clave del algoritmo DSA. Por defecto ofrece 2 048, pero en este ejemplo elegimos el mínimo, 1.024, para tardar menos en generarla.
La siguiente pregunta es el periodo de validez de la clave. Ya estamos advertidos de los problemas que supone proteger la clave privada. Por si la perdemos, conviene fijar una fecha de caducidad para que no se pueda usar más allá de ese día. En nuestro ejemplo no hace falta tanta seguridad y elegiremos que nunca caduque.
A continuación nos pide algunos datos para identificar la clave. Ya sabemos que en el llavero se pueden almacenar varias claves (de hecho, estamos generando dos pares ahora mismo). Para elegir una u otra en cada ocasión, tenemos que identificarlas fácilmente. En este caso nos pedirá un nombre, una dirección de correo y un comentario. La herramienta gpg nunca nos enviará un correo; pero es una forma de contactar con el dueño de la clave (entregaremos nuestra clave pública a mucha gente, y ellos tendrán las claves públicas de otras personas).
El siguiente paso es elegir la clave simétrica que protegerá nuestras claves. Como siempre, debe ser una clave fácil de recordar para nosotros y difícil de averiguar para cualquier otra persona. Si la olvidamos, no podremos utilizar nuestras claves asimétricas.
Ya no hay más preguntas. Ahora la herramienta ejecuta los procedimientos matemáticos para obtener las claves asimétricas que hemos solicitado. Estos procedimientos necesitan muchos datos aleatorios, por lo que nos pide que generemos actividad en el sistema para ayudarle.
En poco tiempo el proceso termina y ya tenemos nuestras claves creadas.
Para trabajar con las claves debemos utilizar la propia herramienta. La lista de claves la obtenemos con el parámetro list-keys. En pantalla aparecerá nuestra clave principal y la subordinada.
administrador$ gpg –-list-keys
Comparado con el caso práctico del cifrado simétrico, estamos en el paso 13 y todavía no hemos cifrado nada: como ya suponíamos, la criptografía asimétrica es un poco más complicada. Ahora tenemos que comunicar nuestra clave pública a quien esté interesado en enviarnos un mensaje cifrado. Primero tenemos que sacarla del llavero. El parámetro es export:
administrador$ gpg –a –-export –o /tmp/administrador.pub administrador
Hemos utilizado los parámetros a (armor) para que el resultado no sea binario y o (output) para guardarlo directamente en un fichero (si no, aparece por la salida estándar). El fichero lo ponemos tranquilamente en /tmp porque no nos importa que otros usuarios lo copien.
En la máquina tenemos un segundo usuario llamado davidmanzano. Entramos con este usuario para enviar un mensaje cifrado al usuario alumno con la misma herramienta gpg. Para coger las claves públicas de administrador utilizamos el parámetro import:
davidmanzano$ gpg -–import /tmp/david.pub
Podemos consultar las claves disponibles en el llavero con el mismo parámetro list-keys que vimos anteriormente:
davidmanzano$ gpg -–list-keys
Vamos a crear un fichero llamado mensaje y lo cifraremos para enviárselo al usuario alumno. Los comandos serían:
davidmanzano$ nano > mensaje
davidmanzano$ gpg –v –a –o /tmp/mensaje.cifrado --encrypt --recipient alumno mensaje
Los parámetros a y o ya los conocemos (dejamos el fichero en /tmp porque no nos importa que otros usuarios puedan leerlo: sin la clave privada, el contenido es ininteligible). Hemos añadido el parámetro v (verbose) para obtener más información. En este caso, nos sirve para conocer que utilizará la clave subordinada (Elgamal), en lugar de la clave primaria (DSA).
El parámetro encrypt indica que deseamos cifrado asimétrico y el parámetro recipient va seguido del identificador de la clave pública que queremos utilizar. Como ya sabemos, el cifrado utiliza la clave pública del receptor.
Una vez introducido ese comando, la respuesta es una advertencia: no hay seguridad de que esa clave pública sea realmente la clave pública de alumno. Cualquiera podría haber cambiado el fichero /tmp/ david.pub antes de que davidmanzano hiciera el import de las claves. Como ayuda, el comando nos ofrece la huella (fingerprint) de la clave y nos pide la confirmación de que es la clave que queremos utilizar.
Podemos volver a la sesión del usuario administrador, obtener la huella de su clave pública y compararla con la que aparece en la sesión de profesor. El parámetro para obtener la huella es fingerprint:
administrador$ gpg -–fingerprint
Efectivamente, las huellas coinciden y podemos confiar en que la clave importada en davidmanzano es correcta.
Confirmamos que queremos usar esa clave y se crea el fichero cifrado. Ahora podemos volver a la sesión del usuario administrador e intentar descifrarlo. El parámetro
es decrypt:
administrador$ gpg -–decrypt /tmp/mensaje.cifrado
Como esperábamos, el comando nos solicita la contraseña que da acceso a la clave privada. En la ventana aparece qué clave necesita (en nuestro caso, la clave del algoritmo Elgamal), con toda su identificación.
Si hemos introducido bien la contraseña aparecerá el mensaje que nos ha enviado el usuario davidmanzano:
No hay comentarios:
Publicar un comentario