Ir a página principal ALEATIX, CRIPTOGRAFÍA EN LENGUAJE C
Aleatix es un programa de criptografía en lenguage C que realicé hace un par de años como ejercicio en mis estudios de Informática. Está escrito en C de consola, ya que el profesor de entonces nunca consideró "interesante" trabajar en un entorno gráfico, como por ejemplo en "Borland C Builder", perdiéndose de esta manera la oportunidad de enseñarnos a desarrollar programas que después se pudieran utilizar en Windows. El ejercicio tenía la intención básica de implementar en C el conocido sistema de encriptación de Julio César, basado en un monoalfabeto alterado de una manera casi infantil: si la llave de cifrado-descifrado era 5, cada letra sería sustituída por la que ocupa 5 puestos más en el alfabeto que se utilizara. En este caso las equivalencias de un alfabeto extendido con los números, espacio en blanco y los dos signos gráficos más frecuentes, quedarían como sigue: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0 . , :
F G H I J K L M N O P Q R S T U V W X Y Z 1 2 3 4 5 6 7 8 9 0 . , : A B C D E Si aplicamos esta tabla de equivalencias a la frase:
"CUANDO CARMENCITA LLEGO A CASA DE SUS TIOS NO SE ESPERABA UNA ACOGIDA TAN FRIA..."
Queda así: "HZFSITCHFWRJSHNYFCQQJLTCFCHFXFCIECXZXCYNTXCSTCXJCJXUJWFGFCZSFCFHTLNIFCYFSCKWNFDDD"
Con un sistema tan fácil de decodificar incluso para los conocimientos de la época, ya que sólo existe un número de posibilidades igual a la longitud del alfabeto usado (en nuestro caso de 40) no me explico cómo Cesar conquistó la Galia sin que el druida Panoramix le descifrara sus mensajes y enviara a Asterix y Obelix a mostrarle al romano el lugar por donde escuecen los pepinos. En fin, bromas aparte, parece ser que los bárbaros no sabían demasiadas matemáticas y el sistema le funcionó. En mi caso, realicé la implementación en C sin problemas pero, fiel a la tendencia a complicarme la vida, aproveché la oportunidad para adornarlo algo más. Partiendo del sistema de César, ¿qué ocurriría si el "desplazamiento" de la equivalencia fuera incremental, creando un alfabeto distinto para cada carácter. Es decir, la primera letra del mensaje se sustituye por la +5, pero la segunda por la +10, la tercera +15, +20 etc. Con un sistema parecido al Tritemio medieval, que utilizaba unos discos concéntricos para hallar rápidamente la equivalencia. Para no perderme haciéndolo con papel y lápiz, construyo un improvisado codificador de Tritemio utilizando un disco CD defectuoso y su caja de plástico. 1) Sobre una etiqueta adesiva que pegaremos sobre el CD, hacemos 40 marcas equidistantes, que corresponderan a los signos de nuestro alfabeto ampliado. 2) Sobre la tapa transparente pegamos un círculo de papel cuyo diámetro interno sea como el externo del que hemos pegado sobre el disco, y del ancho suficiente para poder dibujar los mismos signos, de manera que su posición corresponda con los primeros (la A con la A, B con B, etc...) 3) En los laterales del plástico de la caja rebajamos el material con un Dremel y una fresa de manera que una vez colocado el disco en su interior, podamos girarlo con el dedo. Disco de nuestro codificador alfabetico
4) Insertamos el disco en la tapa y la cerramos. El dispositivo montado
Ahora tenemos dos círculos con concéntricos, con dos alfabetos ampliados, uno fijo en la tapa, y el otro móvil en el disco. El funcionamiento es obvio. Para codificar con sistema Julio Cesar, bastará con desplazar una sola vez el disco el número de saltos igual a la clave utilizada. Para el Tritemio, en cambio, desplazaremos +5 para cada caracter que codifiquemos. Utilizando nuestro pequeño dispositivo, y utilizando el procedimiento del Tritemio incremental +5, el mensaje anterior quedaría así: "H5P83E6CF23Y,7DTFG164 J FGRUD56DJG8BD1OIT3L8:1NEBP804H0BFG08Z10CTQXXZ1OASGU0857:E"
Con este sistema bien pudiera parecer que el mensaje codificado será más difícil de descifrar, pero en realidad sigue habiendo sólo 40 posibles "llaves" distintas, ya que la 41 será de nuevo igual a la 1. E idéntico caso se dará si en vez de utilizar siempre la misma llave, la vamos incrementando a cada carácter (por ejemplo +5, +6, +7, +8 ...). Porque sólo tenemos 40 llaves iniciales, y cualquiera que sea condicionará la sucesión predecible que venga a continuación. En un principio, mi programa de C realizaba la codificación y la decodificación en ambos sistemas. Pero en este momento se me ocurrió que si pudiéramos utilizar una llave distinta para codificar cada carácter, y que la relación entre llaves no fuera facilmente predecible, se podría conseguir un sistema de mucha mayor seguridad. De esta idea nació el Aleatix, que utiliza el generador de números pseudoaleatorios de C. que por tener 99.999.999 de posibilidades, mejora bastante la seguridad de la encriptación. La "llave", en este caso, será la "semilla" o punto de origen de la secuencia aleatoria, sin la cual, cualquier intento de decodificación absorbería una cantidad ingente de tiempo. Menú del programa Aleatix, mostrando las distintas opciones
Al arrancar el programa aparece el menú principal una ventana de DOS, a la antigua usanza, con las 12 opciones agrupadas en 4 bloques: El bloque de manejo de ficheros 1) Cargar Fichero de Disco (c): Carga de disco ficheros de extensión .txt sin formato y lo convierte en el Texto Activo del programa, es decir, el texto que va a procesarse tanto para encriptarlo como para desencriptarlo. Estos ficheros deben encontrarse en el mismo directorio del ejecutable. 2) Guardar Fichero en Disco (g): Guarda en disco el fichero Activo, sea el de texto llano o el encriptado. 3) Borrar fichero de Disco (b): Borra un fichero del disco. El bloque de manejo de textos 4) Crear Texto Activo (t): Para encriptar o desencriptar un mensaje debemos tenerlo como Texto Activo, y para ello se puede o cargarlo desde al disco (con la opción 1) o introducirlo con ésta a través del teclado. 5) Borrar Texto Activo (a): Borra el texto Activo. Sin comentarios. 6) Ver Textos Memoria-Activo (v): El programa permite manejar dos textos simultaneamente, el Activo, y el guardado en Memoria. Esta opción permite visualizar ambos. 7) Intercambiar T (Textos) Mem.-Act (i): Intercambia los textos, principalmente para Guardar, Borrar, Encriptar o Desencriptar el texto contenido en Memoria, conviertiéndolo en Activo. El bloque de manejo de memoria 8) Cargar Texto de Memoria (r): Copia el texto de Memoria sobre el Activo (ojo, el texto de Memoria debe existir. Una cadena vacía provoca el cuelgue del programa) 9) Guardar Texto en Memoria (m): Copia el texto Activo sobre el Memoria 10) Borrar Texto de Memoria (o): Eso. Sin comentarios. El bloque de encriptación-desencriptación 11) Encriptar Texto Activo (e): Salta a un submenú que permite elegir los tres sistemas de encriptación: a) Método Simple - Julio Cesar
b) Método progresivo - Tritemio c) Método Complejo - Aleatix Una vez elegido el método, el programa pide la llave o Código de Cifrado que elija el usuario, en el rango de 1 a 99.999.999, aunque en el caso de los dos primeros métodos de encriptación esta cifra es esgañosa, porque debido a la matriz de caracteres que maneja, de 67 signos distintos (entre los de puntuación, numeración, minúsculas y mayúsculas), el código se repite en múltiplos de esta cantidad, siendo por ejemplo el 1 igual al 68, e igual al a 135, etc. El Aleatix, en cambio tiene 99 millones de posibilidades. En caso que el texto Activo a encriptar incluya signos no contemplados, como las vocales acentuadas, estos no se van a encriptar, y aparecerán en el texto final a igual que en el original. El texto encriptado se convierte en el texto Activo, y el texto llano pasa a guardarse como en Memoria. Pantalla que muestra el texto en Memoria y el texto Activo para la siguiente operación
12) Desencriptar Texto Activo (d): La desencriptación sigue el mismo procedimiento que la opción anterior. Conclusión: El programa es sin duda mejorable, tiene algún pequeño bug y en ningún momento intenta compararse con los sofisticados protocolos actuales como el SSL o el DES . Pero es sin duda un buen ejercicio para comprender el funcionamiento básico de los sistemas de encriptación. Postdata: .... Ahora bien, como los visitantes de este sitio sois tan simpáticos, he decidido contaros un pequeño secreto (que como está escrito en letras pequeñas, y a éstas nadie se las lee ni en los contratos, espero que siga permaneciendo como tal)... En algún punto de esta página se esconde un link oculto que conduce a una curiosa revelación... Suerte.... Ir a página principal
| ||||||








