Hola Enric!
Jueves 05 Junio 2008 08:26, Enric Lleal Serra escribio a Javier Prieto:
Hola Javier!
El Martes 03 Junio 2008 a las 13:19, Javier Prieto escribi¢ a All:
more clavepublica.out
¨Y ser¡a ‚ste bloque el que copiar¡amos como firma en nuestros mensajes?
Si ... para que todos tuvieran nuestra clave publica y pudieran verificar nuestros mensajes.
La gracia de este algoritmo consiste en que aquello que yo cifre con una de las
claves, solo puede ser descifrado por la otra.
O sea, imaginemonos que quiero publicar un mensaje en Fido y quiero que todos esteis seguros de
que soy yo quien lo ha enviado (no lo encriptar‚, ya que me da lo mismo que lo lean todos, solo lo firmar‚ para que esteis seguros de que he sido yo el que lo
ha escrito).
Para eso yo necesito un secreto, algo que sea solo m¡o y solo yo pueda utilizarlo , esa es mi
clave privada (clavepriv.pem) ... y necesito adem s algo publico, algo que conozcais todos y que pueda ser adem s utilizado para verificar que soy el poseedor de la clave privada, esa es la clave publica y ese fichero es el que yo pondr¡a a disposici¢n publica para todo aquel que quiera verificar mis mensajes (cablepublica.out).
Pues vale, hecho eso vamos a hacerlo (hay varias formas...) :
1 ) genero mis claves clavepriv.pem (pa mi pa siempre) y clavepublica.out (pa todos vosotros)
2 ) Escribo mi mensaje, mensaje.txt
3 ) Genero la firma ...
4 ) Mando el mensaje y su firma (Podr¡a ir en el mismo mensaje, a efectos de la
demo
lo dejamos separado...)
5 ) Recibes el mensaje y lo verificar con la clave publica que he distribuido
El paso 1 ya lo tenemos ...
2 ) notepad/vim ;) "Hola a todos" en mensaje.txt
3 )
openssl dgst -sha1 -sign clavepriv.pem -out firma.sha1 -hex mensaje.txt
more firma.sha1
SHA1(mensaje.txt)= 5b9a08c61265bd5199845b961836fe48555495c833b9840cb31d919bc1268
0a9f80f611e976ed00b3e1bf52c717fe9c48ff614202f12a438550e5982ad9a193b5070c2de7962
8 dc18965e23a7f63c4ce2a519514e2b075e52e23ec51b1de27ecf5f757ea4d3a8824948be30bbb58
7 0221a946c5d4c420fc79894b16ecf3b6361fcf2fc95b0512841cf9deaf50806e5f8ba973f679cd6
f 30db4f574d1d71b784e1e45bb19e837be8ac798ccea13ac689d6cadd63374572a7a8081e86e2642
d 63596c5c7254b0a41203abe6297293d5eade87f8ca890cb7c14132c132c9df4666d291a217804dc
7
cf97115b4e82024d0f450752db517f58afffe5588863e09ffae
4 ) Te envio mensaje.txt y su firma, firma.sha1
5 ) Lo verificas ...
openssl dgst -sha1 -verify clavepublica.out -signature firma.sha1 C:\>mensaje.txt
Verified OK
6 ) He hecho trampa..... el comando real del paso 3 es :
openssl dgst -sha1 -sign clavepriv.pem -out firma.sha1 mensaje.txt
Sin -hex , eso lo que produce es la salida en hexadecimal para que se pueda insertar en este correo , si lo quereis probar, no useis el comando -hex en el paso 3 ....
Y vuala... as¡n ya sabes que te lo he mandado yo, porque esa firma solo ha podido ser generada con el poseedor de mi clave privada (que en principio soy solo yo).
¨Que hemos hecho realmente en el paso 3 camuflado con ese comando?, hemos generado un resumen o hash o digest de mi mensaje (hace unos meses hablamos de los hashes en estas reas), ese hash es una funcion unidireccional que dada una
cadena de entrada, genera un £nico c¢digo/n£mero para ese mensaje, de tal manera que si modificamos cualquier bit del mensaje original ese c¢digo var¡a y
es distinto y £nico para cada cadena de entrada.
Para ver el hash de los ficheros podeis usar el comando :
openssl dgst -sha1 mensaje.txt
SHA1(mensaje.txt)= 1511aa0b826d027c054a4f3368cb38ed8b6050e7
En este caso la funci¢n que usamos es el SHA1, pero podriamos usar otros como MD5, ... hay varios, si modificais cualquier cosa del mensaje original, una letra, de mayusculas a minusculas el codigo hash resultado varia.
Con lo cual, adem s de verificar la autenticidad del mensaje, vamos a lograr verificar su integridad, es decir, que con este proceso de firma, adem s de que
esteis seguros de que he sido yo quien ha escrito el mensaje, estar‚is seguros de que el mensaje es exactamente lo que yo queria decir... sin que nadie lo haya manipulado.
Lo siguiente es el proceso de autenticaci¢n... ¨Como podeis estar seguros de que lo he emitido yo?, pues usando algo que solamente yo poseo, mi clave privada.
El comando del paso 3 lo que hace internamente es, genera el hash (digest) del fichero mensaje.txt y lo CIFRA con mi clave privada, el resultado de cifrar el hash del mensaje con mi clave privada es el fichero firma.sha1, y lo envio junto con mi mensaje.txt para que verifique su autenticidad el que quiera.
Paso 5 ...
El proceso de verificaci¢n consiste en DESCIFRAR (con mi clave publica que os he enviado) el fichero firma.sha1, si el proceso de descifrado es correcto (es decir, mi clave publica lo descifra, luego ha sido cifrado con mi clave privada), ya me has autenticado, solo yo he podido usar mi clave privada, pero adem s al descifrarlo obtiene el hash del mensaje original... con lo cual, lo siguiente que hace el comando del paso 5 una vez descifrada la firma, es generar el codigo hash del mensaje que te he enviado (mensaje.txt) y lo compara
con el obtenido de la firma ... si son iguales, ole, firma verificada (autenticado e integro), si alguien lo ha modificado por el camino ... entonces
sabes que yo no he dicho eso (es falso).
(Todo esto lo hace de una el comando del paso 5)
Ese es el proceso de firmado.
Ahora bien ¨Esto es tan bonito y sencillo? ... donde est la vulnerabilidad de los algoritmos de clave publica, pues precisamente en la clave publica ...
¨¨¨¨ Como sabes t£ que la clave publica que crees que es m¡a, es realmente m¡a ???, ese fichero clavepublica.out que yo voy publicando... ¨¨como sabes realmente que lo publico yo?? y no es un ente maligno y avieso que quiere enga¤arte ...
Pues la soluci¢n vendr en otro cap¡tulo que se llamar CERTIFICADOS .
PD. Prometo escribirlo :)
Saludos
Javier Prieto
Javier
--- FPD v2.9.040207 GoldED+/W32-MINGW 1.1.5-b20070116
* Origin: Rafa STD Punto WeK (2:341/14.43)