CuaimaCrypt
Por Julián Bolívar
Muy buenos días a todos. Les quería comentar sobre un proyecto personal, en el cual ya llevo varios meses trabajando, que se llama CuaimaCrypt.
La librería CuaimaCrypt, y su implementación como aplicación WinCuaimaCrypt, nacieron como proyecto el 28 de Mayo del 2007, el mismo día en que fue cerrado RCTV (por Chávez en Venezuela), cuando me di cuenta que no disponía de ninguna herramienta que me permitiera comunicarme de una manera segura por Internet, sin que mi información esté expuesta a que “cualquiera” la pueda ver...
Como yo sé que de forma pública no existe ningún algoritmo que cumpla completamente con "MIS REQUERIMIENTOS" de seguridad, y basado en mi experiencia previa con la extensión que hice del famoso algoritmo blowfish, el cual llame “blowfish plus”, decidí hacer mi propio algoritmo.
La primera decisión fue qué tipo de algoritmo sería, uno de codificación por bloques o por codificación por secuencias de bits seudoaleatorias; después de mucho investigar y hacer pruebas logré integrar ambos modelos en uno, desarrollando el "Shift Codec", el cual permite hacer una codificación con una secuencia seudoaleatoria no cíclica.
Estos Shift Codec se agrupan en lo que se llama un Rake Codec, lo cual permite procesar 128 bits simultáneamente, y estos Rake Codecs se agrupan en secuencia unidos por scramblers de bits, con 4 operaciones posibles. Los Shift Codecs están encadenados con otros Shift Codecs, lo cual hace que sus estados en todo momento dependan de datos que entraron en el proceso; adicionalmente existe una secuencia de salto de los estados del shiftcodec
Esta estructura de codificación permite extender la seguridad del algoritmo hasta las necesidades particulares de cada quien con sólo agregar más bloques.
Todos los parámetros iniciales del algoritmo, semillas, scramblers entre bloques, secuencia de salto de la semilla, cadena de los Shift Codec, son inicializados por la clave que define los estados de los atractores de Lorenz.
Después se implementó WinCuaimaCrypt, la cual es en sí la aplicación de codificación final para el usuario, que permite codificar archivos e emails para su envío por Internet.
Para WinCuaimaCrypt se definieron 3 niveles de seguridad, “rápido” (fast), “normal” (normal) y “paranoico” (paranoid); los cuales implementan el CuaimaCrypt de 6, 9 y 16 bloques respectivamente.
La ecuación que define el nivel de seguridad de CuaimaCrypt es:
N^5 [(N-1)!]^3 2^(258N+29)
Donde N es el número de bloques en el algoritmo.
Para el caso de N=6 esta ecuación da como resultado 7.1220x10^484, lo cual es equivalente a un algoritmo de 1610 bits.
En el caso de N=9 la ecuación da como resultado 2.0384x10^726, lo cual es equivalente a un algoritmo de 2412 bits
Y para el caso de N=16, la ecuación da un valor de 5.6466x10^1293, lo cual es equivalente a un algoritmo de 4297.
Si comparamos estos valores con las llaves de algoritmos conocidos de clave simétrica vemos:
- Blowfish: 448 bits
- GOST: 256 bits
- REDOC: 160 bits
- IDEA: 128 bits
- MMB: 128 bits
- SAFER K-128: 128 bits
- NewDES: 120 bits
- 3-WAY: 96 bits
- CRAB: 80 bits
- SKIPJACK: 80 bits (Algoritmo Clasificado por NSA)
- CAST: 64 bits
- Madryga: 64 bits
- FEAL: 64 bits
- LOKI: 64 bits
- SAFER K-64: 64 bits
- DES: 56 bits
Como podemos ver en el modo “rápido” CuaimaCrytp tiene 1610 bits, que es aproximadamente 3.5 veces el nivel de seguridad ofrecido por Blowfish.
Otra característica de CuaimaCrypt es que el nivel de seguridad no está determinado por la longitud del password, ya que así éste sea de una sola letra, se generan todos los valores iniciales con valores dependientes de éste, claro que una clave de menor a 9 letras NO es una práctica recomendada ya que sería extremadamente vulnerable a un ataque por fuerza bruta contra la clave en sí, por lo cual la seguridad de la clave es responsabilidad del usuario.
En las pruebas realizadas al algoritmo, en archivos de tamaño mediano (1 MB), se tiene una distribución de caracteres completamente plana, con una variación de sólo el 0.05% máximo sobre toda la tabla ASCII.
En archivos pequeños, menores a 30kB, se suele tener un Overhead, el cual para archivos menores a 8kB suele ser de aproximadamente 8kB, siendo esto por la implementación de la aplicación y no por el algoritmo de codificación; esto no se presenta en archivos grandes donde el overhead es de pocos bytes.
Para concluir con esta historia, deseo invitarles a probar WinCuaimaCrypt y quedo a la espera de sus comentarios.
Saludos

- 902 lecturas
Twitter

Pues para empezar...
Pues para empezar los comentarios, diria que RCTV no fue cerrada por nadie, de hecho siguen emitiendo, y que simplemente no les renovaron la licencia, lo cual es potestad de cualquier gobierno, como pasa en el estado español con el reparto de licencias publicas de emision etc, etc...
Y sobre el cuaimaCrypt, prometo comentar cuando lo pruebe
saludos
Felicitaciones, pero...
No digas que Chavez cerró RCTV, se les venció la concesión, si los hubiese cerrado no estarían trabajando igualito con televisión por cable o suscripción.
No son unos bebecitos de pecho ni nenitas mojigatas, ellos saben muy bien lo que hacen, hicieron y están haciendo...
No defiendo a Chavez, pero tampoco es para mal informar a toda la gran cantidad de personas que visitan kriptopolis.
Seguro, a los canales que se le arrodillaron si se las renovaron
Seguro.... a los otros canales que si se arrodillaron ante Chávez se las renovaron sin pensarlo (el mismo día que cerraron a RCTV), es solo un tecnicismo legal (ya que cierre es cierre), y si quieres saber RCTV no trabaja por cable sino RCTV Internacional, otro tecnicismo legal... jejeje... así que RCTV para los venezolanos sigue cerrado por Chávez porque no lo vemos en el canal 2 de señal pública, así los títeres del gobierno sigan con el mismo CD de habladurías de Chávez donde dice que se le venció la concesión.
Que si por el golpe de abril, no me vengas con eso, todos los canales venezolanos transmitieron lo mismo, así que eso es mentira...
Pero bueno, eso no es tema de esta página....
Saludos.
Venga
Sí y no. La libertad de expresión y la posible censura gubernamental sí pueden ser tema de esta página, pero os ruego abráis un hilo específico al respecto.
Venga, vamos con el algoritmo...
El más seguro del mundo?
¿No crees que te estás pasando un poco (o un mucho) con tu afirmación? La seguridad de tu algoritmo no se mide unicamente por la longitud de la clave, hay muchos otros factores que pueden comprometerlo. Cuando lleves 20 años y nadie haya roto tu sistema, entonces podremos empezar a pensar que tu algoritmo es seguro o el más seguro. Yo hasta entonces utilizaré Rijndael o Twofish. Si quieres más longitud de clave puedes cifrar más de una vez con algoritmos diferentes, no hace falta que te inventes in nuevo cipher.
Tienes que aclarar tus Ideas...
Amigo, de verdad antes de hablar debes de aclarar tus conceptos, ya que cifrar con dos algoritmos en cascada no te aumenta la longitud de las claves y por ende la seguridad, solo alarga el tiempo de procesamiento requerido para llegar al mensaje.
Como ejemplo, si utilizas un algoritmo cualquiera de 64 bits en cascada con uno de 128 bits NO VAS A TENER UNA SEGURIDAD EQUIVALENTE A 192 bits, para llegar a los datos solo debes romper un algoritmo de 128 bits y después uno de 64 bits con sus respectivas vulnerabilidades y no uno equivalente a 192 bits. Así que si pones en cascada dos codificaciones DES no vas a tener un algoritmo más seguro con 112 bits.
Preocupante
Una afirmación preocupante...
Más preocupante todavía :(
decidí hacer mi propio algoritmo....
Bueno, lo mismo diría Bruce Schneier cuando decidió hacer Blowfish... ;-)
Yo de verdad no lo veo tan preocupante, solo hay que ver que tal hizo su tarea....
El mas seguro del mundo....
Bueno, eso es mas un reto a toda la comunidad internacional de cryptoanalistas que una afirmacion, ya que solo el tiempo dira si eso es verdad....
Saludos
Bueno, lo primero que diré
Bueno, lo primero que diré es sobre las claves:
NOTA: utilizaré password para la clave que recuerda el usuario, y clave para la clave usada internamente en el sistema de cifrado.
Si la clave que usa el algoritmo es de 1610 bits no significa que contenga realmente 1610 bits de información. Está claro que la clave ha sido generada a partir de tu password (a menos que la almacenes en algún sitio para su posterior uso, que podría haber sido generada a partir de ruido aleatorio), que está hecho con un subconjunto relativamente pequeño de valores ascii(por lo general, no sé si funciona con utf), lo que significa que atacando el sistema de generación de claves se puede reducir la seguridad del sistema rápidamente (Intentando deducir qué subconjunto de claves posibles no es capaz de generar tu generador de claves, o asignando subconjuntos de claves a longitudes concretas de passwords, o a cualquier clasificación concreta de passwords).
Supongamos claves de 9 caracteres, suponiendo que podemos escribir 128 valores diferentes por caracter, tenemos una longitud de clave equivalente a: log2(128^9)= 63 bits. Bastante triste en comparación con los 1610 que prometes... pero no tengo la razón del todo, así que afinaré un poco los cálculos a tu favor: Tenemos que tener en cuenta que el password podría tener menos dígitos, así que las posibilidades aumentan si se ha generado la clave a partir de ellas con una función de tipo hash, veamos a cuanto aumentan...
La longitud en bits de la clave generada sería equivalente a: log2(128)+log(128^2)+log(128^3)+log(128^4)+log(128^5)+log(128^6)+log(128^7)+log(128^8)+log(128^9) = 315 bits
Sigue siendo bastante triste en comparación con los 1610 bits prometidos, sobretodo teniendo en cuenta que muchas de esas claves serán desestimadas por su sencillez (suponiendo que quien use tu programa sea un poco precavido, que es lo que suele pasar con quien recurre a la criptografía), lo que hará que la cantidad real de bits (o de información, como se quiera ver) sea un pelo inferior a la estimada, ya que se podrán descartar passwords "demasiado regulares" o demasiado cortos sin tener que probarlos siquiera (aunque nunca está de más probar para ver que pasa).
Por otro lado cabe considerar el caso de las colisiones, si hubiera colisiones en el sistema generador de claves, es decir, que dos passwords generaran la misma clave, reduciríamos a su vez la cantidad de claves posibles, debilitando aún más el sistema. ¿Tiene colisiones el sistema generador de claves? No veo nada escrito sobre el tema... ¿Es que se ha olvidado de comentarlo o es que se ha olvidado de considerarlo durante el diseño del sistema?
Más cosas, ¿existen claves débiles? Tampoco he podido leer nada en la página, no veo ningún documento en el que se expliquen las bases teóricas del algoritmo. Suponiendo que existen claves débiles... el sistema las detecta y las desecha? Si no las detecta y las desecha, se sabe qué passwords són las que generan dichas claves?
Aún más cosas... respecto a los nuevos métodos criptoanalíticos sobre los que no pretendo ser un entendido (criptoanálisis diferencial y otros delirios matemáticos), ¿cómo se comporta cuiamacrypt frene a ellos?
Ya sé que por lo general, es difícil determinar qué claves son generables y cuáles no (lo que implicaría que aunque la longitud REAL de la clave fuera 315 bits, hubiese bits "añadidos" que provendrían de la incapacidad humana de encontrar un sistema para romper el mecanismo, lo mismo que pasa con la factorización de números producto de dos primos grandes), pero tal y como indico, no veo ningún documento que respalde de forma teórica el funcionamiento del algoritmo para poder enterarme mejor, por éso mismo hago tantas preguntas. Resulta realmente molesto tener que intuir el funcionamiento de un algoritmo examinando código fuente.
Por cierto... el código fuente... dónde está? Veo versión Windows, versión Linux y version Java, he bajado la versión Linux y en ella no está el código fuente... está en alguno de los otros dos paquetes? No veo que sea open-source tal y como dices. Otra cosa... bajo qué licencia liberas tu programa?
Espero no resultar borde... lo hago con toda la buena intención del mundo, pero tengo muchas dudas y bueno, no se me fue la manía que tenía de pequeño y sigo preguntando sobre todo lo que me extraña.
--
http://blog.viricmind.com
--