Criptografía
Metodología
Se recomienda seguir usando cherrytree para ir guardando las evidencias.
- GPG (GNU Privacy Guard)
- Generando el par de claves
- Compartiendo la clave pública
- Cifrando un mensaje
- Descifrando un mensaje
- Comprobando certificados con openssl y nmap
- Keypass
- Cifrando parte del disco duro con VeraCrypt
Referencias
- Páginas web
GNU Privacy Guard
Es una implementación open source de PGP. Vamos a ver cómo usarlo desde la línea de comandos. Lo primero que tenemos que hacer es generar el par de claves (pública y privada) para cada uno de los interlocutores. En este caso, por ejemplo, los interlocutores serán:
- Maria
- Javier
Generando el par de claves
Aunque el proceso para generar las claves será el mismo para ambos usuarios, comenzamos generando el par de claves para Maria. Para ello ejecutamos:
gpg --full-generate-key
En este caso, seleccionamos la opción 1 (RSA para cifrar y RSA para firmar) y pulsamos intro:
RSA permite claves de distinta longitud/tamaños. Tecleamos 4096 para la seleccionar la máxima longitud de la clave y pulsamos intro:
A continuación nos preguntará por cuánto tiempo queremos que el par de claves sea válido. En este caso, seleccionamos 10 días y pulsamos intro:
Confirmamos la selección anterior, tecleando y y pulsamos intro:
Nos preguntará el nombre del usuario. Lo tecleamos y pulsamos intro:
Después tecleamos el email y volvemos a pulsar intro:
Pulsamos intro cuando nos pregunte por los comentarios y nos pedirá que confirmemos que queremos crear el par de claves. Tecleamos la letra o y pulsamos intro para continuar:
Tecleamos un passphrase para la clave y pulsamos el botón OK:
para generar el par de claves de Maria:
Repetimos el mismo proceso para generar el par de claves para Javier. En este caso estamos utilizando la misma máquina virtual de Kali Linux para generar las claves de María y Javier pero, lo más normal, es que cada usuario genere las claves en su ordenador y luego se comparta únicamente la clave pública. Para generar las claves de Javier, seleccionamos las mismas opciones que cuando generamos el par de claves para María. Confirmamos con la letra o y pulsamos intro:
para generar el par de claves de Javier:
Compartiendo la clave pública
Una vez generadas las claves, para que María y Javier puedan intercambiar mensajes cifrados entre ellos, deben compartir su clave pública. Cuando María quiera enviar un mensaje cifrado a Javier, utilizará la clave pública de Javier para cifrar el mensaje y Javier usará su clave privada para descrifrarlo. Veamos cómo hacerlo con un ejemplo. Lo primero que haremos será exportar la clave pública de Javier. Para ello, le pasaremos a gpg los siguientes parámetros:
- --armor-- para que la clave se muestre legible en caracteres ASCII
- --export-- [email protected] para exportar la clave pública que hemos creado
Para guardar la clave pública en un archivo, sólo tenemos que redireccionar la salida del comando a un fichero:
Si queremos, podemos verificar el contenido del fichero que se ha creado:
Una vez tenemos la clave pública de javier en un fichero (javier.pub) podemos compartir ese fichero con María para que pueda cifrar la información que quiera enviar a Javier.
Cifrando un mensaje
Una vez creado el fichero javier.pub podemos compartirlo con quién queramos o incluso meterlo en un certificado. En este caso, imaginemos que lo hemos compartido con María para que pueda enviarnos mensajes cifrados. Lo primero que hará María con la clave de Javier es importarla. Para ello, utilizamos nuevamente el comando gpg con la opción --import y el nombre del fichero:
Una vez importada la clave pública de Javier, ya podemos usarla para cifrar los mensajes que le enviemos. Creamos un mensaje usando cualquier editor de texto, como por ejemplo Vim, y lo guardamos:
Para cifrar el mensaje utilizaremos el comando gpg seguido de las siguientes opciones:
- --encrypt-- para indicar que queremos cifrar el mensaje
- --armor-- para que se muestre legible en caracteres ASCII
- < fichero_con_texto_a_cifrar redireccionamos el fichero con el texto a cifrar a stdin del programa gpg
Tras ejecutar el comando, como podemos tener la clave pública de muchos usuarios importada, nos pedirá el email del usuario al que queramos enviar el correo. En este caso [email protected]:
Pulsamos intro y veremos que se ha añadido:
pulsamos intro nuevamente para obtener el texto cifrado:
Una vez tenemos el texto cifrado, lo copiamos:
y podemos pegarlo en un email o en cualquier otro medio. La clave privada de Javier es la que puede descifrar el mensaje. Es decir que, aunque otra persona interceptase la comunicación, si no tiene la clave pública de Javier, no debería poder descrifrar el mensaje. En este caso, copiamos el mensaje cifrado en un fichero de texto:
y lo guardamos:
Descifrando un mensaje
Una vez Javier reciba el mensaje de María, puede descrifrarlo usando su clave privada. Para ello, utilizamos el comando gpg pasandole la opción --decrypt y el fichero a descifrar:
Nos pedirá a continuación el passphrase de la clave privada de Javier:
y tras pulsar el botón OK, descrifrá el mensaje que ha enviado María:
Comprobando certificados con openssl y nmap
Vamos a ver como podemos usar el programa s_client de la suite OpenSSL y Nmap para verificar los datos de los certificados. Como vimos en el tema web, para conectarnos a una página web que este usando TLS/SSL para cifrar las comunicaciones, podemos usar s_client:
En la respuesta podremos ver, entre otros, quién ha emitido el certificado, la versión del protocolo que se está usando para cifrar la comunicación o el tamaño de clave:
Podemos ver la información mejor organizada usando el script ssl-cert de nmap:
Otro script de Nmap útil es ssl-enum-ciphers que nos va a permitir listar todos los ciphers disponibles:
KeyPass
KeyPass es un gestor de contraseñas. Para usarlo, lo descargamos de la web oficial de KeyPass:
Seleccionamos un idioma:
Aceptamos la licencia si estamos de acuerdo:
En el siguiente paso nos permite cambiar la ruta de instalación. Si estamos conformes con la ruta por defecto pulsamos Next:
A continuación, volvemos a hacer click en Next:
Marcamos las casillas que queramos y pulsamos, nuevamente, en Next:
Finalmente pulsamos en Install:
Tras finalizar la instalación, pulsamos el botón Finish:
para ejecutar el programa:
Para crear una nueva base de datos, hacemos click en el botón New:
Pulsamos OK para continuar con la creación de la base de datos:
A continuación, le damos un nombre al fichero de base de datos de KeyPass y lo guardamos:
A continuación nos pedirá la contraseña para abrir el fichero. Si decidimos usar un programa como KeyPass para gestionar nuestras credenciales, al menos, la contraseña que descifre el fichero debería ser segura. Para ello, entre otros, podemos:
- No utilizar contraseñas que ya estemos usando en otros servicios
- Usar un mínimo 24 caracteres unicode como ejemplo:
- números
- letras mayúsculas y minúsculas
- símbolos como por ejemplo: \/-@*-.
- Intentar que la contraseña sea aleatoria
Una vez introducida, pulsamos el botón OK:
En este caso, aceptamos las opciones por defecto y pulsamos el botón OK:
A continuación nos preguntará si queremos crear una hoja donde podemos anotar la contraseña para que, en caso de no recordarla, podamos acceder al fichero. Atendiendo a qué es mejor recordar la contraseña que tenerla escrita en alguna parte, selecciono saltarme este paso:
Se creará la base de datos con un par de ejemplos:
Podemos borrarlos, haciendo click con el botón derecho sobre el ejemplo que queramos borrar y pulsando sobre Delete Entry:
Para crear una nueva entrada, pulsamos el Icono de la llave amarilla:
Completamos todos los datos. Por ejemplo, en este caso ponemos nuestras credenciales de GitHub y pulsamos OK:
para almacenarlas:
Ahora si vamos a la web de login de GitHub y hacemos click en el campo username:
volvemos a KeyPass, hacemos click con el botón derecho del ratón sobre GitHub y seleccionamos Perform Auto-Type o pulsamos las teclas Ctrl+v:
Automáticamente, completará los campos de credenciales en GitHub e intentará logarse:
Una vez hayamos terminado de trabajar con KeyPass, pulsamos el botón del disquete para guardar las nuevas credenciales creadas o los cambios realizados:
y tras guardar los cambios ya podemos salir.
VeraCrypt
Este tutorial está basado VeraCrypt Beginner's Tutorial. Descargamos VeraCrypt para el sistema operativo que estemos usando desde la web de descargas:
Tras descargarlo, lo ejecutamos, aceptamos la licencia si estamos de acuerdo y pulsamos en Next:
Como queremos instalarlo, dejamos la opción Install seleccionada y hacemos click en Next:
Tras revisar las opciones y la ruta por defecto, hacemos click en Install:
Al finalizar la instalación nos notificará si ha sido realizada correctamente. Hacemos click en OK:
y después click en Finish:
Nos preguntará si queremos ver el tutoríal de VeraCrypt. En este caso, selecciono No:
Tras instalarlo, ejecutamos VeraCrypt:
Hacemos click en Create Volume:
para crear un contenedor de VeraCrypt. Un contenedor de VeraCrypt es un disco duro virtual cifrado que guardaremos en un archivo. Vamos a ver cómo funciona. Seleccionamos la opción Create an encrypted file container y pulsamos Next:
Seleccionamos Standard VeraCrypt volume y hacemos click en Next:
Pulsamos sobre el botón Select File...:
Damos un nombre al contenedor y pulsamos el botón Save:
Pulsamos en Next para continuar:
En este caso, dejamos las opciones por defecto y pulsamos el botón Next:
Seleccionamos el tamaño del disco duro que queramos y pulsamos en Next:
Ponemos una contraseña para poder descifrar la información del contenedor y pulsamos en Next:
A continuación nos preguntará si queremos almacenar archivos de más de 4GB en el contenedor. En este caso, selecciono Yes y pulso en Next:
Por último, movemos el ratón de forma aleatoria hasta que la barra llegue al final y después pulsamos el botón format:
para comenzar a crear el contenedor:
Una vez termine de crearlo, nos lo notificará:
y nos preguntará si queremos crear otro contenedor. En este caso, seleccionamos Exit para salir:
Podemos verificar que se ha creado un archivo del tamaño que seleccionamos. En este caso 10GB:
Para abrir el disco duro virtual que hay en este archivo, volvemos a VeraCrypt, hacemos click en la letra que queramos y pulsamos el botón Select File...:
Seleccionamos el archivo que hemos creado y hacemos click en el botón Open:
Una vez seleccionado el fichero y la letra, hacemos click sobre Mount:
Nos preguntará la contraseña para poder descifrar el contenido del archivo y montar el disco duro virtual. La introducimos y hacemos click en el botón OK:
Una vez termine de montar el disco duro virtual, veremos la ruta del archivo al lado de la letra P:
y podremos ver que se ha creado una nueva unidad de disco:
podemos usar esta nueva unidad como cualquier otra unidad de almacenamiento y guardar en ella la información que queramos que esté cifrada:
Una vez terminemos de usar la unidad, antes de apagar el ordenador, debemos desmontar la unidad. Para ello, volvemos a VeraCrypt y pulsamos el botón Dismount:
para desmontar el contenedor de VeraCrypt: