Cifrado y firma digital con OpenSSL: práctica de clave de sesión, RSA y DES

Informática y Telecomunicaciones4,76 KB

Práctica de cifrado y firma digital con OpenSSL

A continuación se recoge la secuencia de comandos empleada para generar claves, cifrar y descifrar mensajes, y firmar y verificar documentos entre dos usuarios mediante OpenSSL.

1. Historial de comandos de referencia

188 openssl rsautl -decrypt -inkey privada_alumno -in clave.sesion.cifrada -out clave.sesion
189 openssl rsautl -decrypt -inkey mens1.text.des -in clave.sesion -out mensajeuno
190 openssl enc --help

191 openssl enc -d -in mens1.txt.des -kfile clave.sesion -out mensaje1 -des

192 openssl enc -d -in firma1.des -kfile clave.sesion -out firma1 -des

193 openssl rsautl -verify -in firma1.des -out firma1 -inkey publica -pubin

194 openssl dgst mensaje1

195 openssl enc -d -in mens2.txt.des -kfile clave.sesion -out mensaje2 -des

196 openssl rsautl -verify -in firma2.des -out firma2 -inkey publica -pubin

197 openssl dgst mensaje2

198 openssl enc -d -in mens3.txt.des -kfile clave.sesion -out mensaje3 -des

199 openssl rsautl -verify -in firma3.des -out firma3 -inkey publica -pubin

200 openssl dgst mensaje3

201 cat firma3

202 echo "A qué hora es la entrega" > respuesta

203 openssl enc -e -in respuesta -kfile clave.sesion -out respuesta.des -des

204 cat respuesta.des

205 openssl dgst respuesta.des > resp.des.md5

206 cat resp.des.md5

207 openssl rsautl -sign -in resp.des.md5 -out firmaresp -inkey privada_alumno

208 openssl enc -e -in firmaresp -kfile clave.sesion -out firmaresp.des -des

2. Generación de la pareja de claves del Usuario1

Genera su pareja de claves pública y privada.

openssl genrsa -out privada.usuario1 2048
openssl rsa -in privada.usuario1 -pubout > publica.usuario1
cp publica.usuario1 ../usuario2

echo "Supercalifragilisticoexpialidoso" > clave.sesion

3. Cifrado de la clave de sesión

Usuario1 cifra la clave de sesión con la clave pública del Usuario2, que previamente ha recibido.

openssl rsautl -encrypt -inkey publica.usuario2 -in clave.sesion -out clave.sesion.cifrada -pubin
cp clave.sesion.cifrada ../usuario2

4. Creación y cifrado del mensaje

echo -e "Este fichero se va a utilizar para realizar pruebas de cifrado y descifrado con openssl.\nBuenas tardes." > fichero.txt

Usuario1 cifra ahora el fichero del mensaje con la clave de sesión.
openssl enc -e -des -in fichero.txt -out fichero.txt.des -kfile clave.sesion
openssl dgst fichero.txt > fichero.md5

5. Firma digital

Usuario1 firma el hash con su clave privada.
openssl rsautl -sign -inkey privada.usuario1 -in fichero.md5 -out fichero.md5.firma

Y ahora también se cifra la firma, con la clave de sesión, como cualquier fichero que se transmita a Usuario2.
openssl enc -e -des -in fichero.md5.firma -out fichero.md5.firma.des -kfile clave.sesion

cp fichero.txt.des fichero.md5.firma.des ../usuario2

6. Generación de la pareja de claves del Usuario2

Usuario2 genera su propia pareja de claves:

openssl genrsa -out privada.usuario2 2048
openssl rsa -in privada.usuario2 -pubout > publica.usuario2

Y transmite su clave pública a Usuario1, que la necesita para cifrar la clave de sesión.
cp publica.usuario2 ../usuario1

7. Descifrado y verificación por parte del Usuario2

Usuario2 descifra la clave de sesión con su clave privada.
openssl rsautl -decrypt -inkey privada.usuario2 -in clave.sesion.cifrada -out clave.sesion

Usuario2 descifra el fichero del mensaje con la clave de sesión.
openssl enc -d -des -in fichero.txt.des -out fichero.txt -kfile clave.sesion

Antes de leer el mensaje, comprueba su autenticidad de procedencia con la firma. Lo primero es descifrar el fichero de firma con la clave de sesión.
openssl enc -d -des -in fichero.md5.firma.des -out fichero.md5.firma -kfile clave.sesion

Una vez descifrado, verifica la firma con la clave pública de Usuario1.
openssl rsautl -verify -in fichero.md5.firma -out fichero.md5 -inkey publica.usuario1 -pubin

Ya con los ficheros en claro, se puede visualizar el hash de la firma:
cat fichero.md5

Este valor debe ser IDÉNTICO al obtenido con openssl dgst fichero.txt.

Descargar

PDF Word HTML