Grupo 14

De Wikihaskell
Saltar a: navegación, buscar
RSA-Haskell
Página sobre la biblioteca RSA-Haskell.
Lenguaje Haskell
Biblioteca RSA-Haskell
Autores Soledad Batista Rivero
Maria Jesús Romero Díaz


Contenido

Introducción

Esta página se va a centrar en la biblioteca de criptografía RSA-Haskell. Esta biblioteca nos ofrece la posibilidad de generar claves (tanto públicas como privadas),encriptar mensajes,desencriptarlos...

Un requisito previo para la utilización de RSA-Haskell es tener instalado ghc.

RSA

El sistema criptográfico con clave pública RSA es un algoritmo asimétrico cifrador de bloques, que utiliza una clave pública, la cual se distribuye (en forma autenticada preferentemente), y otra privada, la cual es guardada en secreto por su propietario. Una clave es un número de gran tamaño, que una persona puede conceptualizar como un mensaje digital, como un archivo binario o como una cadena de bits o bytes. Cuando se quiere enviar un mensaje, el emisor busca la clave pública de cifrado del receptor, cifra su mensaje con esa clave, y una vez que el mensaje cifrado llega al receptor, éste se ocupa de descifrarlo usando su clave oculta. Los mensajes enviados usando el algoritmo RSA se representan mediante números y el funcionamiento se basa en el producto de dos números primos grandes (mayores que 10100) elegidos al azar para conformar la clave de descifrado.

Comenzar a trabajar con RSA-HASKELL

La biblioteca RSA-HASKELL no necesita instalarse en nuestro sistema para poder trabajar con ella. En este apartado se explicará como obtener esta biblioteca y los pasos que hay que realizar para poder empezar a utilizarla.

Un requisito necesario para poder empezar a trabajar con RSA-HASKELL es tener instalado el compilador GHC.

Podemos obtener RSA-HASKELL desde la siguiente dirección: enlace biblioteca

En la página del enlace,concretamente en el apartado Download, aparecen dos ficheros (un .zip y un .tar.gz).En esta sección y en las siguientes se hará uso del segundo fichero (rsa-haskell-2.0.1.tar.gz).

Una vez descargado el fichero, lo descomprimimos y abrimos un terminal en la carpeta descomprimida.

Para empezar a hacer uso de la biblioteca es necesario ejecutar la orden make.

Si a continuación comprobamos el estado de la carpeta, podemos ver que se han generado nuevos archivos. Entre ellos,los siguientes programas ejecutables.

ssdecrypt
ssencrypt
sskeygen
sssing
ssverify

En secciones posteriores explicaremos como usar estos programas.


Generación de claves

Una de las funciones de RSA-HASKELL es la generación de claves. Esta biblioteca nos va a permitir generar tanto claves públicas como privadas. Hay que tener en cuenta que la clave privada a diferencia de la pública no puede darse a conocer.

El programa que nos va a permitir crear claves es sskeygen. Para poder obtener el par de claves sólo hará falta ejecutar en el terminal:

./sskeygen

Si comprobamos el estado actual de la carpeta en la que hemos ejecutado la orden, podremos observar que ha sufrido modificaciones. Ahora nos encontramos con dos nuevos archivos diferentes private.key y public.key, los cuales contienen nuestra nueva clave privada y pública.


Encriptación de mensajes

RSA-HASKELL nos va a permitir encriptar textos.Estos textos se van a codificar en base a una clave pública (friend.public.key).Esta clave pública indica que el destinatario del mensaje es únicamente la persona que tengan como clave privada friend.public.key.

Podemos codificar mensajes introduciendo la siguiente orden en el terminal.

./ssencrypt friend.public.key mensaje.txt


Ejemplo de encriptación de mensajes

Vamos a realizar una prueba de encriptación de un mensaje para que el destinatario y el emisor sean la misma persona.Esto quiere decir que como clave pública (friend.public.key) vamos a emplear nuestra propia clave (public.key), de manera que no haga falta contar con la colaboración de otro usuario para la realización de esta prueba.

Para empezar, creamos un archivo llamado prueba.txt con un contenido cualquiera.

Queremos que este texto sea leído sólo por un usuario en concreto (que en este caso vamos a ser nosotros mismos) por lo que procedemos a codificarlo.

Introducimos en la consola la siguiente orden.

./ssencrypt public.key prueba.txt

Observamos ahora el estado de la carpeta desde la que estemos ejecutando las órdenes. Podemos observar que se ha creado un nuevo archivo llamado prueba.txt.ss. Este archivo (prueba.txt.ss) es el que tenemos que enviar a la persona cuya clave pública hemos proporcionado mediante friend.public.key, y que en nuestro caso, vamos a ser nosotros mismos.

Si abrimos el archivo prueba.txt.ss podemos ver el mensaje que habíamos escrito codificado.

Desencriptación de mensajes

Una vez que el receptor recibe el mensaje cifrado con la clave pública, lo descifrará utilizando el comando ssdecrypt que proporciona la biblioteca RSA-HASKELL y su clave privada. El formato del comando es el siguiente:

./ssdecrypt message.txt.ss private.key

Ejemplo de desencriptación de mensajes

Continuando el ejemplo de cifrado, teníamos el archivo codificado prueba.txt.ss. Por otra parte tenemos nuestra clave privada en el archivo private.key. Simplemente introducimos el comando antes mencionado:

./ssdecrypt prueba.txt.ss private.key

Esto creará el fichero prueba.txt, que como podremos comprobar, contiene la información descifrada.

Más cosas

Los comandos ./sssign y ./ssverify nos ofrecen la posibilidad de firmar digitalmente los documentos, y el segundo, verificar que efectivamente el documento desencriptado se corresponde con la firma digital.

./sssign key_filename prueba.txt

Cuando ejecutamos el comando, se generará el fichero prueba.txt.sig, que será la firma del emisor (es un resumen cifrado del archivo a enviar).

./ssverify key_filename prueba.txt prueba.txt.sig

Cuando ejecutamos el comando, si la firma se corresponde al fichero, devuelve "GOOD", en caso contrario devuelve "BAD".

Referencias

Enlace para obtener RSA-HASKELL, incluye información sobre cómo utilizar esta biblioteca

Información sobre RSA.

Herramientas personales