• Generar claves RSA con openssl

    From Javier Prieto@2:341/14.43 to All on Tue Jun 3 13:19:52 2008
    Hola!


    Generamos clave privada de 2048 bits y la guardamos en clavepriv.pem (se podria
    securizar el acceso o guardarla en otro formato)


    openssl genrsa -out clavepriv.pem 2048

    Generating RSA private key, 2048 bit long modulus
    ..................+++
    ...........................+++
    e is 65537 (0x10001)

    Sacamos la publica de la privada ....

    openssl rsa -in clavepriv.pem -pubout -out clavepublica.out

    writing RSA key


    Este es el resultado :



    more clavepriv.pem

    -----BEGIN RSA PRIVATE KEY----- MIIEpQIBAAKCAQEAt3c3Rri3OM0/Prlu9N8Sg/5Myd/Jnv/PoGhpFafxx4iwflDZ IsfhV1IgBk9SzihWhtnQId5d3QNdcWcR3Nucc0FuSUidrv1FXAlgeAFVa8FDbZtL 9KoWuKbrg1dEcfhKYPUJUoerqnTRfETf96+997qu1kxFZc6NV5PSdAJ8ocijhdwL B7v+79yJiq1m9G2lIJ9+8ddLd9bd/3xdmc+4MR3TQrwZ3cgs8hcrhpgacHJM93Sz jT6s2cnklQd7O8h2yFiuEiDkoIF5bUdkQevuPfe6Fq56AVCcZiJn8LOiWzCTBwKT KXuVe6U/YmFWCcTMacyneRPytc50/V3veTEOTQIDAQABAoIBAH7q2PFyrUV9L0hc DXcWrn9jN4nb52W3/9EvCasykF8Bn17y3RNjhO7cYE0dKOJ3I0yMd6BGbVaMkmL1 83R+9B8DX6EQvAynJwlBb1v1SDuP6e50JTpvQ+KfjoNAppfVNNcYDEfslQQJZjX6 i5mUGO28VmDnSIbiOgMgvtEEO2XK839LUs33GLyByqS++DmpW+EF5BpY1BPicVER n3sh3gOsweFnFD3esUQFS751jKe45T/OC5DTV5nWT9s/y011J3OW15LfXWJu+l/k DxxOq3bfLcelQaHgjHhlwnyn5sroqkO5o8fMfWwt53IgqV/PA6EeCEEZeb8GGDP6 f59PS4ECgYEA5dMV2F9+mle9b0b9zoOa6VFNlZAbjFYygRPb2Cflh5z1tKpmDECC 52EqFhkutqt4bx7DTceHFdd5y9fGMmVS4C9Gg7MPUTLNtHEtN74pt8lZKiTho19b cvfz5vcBRWQNQMS1ximz6sFcfvmlNByBwQSWe9bwsG3n0iF3fsfB8S0CgYEAzFx2 FVUvO6LRnntxUbr7e2tjQGw8iCtEPV619VQAtpYj1KKNE1/I/UBvr28nomfZYzLE EZrU6+vvli5Xa/a9BiGNpm85U5bUfKnxFWPIfjcUPr3ilPex1G0/qKm6NCiQ1J6w tAh1Dk09pZfd0Tv01it0VPAAEIO40A3RW6kchaECgYEAz/TJzojSQQxlcBxXqpcx BC+6OTw1gS2580wp4JRxP93KApkxT6LMEFu+PlK5Dzdm+X1nkaia1iusnMN5Jr7C V/LPJnpOwNVshvrlxIvAqfl6QgUvWqn9ULGGNBaLQuO+jj2wkUfI8gHXFVoFn3qv +hyRoisijTJV0rDPtJtCJV0CgYEAgPoyBJC4uLiv94gNIvoR0fkasQQeyAoWjW0D Bgy4ToQ/pOnag8nGPh+23VAYAaXtS3A00q+XhjZoBa7FufwFnKL8lXhJA/qDrRJM d6V8WjxE6LxLDp2tfFZfAQHt5RFdJvPorhdQWXBiYeqRMobWpXzTdO/r+oBH2fd+ lI0M1UECgYEAs3elGnhqmTQ6VItdJkp34KvZdHE5yF5rqKfB1hApNlIod0DKtgVV kX38Z84CfFZyneO8PFmiPdb84/x4IPCzhu+qFWtnOvYUEHUtOVdUbqLUIsh5FbJ8 Cb6MKYLxlWCU7hmS7o4o3E8zGxa5sC81/Kp5u98r5N/RGX1n7FMaDWA=
    -----END RSA PRIVATE KEY-----

    more clavepublica.out

    -----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt3c3Rri3OM0/Prlu9N8S g/5Myd/Jnv/PoGhpFafxx4iwflDZIsfhV1IgBk9SzihWhtnQId5d3QNdcWcR3Nuc c0FuSUidrv1FXAlgeAFVa8FDbZtL9KoWuKbrg1dEcfhKYPUJUoerqnTRfETf96+9 97qu1kxFZc6NV5PSdAJ8ocijhdwLB7v+79yJiq1m9G2lIJ9+8ddLd9bd/3xdmc+4 MR3TQrwZ3cgs8hcrhpgacHJM93SzjT6s2cnklQd7O8h2yFiuEiDkoIF5bUdkQevu Pfe6Fq56AVCcZiJn8LOiWzCTBwKTKXuVe6U/YmFWCcTMacyneRPytc50/V3veTEO
    TQIDAQAB
    -----END PUBLIC KEY-----
    ===== cut end =====

    Javier

    --- FPD v2.9.040207 GoldED+/W32-MINGW 1.1.5-b20070116
    * Origin: Rafa STD Punto WeK (2:341/14.43)
  • From Xavier Caselles@2:343/107.999 to Javier Prieto on Tue Jun 3 18:16:18 2008
    Hola

    Generamos clave privada de 2048 bits y la guardamos en clavepriv.pem (se podri
    securizar el acceso o guardarla en otro formato)
    openssl genrsa -out clavepriv.pem 2048

    Gracias. Esto es lo que necesito, las cosas bien masticaditas.

    Repito, muchas gracias.


    Xavier

    --- BBBS/NT v4.01 Flag
    * Origin: Eye of the Beholder BBS - FIDO <> HTTP Gateway (2:343/107.999)
  • From Enric Lleal Serra@2:343/107.1 to Javier Prieto on Thu Jun 5 08:26:50 2008
    ­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?


    -
    A reveure!! .-'''''-.
    Enric .' `.
    : :
    : www.kishpa.com
    : _/| :
    : =/_/ :
    `._/ | .'
    ( / ,|...-'
    \_/^\/||__
    _/~ `""~`"` \_

    ... Todos nos equivocamos, pero a veces acertamos. ?Que ocasion es esta?
    --- FMail/Win32 1.60
    * Origin: Black Flag & Crossbones... Eye Of The Beholder BBS! (2:343/107.1)
  • From Javier Prieto@2:341/14.43 to Enric Lleal Serra on Fri Jun 6 01:18:46 2008
    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)
  • From Enric Lleal Serra@2:343/107.1 to Javier Prieto on Tue Jun 10 14:39:08 2008
    ­Hola Javier!

    El Viernes 06 Junio 2008 a las 01:18, Javier Prieto escribi¢ a Enric Lleal Serra:

    Pues la soluci¢n vendr  en otro cap¡tulo que se llamar  CERTIFICADOS
    PD. Prometo escribirlo :)

    Yo prometo leerlo.

    Una pregunta: por tanto, realmente generamos una firma para cada mensaje que escribimos en vez de ir "pegando" una £nica firma en cada mensaje. ¨Correcto?

    -
    A reveure!! .-'''''-.
    Enric .' `.
    : :
    : www.kishpa.com
    : _/| :
    : =/_/ :
    `._/ | .'
    ( / ,|...-'
    \_/^\/||__
    _/~ `""~`"` \_

    ... La MUERTE esta tan segura de su victoria, que nos da una VIDA de ventaja --- FMail/Win32 1.60
    * Origin: Black Flag & Crossbones... Eye Of The Beholder BBS! (2:343/107.1)