Alters

PRAF Is HERE!

Buenas!

Hace tiempo que os voy diciendo que no me olvido de vosotros, pero no hago ninguna entrada... y es que he estado trabajando duro en un proyecto personal, que hoy os muestro.

¿Queréis verlo?

¡Vamos allá!


PRAF

¿Qué? PRAF es un sistema de cifrado (técnicamente es ofuscación) que debe su nombre al acrónimo de "Part, Reorder, And Fulfill", que es exactamente lo que hace.

Es decir, dada una entrada "e", una función de ordenado "o", una función de relleno "r" y una salida "s", tenemos esto:

f(o) = r(o(e)) = s

Ahora falta saber qué son "o" y "r", ¿no?

 - "o" es un algoritmo simple de ordenado, basado en aleatorios simples.
 - "r" es una función de relleno, de manera que por cada valor HEX de "e" (HEX(e, p), donde "p" es un entero) se obtiene un valor HEX aleatorio y otro valor HEX que puede (o no) ser un aleatorio o bien el valor HEX actual.

Entonces... ¿los datos de entrada están en la salida? SI. Por eso escribía que técnicamente es un método de ofuscación. Es decir, dada la salida, es muy difícil (no hay nada imposible a nivel informático) obtener la entrada original si no tenemos los valores que toman las funciones "r" y "o" (valores que se devuelven al usuario que ofusca algo), por lo que prácticamente dejamos en manos de la vieja fuerza bruta el intentar sacar los datos originales.

Aún con eso, la cosa está complicada. Hemos dicho que hay reordenación y relleno, ¿no? Bien, quitemos por un momento el relleno... imaginad la entrada "locomotora". Vamos con un ejemplo...

Por fuerza bruta, y usando deducción decimos que la entrada es un texto ASCII (plano) y estructurado (una palabra o texto con sentido, vaya). Con esto empezamos a probar combinaciones, y obtenemos, entre ellas, "locomotora" y "loco a motor". Si no sabéis de antemano el texto original... ¿Cómo sabríais qué texto es el bueno? No lo sabéis.

Sí, vale, reduces la lista, pero imaginad si entra en juego el relleno... seleccionando pares de caracteres HEX podemos obtener caracteres ASCII variados, y generar millones de combinaciones (exponencialmente dependientes de la longitud del texto original), lo que complica la cosa.

¿Veis por dónde voy?

Pero bien, no todo es bueno... también tiene defectos. No está probado así que no se sabe la auténtica fortaleza del sistema; por otra parte, la salida de datos es variable, y contiene datos no printables, por lo que se tiene que dar la salida enmascarada en Base64 (lo que agranda aún más la salida).

Y finalmente... ¿Qué sacáis vosotros con todo esto?

Ah! Aquí lo más importante de todo! He hecho de éste un proyecto abierto (vía GitHub), y podéis probar vosotros mismos el código y su fortaleza.

Si os interesa contribuir, podéis entrar aquí y ver o bajar el código, y podéis entrar también a la página oficial del algoritmo (en unos días estará en castellano).

Y hasta aquí esta entrada. Espero que disfrutéis como enanos con esto y podáis sacar unas horillas y hacer el burro con esto.

Nos vemos!!!