Polyandros: cifrado en Visual Basic
Por Anilandro
Acabo de colgar en mi web mi segundo "pinito" en el mundo de la Criptografía. Es un programa de cifrado/descifrado simétrico de clave privada para textos al que llamo Polyandros 4.01 y está escrito en Visual Basic.
El programa se ejecuta a partir de un fichero .exe sin instalación y utiliza algoritmos clásicos de cifrado, como son la sustitución polialfabética, la transposición y la operación XOR. Efectuando un multicifrado en serie de entre 3 y 15 pasos, dependiendo de la longitud de la contraseña, que puede tener entre 12 y 60 caracteres alfabéticos, aceptando también las vocales acentuadas, los signos de puntuación, espacios y algunos gráficos, lo que permite utilizar frases fáciles de recordar. Naturalmente, cada paso de cifrado utiliza subpasswords distintos extraídos de la propia contraseña...
Una de sus características es que permite cambiar la secuencia de multicifrado a voluntad de usuario, así como otros parámetros del bloque de transposición y del generador pseudoaleatorio. Otras características son las de cifrar y descifrar directamente el contenido del portapapeles de Windows, sin cargar los textos en el propio programa, y que permite guardar y cargar tanto la configuración como la contraseña, todo ello cifrado con otra contraseña. Permitiéndonos tener un listado de settings para diferentes destinatarios.
Imagen del Polyandros en su configuración normal:

Imagen del Polyandros en su configuración abierta:

El Polyandros 4.01 puede descargarse de forma totalmente libre y gratuita desde la web, así como las instrucciones de manejo.
Actualmente estoy trabajando con la siguiente versión que incluye diversas mejoras de manejo y de seguridad.
- Conecta o crea cuenta para participar

- 1112 lecturas
Twitter

Buen trabajo
Parece un trabajo muy profesional. Lo probaré.
---
Buen aporte
Tu trabajo aporta elementos que dificultan la obtención del texto original. Ahora pruébate a tí mismo: haz un programa que te genere un informe de colisiones atacando a tu propio cifrado por fuerza bruta y almacena en un archivo el resultado de esas colisiones para poder evaluarlo posteriormente. Si quieres un ejemplo visita www.kriptopolis.org/node/1191
Para el generador de caracteres puedes usar como modelo uno que yo publiqué hace tiempo en http://foro.elhacker.net/programacion_general/generador_de_caracteres_en...
No obstante, te saldrá mejor en velocidad generar los bucles a mano (p.e. "FOR ... NEXT") y, si aceptas mi consejo, desarrollarlo en Delphi o C++. Con éste último detalle aumentarás notablemente la velocidad total del test de colisiones, ya que Visual-Basic es ineficiente en cuestiones de rendimiento. Cuando empezé a desarrollar el Cifrado PSA lo hize en Visual-Basic, pero ante la extremada lentitud obtenida cifrando y las limitaciones del lenguaje Basic para los tipos de datos decidí hacerlo en Delphi.
eb4bgr (at) yahoo (dot) es
Agradecido aunque neófito
Gracias por los consejos Eb4bgr, pero he de reconocer mis limitaciones en muchos de los temas que citas. Hace años programé algo en C++ pero ahora lo tengo tan olvidado que sólo pensar en hacer lo mismo que con el VB, se me ponen los pelos de punta.
Por otra parte, el Polyandros ha sido casi un divertimento, el ver que pasaría al utilizar métodos sencillos de cifrado clásico pero que el propio proceso fuera configurable por el usuario, formando parte en realidad de la propia clave. Cada una de las rutinas es suficientemente conocida en funcionamiento y también en debilidades, pero mi esperanza -y repito que me falta bagaje para poner el sistema a prueba- es que dichas debilidades, al ser distintas, se oculten entre ellas y en cambio se refuercen las bondades.
Por ejemplo, uno de los problemas que me gustaría solucionar es dejar de utilizar la función "rnd" del Visual Basic para generar la serie pseudoaleatoria, porque me parece algo casi de ir por casa, y con independencia de su mayor o menor grado estadístico de aleatoriedad, he podido comprobar que a partir de semillas más grandes de 21 bits, comienza a repetir resultados, duplicando la longitud de los ciclos a cada nuevo bit adicional.
Otra cosa es que me gustaría publicar el código fuente, ya que mi intención es que pueda ser analizado para mejorarlo o descartar la existencia de puertas traseras, pero si os soy sincero, tengo algunos reparos. Ya que no sería la primera vez que me copian un programa, lo alteran un poco y después aparece con otro nombre y otro autor, incluso formando parte de un pack comercial. Tal vez conozcáis algún tipo de licencia que pudiera protegerlo un poco en este aspecto.
En la segunda versión del Polyandros en que trabajo estos días he corregido algunos de los problemas que he detectado hasta ahora, como el hecho que el tamaño de los bloques de transposición sea fijo -a menos que lo cambies expresamente-, o el propio multicifrado por bloques, que intuyo pueden generar debilidades explotables. Y también eliminar un "bug" del generador de "subpasswords" que impide el correcto descifrado si se dan algunas circunstancias, por fortuna poco probables.
Mientras tanto estoy leyendo el excelente trabajo de M.J. Lucena "Criptografía y Seguridad en Computadores" y algunos pdf's más de la red para documentarme un poco sobre un tema apasionante del que me falta muchísimo por aprender.
Miraré los links que me citas y te digo cosas.
Un saludo a todos
"La vida sólo es energía que ha aprendido a defenderse..." Anilandro
http://sites.google.com/site/anilandro
Re: Agradecido aunque neófito
Hola Anilandro, para empezar sería bastante difícil de demostrar que un software comercial incorporara ilegalmente tu cifrado o una variante mejorada. Pienso que no hay nada que hacer. Para proteger tu trabajo lo mejor que puedes hacer es registrarlo (los dos módulos del Cifrado PSA están registrados). Respecto a la seguridad de tu cifrado es bueno que innoves con ese tipo de elementos porque no dejas que tu cifrado dependa únicamente de la clave (PSA-01 permite modificar sus constantes internas antes de cifrar). Por eso me ha llamado la atención tu artículo, la posibilidad de indicar el órden de X, S y T amplían la seguridad, es como tener una segunda clave.
Un saludo.