Cifrado de Vernam

El cifrado de Vernam es un algoritmo de encriptación en flujo, es decir, consiste en combinar cada uno de los bits del mensaje con otro bit que actúa como clave de cifrado. Numerosos protocolos criptográficos, como el sistema WEP que utilizan nuestros routers o el A5/1 que se usa en las redes de teléfonos móviles, están basados en el cifrado de Vernam.

Este procedimiento requiere, a diferencia de los sistemas de encriptación por bloques, una clave que sea tan larga como el mensaje. Entonces necesitamos alguna forma de obtener una clave pseudoaleatoria que pueda tener una longitud muy larga, y variable.

Una forma de conseguir una clave fiable con facilidad, es utilizar un LFSR (Linear Feedback Shift Register), o Registro de Desplazamiento con Retroalimentación lineal. No nos asustemos por ese nombre, es lo más fácil del mundo:

Fuente: Wikipedia.

Un registro de desplazamiento es un conjunto de bits que tienen la capacidad de moverse a través de las celdas en las que residen. Al hacerlo, el último bit sale del registro y pasará a formar parte de la clave. La retroalimentación consiste en que la primera celda, que se quedaría vacía, se rellena con un bit que es el resultado de una operación lógica con ciertos bits residentes en el registro.

Por tanto, utilizaremos nuestro LFSR para generar tantos bits como necesitemos. Escoger correctamente las celdas que se utilizarán para generar el siguiente bit determinará la periodicidad del registro y, con ella, la seguridad de la clave que produzca. En la ilustración anterior vemos la configuración de bits de un LFSR de Fibonacci. La secuencia que obtendremos dependerá de la semilla, o sea, los valores iniciales de las celdas.

Pues bien, ya tenemos el mensaje y la clave, lo único que nos falta es generar el mensaje encriptado combinando los datos anteriores, bit a bit, con una operación XOR. Como esta operación es simétrica, la misma clave que utilicemos para cifrar nos servirá para descifrar. A esto se le llama sistema de cifrado simétrico.

Como de costumbre, he escrito un programita en C++, utilizando Qt, que nos puede servir para encriptar archivos. He implementado un LFSR de 32 bits con la configuración de Fibonacci, y la semilla del registro es la clave que puede introducir el usuario. El código fuente es multiplataforma, y se incluye el programa compilado para Windows.

Vista del programa.


Desde aquí envío mi agradecimiento a los profesores Jesús García Miranda y Evangelina Santos Aláez, de la Universidad de Granada, por sus interesantes clases de Criptografía.

Comentarios

Publicar un comentario

Entradas populares de este blog

Algoritmo de relleno

Problema de las N reinas