martes, 5 de febrero de 2013

Utilidad para cifrar/descifrar RxBot


Hace un par de días, un amigo me pidió ayuda para descifrar una cadena de texto, con fines que desconozco. Generalmente no me suelo meter en temas de cifrado y seguridad de contraseñas, porque es algo que me aborrece enormemente y sobre lo que no estoy muy al corriente. En éste caso, tras una breve búsqueda en google, fui a parar a un foro en el que un fulano explicaba más o menos la teoría del asunto. Después traté de encontrar una herramienta al uso para solucionar el problema y lo que me encontré un montón de páginas y foros que las proporcionaban, pero requerían registro previo. 

Sin entrar en los intereses que puede tener un foro o página por mis datos personales, preferí no registrarme y como el algoritmo es de risa, traté de hacer un pequeño programa en Java. Un consejo, cuando tengáis que operar a nivel de bit, y realizar operaciones de transformación entre bytes, caracteres y cadenas, huid de este lenguaje.

Tras conseguir una versión cuasi-funcional en java que no me terminaba de convencer, me di por vencido y abrí DevC++. Fue una hermosa regresión al universo de los punteros y los arrays de caracteres que desembocó en las herramientas que más abajo comparto con vosotros.

El algoritmo

Me da mucha pereza explicar en profundidad el algoritmo. No obstante, y para que no penséis que me dediqué al copy-pasting resumo lo importante:

El algoritmo se basa en una tabla de 256 hexadecimales de 8 bits constante. Es (o debería ser) la misma para todas las cadenas cifradas con éste tipo de cifrado. 

Todo lo que hace el algoritmo es coger el primer carácter a cifrar, y hacer un XOR binario con el primer carácter de la tabla maestra, y así sucesivamente. Como todos sabremos, en el sistema de representación de caracteres ASCII a cada letra le corresponde un valor entre 0 y 255, si hablamos de numeración de 8 bits sin signo. A partir del XOR obtenemos ese byte, que representaremos como entero con signo.

De ésta manera, la cadena:
Wirelearn Rulz
Tras el cifrado queda representada como:
{115,69,-120,65,23,-121,-74,35,-13,44,44,-33,66,126,0}

Conclusiones

Lo bueno de utilizar un XOR es que es una operación reversible. Así, si dos personas tienen la misma tabla, la persona A puede escribir y cifrar un mensaje y enviarlo. Y la segunda persona puede descifrarlo de la misma manera. Así si el mensaje es interceptado, al menos llevará un buen rato reventarlo.

Como podréis imaginaros ESTE SISTEMA NO ES SEGURO ya que para empezar, la tabla es pública. Aún cambiando la tabla maestra por una aleatoria es bastante fácil de resolver con tiempo y una caña. Sin embargo, podría servir para que vuestras conversaciones privadas no fuesen escuchadas a primera vista en caso de que alguien esté escuchando la red.

Descarga

Sin ir más lejos, aquí tenéis el paquete descargable para windows

Un saludo.