LAB 3 : La Criptografía con OpenSSL
Objetivo
El objetivo de este laboratorio es familiarizarte con los servicios básicos de seguridad.
Notablemente el cifrado simétrico, el cifrado asimétrico, el hash, la
firma digital y su verificación, y la certificación.
Estos trabajos prácticos se basan en la suite de software OpenSSL.
OpenSSL es una caja de herramientas criptográficas que implementa los protocolos SSL y
TLS que ofrece una biblioteca de programación en C que permite realizar
aplicaciones cliente/servidor seguras basadas en SSL/TLS.
Rendu
Están invitados a entregar, en su Google Classroom, un informe con los
comandos que has lanzado y los resultados obtenidos con capturas de pantalla.
Un solo informe debe ser entregado por grupo.
1. CIFRADO SIMÉTRICO
El algoritmo RC4
El comando que te permite usar el cifrado simétrico es el comando
#openssl enc–in fichier_clair–out resultat_obtenu
Crear el archivo archivo_nom_eleve que contenga texto claro
#gedit nombre_archivo_estudiante
Cifrar este archivo con el algoritmo RC4
# openssl enc–rc4 -in nombre_del_archivo_estudiante -out archivo_cifrado_algoritmo
NB: openSSL nos da la posibilidad de proporcionar una contraseña como entrada: siendo
dado el contraseña, openSSL deriva una clave de cifrado.
- Verificar que el mensaje en archivo_nombre_estudiante.enc es realmente ininteligible
Este archivo cifrado se transmite a su compañero que también podrá descifrarlo.
1
- Escribir el comando que permite descifrarlo y así produce el archivo
#openssl enc–RC4 -d–in fichier_chiff_rc -out fichier_dechiff_rc
- Verificar que el mensaje descifrado sea idéntico al archivo original
#diff nombre_archivo_estudiante archivo_descifrado_rc
El algoritmo DES
Para cifrar el archivo archivo_nom_eleve con el algoritmo DES con clave explícita:
# openssl enc -des -in nombre_archivo_estudiante -out archivo_cifrado_des -k
0123456789ABCDEF
¿Cuál es el comando que permite descifrar archivo_chif_des?
Verificar que el archivo descifrado es idéntico al archivo inicial.
2. CIFRADO ASIMÉTRICO
El cifrado asimétrico RSA requiere el uso de un par de claves: una clave
publique et une clé privée qu’il faut tout d’abord les générer.
Generación de clave privada/pública RSA
En openSSL, las claves RSA generadas se almacenan en un archivo con la extensión
La instrucción a utilizar es openssl genrsa.
Utilizar esta instrucción para:
- Generar un par de claves de 1024 bits y almacenarlo en el archivo
[Link]
#openssl genrsa -out [Link] 1024
- Muestra el archivo utilizando el comando cat. ¿Qué observas?
Una forma de visualizar las claves en formato completo es utilizar la commandersa.
Mostrar entonces las claves en formato hexadecimal, eliminando la salida
normalmente producida por la instrucción rsa.
#openssl rsa–in [Link]–text -noout
- Extraer la clave pública de la clave privada y guardar el resultado en el archivo
[Link]
#openssl rsa–in [Link]–pubout–out [Link]
Cifrado de la clave RSA por el algoritmo
Ahora vamos a utilizar el algoritmo AES256 para cifrar la clave privada.
2
- Escribir el comando que permite cifrar el archivo [Link] producido así
un [Link].
#openssl enc–AES256 -in [Link] -out [Link]
Nota: el archivo que queremos cifrar es aquel que contiene el par de claves.
privada/pública ! Esto hará que cada vez que queramos utilizar la información
almacenada en el archivo de claves, debemos poner la contraseña.
Cifrado/descifrado de datos con RSA
- Escribir el comando que permite cifrar el archivo inicial archivo_nombre_alumno con la
clave publica [Link] produce así un archivo archivo_nombre_estudiante.rsaenc
(utilizar la instrucción openssl rsautl).
#openssl rsautl–pubin–inkey [Link]–in fichier_nom_eleve–encrypt–out
fichero_cifrado_rsa
Escribe el comando que permite descifrar el archivo archivo_nom_eleve.rsaenc
y produce así un archivo archivo_nom_eleve.rsadec.
#openssl rsautl–inkey [Link]–in fichier_chiff_rsa.rsa–decrypt–out
fichero_descifrar_rsa
-Verificar la igualdad de los dos archivos archivo_nom_eleve y archivo_dechiff_rsa.
3. FIRMA DIGITAL
Generación de una huella de un archivo
Para firmar un documento primero se calcula una huella de ese documento.
La instrucción a utilizar para calcular la huella es:
#openssl dgst <-algo> -out <salida> <entrada>
-Calcular el valor de la huella del archivo archivo_nombre_estudiante con el algoritmo
MD5 y ponerlo en un fichero fichier_nom_eleve.md5.
¿Cuál es el tamaño de esta huella?
- Calcular el valor de la huella del mismo archivo con el algoritmo SHA1 y
la poner en un archivo archivo_nombre_alumno.sha1.
¿Cuál es el tamaño de esta huella?
- Comparar el resultado de las dos funciones de hash. ¿Qué es lo que tú?
¿Nota?
3
Firma de un archivo
Firmar un documento equivale a firmar su huella. La instrucciones a utilizar en este
cas est :
#openssl rsautl–sign–in empreinte_fichier–inkey [Link]–out fichier_sig
- Firmar el archivo archivo_nom_eleve.sha1 y poner el resultado en el archivo
fichier_sig. En este caso, ¿cuál es la clave que debes usar para firmar?
Luego queda verificar que la huella producida así en el archivo
fichier_nom_eleve.sha1 es el mismo que se puede calcular. Utilizar la instrucción
openssl rsautl -verificar.
#openssl rsautl–verificar–en fichier_sig -out empreinte2–pubin–inkey [Link]
¿Cuál es la clave que debe utilizar para verificar la firma del archivo?
fichero_sig?
4. CERTIFICADO DIGITAL
Generación de la clave privada
- Generar un par de claves RSA de tamaño 1024 bits y almacenar el resultado en el
fichierserver_cle.pem
Generación de una solicitud de creación de un certificado
Crear un archivo de solicitud de firma de certificado (CSR)
Solicitud):
#openssl req–new -key serveur_cle.pem–out serveur_cert.pem
Firma del certificado
Para firmar el certificado se ofrecen dos posibilidades:
- Auto firmar el certificado
- Firmar el certificado por una autoridad de certificación (AC)
Firma automática de un certificado
- Firmar el archivo [Link] con la clave privada contenida en el archivo
server_cle.pemet almacenar el resultado en el archivo server_cert.crt. El certificado
debe tener un período de validez de un año.
#openssl req–new–x509–days 365–key serveur_cle.pem–out serveur_cert.crt
4
- Mostrar el contenido del certificado en formato texto:
#openssl x509 -in serveur_cert.crt -text -noout
Firma por una autoridad de certificación (AC)
El primer paso consiste en generar una clave privada RSA para la AC de tamaño 2048.
bits y almacenar el resultado en el archivo [Link]
#openssl genrsa -out [Link] 2048
Generar un certificado para el AC con un período de validez de 730 días y almacenar
el resultado en el archivo [Link].
#openssl req -new -x509 -days 730 -key [Link]–out ca_crt
Rq:[Link] es el certificado autofirmado de la autoridad de certificación que permitirá
firmar los certificados creados.
- Firmar la solicitud del certificado del servidor (el archivo [Link]) por la autoridad de
certificación ACen utilizando la siguiente instrucción:
#openssl x509–req–in [Link]–out [Link]–CA [Link] -CAkey [Link]
-CAcreaserial -CAserial [Link]
Rq: El certificado firmado es el archivo [Link]