Por LlamameX
Visto que me se acabó la diversión con el cifrado de arena (si, ya se que queda ACYNOS, me estoy poniendo al día con él) voy a proponeros una nueva familia de algoritmos. Los llamo cifrados fractales en honor a una película de Star Trek (TNG), donde se los nombraba y que me hizo pensar en cómo podrían ser.
Una primera aproximación sería un algoritmo recursivo, donde un cifrado llevara al siguiente y lo contuviera. Algo del estilo N!=N*(N-1)!. Otras aproximaciones podrian partir el texto en trozos, cada uno de los cuales se codificaría en segmentos menores que volverían a partirse.
La gracia, como ya vi con Llamame36 rotante, es que al hacer evolucionar la clave dependiendo del texto en claro, se está usando una información de la que carece el atacante y se aumenta mucho la robustez del sistema...
Una implementación de la primera idea es la siguiente:
Dividimos el texto en claro en longitudes de clave LC. Sea A el conjunto de esas divisiones y Ai el elemento i-ésimo de ese conjunto.
Sea K0 la clave inicial de encriptación. K1 será la conversión de K0 en una clave de longitud del alfabeto (eliminamos caracteres duplicados y rellenamos con los ausentes del alfabeto)
Definimos "Bi=Ai[+]Ki" como el resultado de cifrar -por sustitución- el segmento Ai con la clave -alfabeto- Ki. Por tanto "Ai=Bi[-]Ki" Será la operación inversa.
Definimos también "Ki+1=Bi[*]Ki" Como la operación de cifrar Bi con Ki y generar una nueva clave a partir del resultado (equivalente a lo que hemos hecho con K0)
Tenemos pues:
B1=A1[+]K1; K2=B1[*]K1;
B2=A2[+]K2; K3=B2[*]K2;
y en general
Bi=Ai[+]Ki=Ai[+](Bi-1[*]Ki-1)=Ai[+]((Ai-1[+]Ki-1)[*]Ki-1)
La decodificación será el proceso inverso, pero seguiremos generando las claves Ki del mismo modo. Tendremos pues
Ai=Bi[-]Ki=Bi[-](Bi-1[*]Ki-1)
En esta notación parece más complejo de lo que en realidad es, pero quería reflejar el carácter recursivo del algoritmo. La implementación que he hecho, sin embargo, es bastante lineal (estoy haciendo una más elegante que publicaré para que podáis jugar).
Y como la vida sin retos no es nada, aquí os dejo un texto cifrado con FRACTAL1, a ver qué sois capaces de hacer él. El alfabeto base es el castellano en mayúsculas, el espacio y los números.
El corte a 40 es a efectos de facilitar la visualización. Nada relacionado con la longitud de clave. Quizás me ha quedado algo corto; si necesitáis más lo añado.
OCI8LVLUFID9EILUJL1LUVEULI9LJU61OUDCJKVO OFU61U6FAUALAFUWCAKGWF6WPLJLQLWXGAF6WF6W GOQGW6AY3GYGCÑ3MCGYD3M3SPCYJMIA3MYÑ3MBJF HZQFWZKQEMPWZEFZÑEDQFSHZPNJSIÑDZWZNÑZDTU BQBZPÑBZNÑDJSNZMROFCBCÑZCBZCHZAGLGZJSCLQ ÑNZW_TANQYNYHAO_ISA_LBPSNRLYN_LBCZÑCUZMN KKUXUZNCZNHZHUMNKUHZBYLRDFMÑQZKMDEFMZPFM EDGIZFBZQMNWDJRC_ÑC_RDW_HWKCNYW_WBGSCÑWA DZNPZQBOLHEZONJHLPEZEOJDZGQNMODZODKBYGÑZ _QGAFGÑZMBLQBÑB_JKY_GI_WÑG_KYNMPYNKYWNYF BPTNYTHNMEÑEÑ_YLBVHJLSNEÑ_VLB_JPZ_LYÑFYD NOFZMSFYDZYÑFYMJSGDZDFYQNPVYKOBALZYKVYV_ _NFCYZCYKVMY_WLPCBKCMZTWZEWGBZCEECZWBZWE ZMN_BGZTNNZPOLQDÑIZIBZLINDQPGZPVYDFÑHAOH YSBBYDFYFVSDAQDMOVYVNYPCNFBYCMPSBYCBYCM_ CBSYCNY_FH_GZHQHKZFBA_BEGHBZOQZMYCBZ_KIM _LMUBLNY_ÑP_XPNIM_XEIM_IBIEDYUPLÑGNFCDGY ODYHGQPDYHOINBLYTALNCXFCFYFTJFCFYATZQFYQ FLZAMZOMTPCOLGMZWZNGCÑMZKÑMZAPXOLOO_LQI_ AFÑJFUIU_HY_OIMSRNQÑGMIZLRXZHFGIBXXUZLUG ZYDFBXRGZVZLFKZGWJCKZCLZDFASCZCAZÑAZTIWA ZHSEEB_ZUPGUYZTPZEYZENMVGPZCGPGDVDZÑVAYZ _YPAJLFFAYTY_AGYVZMNGZLCFJNMWCZNFHBGHBOC ZTFIDCZQ_OGSKSJMBXE_M_TOFIECXÑBE_DKO_VSZ VLZRVSFCXZGVZL_ZVDRVS_ZVDFK_ÑCUHPKELI_QE K_PÑISK_EQEI_K__QÑRIOUADIZBSXZFGBKGDSUGB QDRQXAFAXEZNHMXYKSPZDXAFXKNXANEZNMEYWRÑV YGOLMRAEYAVLAVYLOYHKTCUECEA_Y_KL_CJAQEPE ALA_HOK_KMNJ_ZNOFNDZUOFNDZFDZ_TBLNOZFBFR RB_MNINE_AHÑFHJDBH_SDMFHF_BRBGXMXZBLQGKA POGXÑBDRPAXZBLQGKAMLC_MLFEMLDLWCOZ_ÑZOHZ PQCOC_AAN_A_VNONGVKNKLWCFGVAVPALCGMVKOG_ VOVYQVYGAC_VAIIAP_NGLÑEIPVDFYFV_YNRYAZBR YODYKMZDYNVCRDUXCVSVKYUXNPVYBDPNXUPIYBNY VJCKZUNÑMJDZBLJEÑADKZINGADALKZÑZÑWZÑMNOW ZJCZWFICJKWIDSZUZWÑZNFKKSK_GS_ÑPÑ_QKEGFM SÑ_VFJF_B_ÑODNKEZXVIDRDÑSEAXMZIDMNDZXRZ_ BJLPMMFZMMTYBIFQZ4ZBVZATMZ_BJKLHHAYMLUGI AÑYEZUZMYCIGJKAYGIZYFUIJFXGGCYHUGGUFCSYQ YSUWUYCWKGCAZJCGTCJZJHAZTPTXZJKZ4HQ4XHCA W3CJW4AYQAKXJWOX3WIQJK43CEXLQAIQIXQCXFNQ ALQXLQAIQICEXKRHÑZCHZGJZPMTHEEJZKMNCAHYZ MGÑYL_IYH_CJKGYJ_IYLÑYHHA_IAGDJKAGNZIXZX IÑORKYZ_KZKNXZÑGMMKZEDXYGL_CY_QYZZH_YBNH BPYL_ZHL_JIZYIRDIUKVSDILUKLYHDIVFDCHUK_P BRBG_CWFW_WGWPIWF_IBFFHBSHGZJS_QÑIZLSNDI DMPZPIDZKIJIPZT_PLQ_HYKRY_GYO_MSDQIQLO_P LOYZ_ADYRQALPHJYJRADPQHJYECHFQAYJRFCQRNJ ZFPZJLRFPQJZLRFZHRNJZKGJIRC_HCJNRJO_CE_U GNGIRC_CD_BWZWÑNN_IMÑZVZÑZOTÑZI_TÑNZLCIE ÑIXIFDYJFKYAZILZIFKYQXJJZKLZIFÑ_Y_TV_OBA _NPWÑB_BOWEBLGE_KPVZDCKZQVZLÑQVCZKCOFKCN ZYCKYQVQL_U_YXOXWWJKEL_AÑKAÑWWEL_RJ_XFIC _WÑNCAZVZLTSOAZDCLZÑICANÑCCQJ_EHOY_KQILY CE_ME_WYJKFIYE__QZ_CBÑZÑL_CBXÑZHIDCBQJZP NBÑ_ZWPHWYFMWJÑVBFBHMWSWIKVEZWPHWMBLZDB_ NBKCU
Va de ripios
DEDDS4 Marzo 2011 - 2:27pm
Puesto que lo manda el Duque
¡hágase! porque es de ley
que aunque no lo mande el rey
no se oculte ni se truque
del cifrado la enseñanza.
Veamos pues el proceso,
demos ya la solución.
Trabajando con tesón
roeremos este hueso
sin dilación ni tardanza.
(No he podido resistirme :P )
El primer paso es ajustar el texto cifrado en líneas de 29 caracteres, que es la longitud de la clave que Agustín calculó en su momento.
Haciendo uso de la información sobre la vulnerabilidad de los espacios, vamos línea por línea sistemáticamente intentando colocarlos en su sitio.
(Por si alguno de los recién llegados lee esto, este proceso se hace a manubrio. Al menos yo no conozco ninguna herramienta para hacerlo.)
Asi, por ejemplo, en la primera línea los candidatos al espacio son "V" y "U". Probamos con "V":
OCI8L_LUFID9EILUJL1LU_EULI9LJ
El resultado no parece muy razonable, asi que probamos con "U":
OCI8LVL_FID9EIL_JL1L_VE_LI9LJ
De aqui obtenemos que el espacio está desplazado 5 posiciones de su lugar. Tres de ellas sabemos que son los números (1, 8 y 9) y las otras dos corresponden a dos letras de entre "V W X Y Z". En principio se puede suponer que no habrá "W" ni "X" y tampoco parece que haya "Y", por lo que tenemos como hipótesis que en la clave hay "V" y "Z".
Trabajando de este modo llegamos a las líneas que más información nos dan. En realidad nos dan toda la información que necesitamos.
ZMROFCBCÑZCBZCHZAGLGZJSCLQÑNZ
W_TANQYNYHAO_ISA_LBPSNRLYN_LB
CZÑCUZMNKKUXUZNCZNHZHUMNKUHZB
Haciendo uso de nuevo de la vulnerabilidad de los espacios es fácil ver que para la primera línea el espacio codifica como "Z", para la segunda línea el espacio codifica como espacio y para la tercera de nuevo el espacio codifica como "Z". Sustituyendo los valores obtenemos:
_MROFCBCÑ_CB_CH_AGLG_JSCLQÑN_
W_TANQYNYHAO_ISA_LBPSNRLYN_LB
C_ÑCU_MNKKUXU_NC_NH_HUMNKUH_B
En la primera línea la combinación "CB_CH" cuadra muy bien con "EN_EL".
En la segunda línea la "W" podría ser "A" "O" o bien "Y". Dado que solamente hay una, la hipótesis más consistente es que sea "Y".
La tercera línea es la más importante de las tres y a la que hay que prestar más atención. La combinación "NC_NH" de nuevo cuadra muy bien con "EN_EL". Se establece entonces que N -> E, C -> N y H -> L. Si sustituimos nos queda (en minúsculas pongo las letras del texto descodificado):
n_ÑnU_MeKKUXU_en_el_lUMeKUl_B
La "K" es una letra doble. No puede ser la "L" porque ya conocemos su valor, asi que podemos suponer que es la "R".
n_ÑnU_MerrUXU_en_el_lUMerUl_B
La combinación "ÑnU" podría ser "uno" o "una". Dado que abunda la "U" vamos a probar con "una", por lo que Ñ -> U y U -> A:
n_una_MerraXa_en_el_laMeral_B
Parece claro que M -> T lo que obliga a que X -> Z, y ya tenemos la frase:
n_una_terraza_en_el_lateral_B
Si lo juntamos con la línea anterior y sustituimos las letras que parecen obvias (W -> Y, L -> C, B -> O):
y_TANQYNYHAO_ISA_coPSNRLYN_co
n_una_terraza_en_el_lateral_B
Y aquí es donde llegamos a la parte "menos noble" del asunto. ¿Qué ocurre si buscamos en el todopoderoso google "con una terraza en el lateral"?.
Esto lo dejo como ejercicio al lector.
A partir de aquí vamos hacia atrás con el texto hasta la primera línea. Una vez hecho esto el cálculo de la clave es trivial.
Un saludo.
Pues has tomado el camino difícil
LlamameX4 Marzo 2011 - 6:41pm
el analizar una longitud de clave y romper la sustitución. Una vez obtenida la LC que ya teníais podíais haber ido contra el proceso de generación de las Ki y os habríais llevado una sorpresa (la que me llevé yo, vamos), puesto que ¡convergen!
Probad si no a decodificar con cualquier cosa de la misma longitud, por ejemplo con
12345678901234567890123456789
Y mirad hacia el final O_o
Muy bien
Agustín4 Marzo 2011 - 5:07pm
Me llama la atención tu habilidad para trampear con los textos vidriosos. Donde yo veo un galimatías, tú ves "EN_EL", y luego vas tirando del hilo. Un buen ejemplo de descifrado con lápiz, papel... e imaginación. Deberíamos enseñar este hilo a los "nuevos" cuando vengan con sus cifradillos-deberes de clase.
Enhorabuena.
¡DEDDS ha vuelto!
Agustín4 Marzo 2011 - 12:05pm
¡Proteged vuestros cifrados!
Enhorabuena, again. Ahora agradeceríamos una poca de explicación.
Jornada primera
DEDDS4 Marzo 2011 - 10:21am
Sala de armas del castillo de Don LlamameX de Kriptopolis. los demás formando artístico grupo y escuchando a DEDDS, que en el centro de la escena está recitando una trova.
"Los dos hermanos Quiñones
(léase Agustín y un menda)
a la lucha se aprestaron
y al correr de sus teclados
como dos exhalaciones
hasta este reto llegaron
... y descifraron."
¿Y la clave?
"LA_VENGANZA_DE_DON_MENDO_1918"
Un saludo.
P.S. Me ha faltado "y para lavar su honor, Henos de Pravia", que es una frase que siempre me hizo mucha gracia. ;)
¡¡ENHORABUENA!!
LlamameX4 Marzo 2011 - 11:30am
Mis aplausos reciban vuesas mercedes.
Dígnense,
si molestia no es,
en relatar el lance
y cual fue el avance
con el que la bestia cayó,
si cogieron del revés
la generación de claves
o si causaron otros males
su funesta perdición
que tengo que darme en los dedos
LlamameX3 Marzo 2011 - 5:38pm
para no publicar ya el algoritmo bueno. Para que vayais haciéndoos una idea:
En el texto del reto según cryptool:
La entropía del documento es 4.71
[La entropía máxima posible es 5.20]
El mismo texto con el nuevo algoritmo
La entropía del documento es 5.20
[La entropía máxima posible es 5.20]
MUHAHAHAHA
Rie, rie...
DEDDS3 Marzo 2011 - 11:41pm
que si todo va según lo previsto (y mucho me temo que asi es) vas a tener que publicar el algoritmo nuevo más pronto que tarde.
Solo un pelín de paciencia más :P
Un saludo.
Lo siento
AgustínB3 Marzo 2011 - 10:28pm
Yo es que había dicho que me iba a centrar sólo en ACYNOS, porque sino me centraba sólo en un reto tan complicado lo veía difícil de resolver y el reto pasaría a batir records de invatibilidad.
Tu reto lo he leído pero no me he querido implicar, aunque ante el poco progreso contra ACYNOS me dediqué a ayudar a las nuevas generaciones.
Si sacar la versión, que parece muy mejorada también la dejaré pasar porque voy a ver si con la sujerencia de Lou Cypher y con la ayuda de la Ganzúa se puede conseguir algo.
Igual, sin tú saberlo, te he metido en un berenjenal. Pero bueno, si tú no puedes no te preocupes que ya veré qué es lo que yo puedo hacer. Si hay algún voluntario más que lo comente.
Saludos ;-)
AgustínB
Me encantan los berenjenales XD
LlamameX4 Marzo 2011 - 9:55am
Así que si puedo echar una mano en algo aquí me teneis.
Un pasito
DEDDS1 Marzo 2011 - 1:42pm
Como veo que este reto va despacio, que es como a mi me gusta (y puedo) voy a sacar un poco de tiempo para echarle una mano al mozuelo Agustín.
Mirando, mirando, creo haber averiguado el porqué. Otra cosa es que sea capaz de explicarlo. La mejor manera es con un ejemplo.
Clave:
CLAVE_DE_EJEMPLO
Texto:
HOLA_QUE_TAL_VAS_AMIGO_MIO_ESPERO_QUE_BIEN_Y_TU_FAMILIA_BIEN_GRACIAS
Si lo metemos en la página que nos ha dejado LlamameX para jugar, obtenemos los Ki intermedios.
ABCDEFGHIJKLMNÑOPQRSTUVWXYZ_1234567890
======================================
CLAVE_DJMPOBFGHIKNÑQRSTUWXYZ1234567890
PMLAYGQEÑRNBCDFHIJKOSTUVWXZ_1234567890
_ILFJEXHÑNABCDGKMOPQRSTUVWYZ1234567890
AYKQNÑGFUPBCDEHIJLMORSTVWXZ_1234567890
HAQSK_XENGDBCFIJLMÑOPRTUVWYZ1234567890
Y aquí está el quid de la cuestión: si aplicamos la primera clave al texto plano (al primer fragmento de la misma longitud que la clave), podemos ver como el espacio "_" codifica como "Z", por lo que en el texto codificado tendremos tantas "Z" como espacios hay en el original.
HOLA_QUE_TAL_VAS
JIBCZNSEZRCBZTCQ
Al recodificar el texto obtenido para obtener la siguiente clave, observamos que el espacio está de nuevo colocado en su sitio, por lo que en la siguiente codificación el espacio codifica como espacio
_AMIGO_MIO_ESPER
_PCÑQH_CÑH_YOIYK
Obtenemos la siguiente clave recodificando el texto obtenido y otra vez el espacio codifica como "Z".
O_QUE_BIEN_Y_TU_
KZOSJZIÑJDZWZRSZ
Esto quiere decir que para muchas de las líneas del texto codificado, la "Z" representa al espacio. También quiere decir que para muchas de las líneas, el espacio se representa a si mismo. Por esto es por lo que no tienes bien todos los espacios que has calculado.
¿Por qué "muchas" y no "todas"? Porque si en el texto plano aparecen, por ejemplo, a la vez la "Z" y la "Y", el espacio pasa a codificar como "W", por lo que se rompe "el baile". Después lo recuperamos, pero hay que tener cuidado con estas "excepciones".
Otra cosa curiosa es que los números solo aparecen al principio del texto codificado, por lo que pienso que los números están en la clave y luego no hay ninguno en el texto.
¡Hale Agustín!, que ya tenemos por donde cogerlo.
Un saludo.
P.S.: las letras "dobles" en el texto codificado tienen que representar letras dobles en el texto plano.
Gracias, DEDDS
Agustín1 Marzo 2011 - 3:15pm
Creo que tienes razón. Esa debe ser la grave vulnerabilidad de la que habla el autor. Vamos p'allá. Pero despacito, como a ti y a mí nos gusta, es decir, para darle tiempo a mellon a descuartizar el monstruo.
Clave larga = debilidad
Agustín1 Marzo 2011 - 12:24pm
Con el fractal este lo que en realidad tenemos es una serie de cifrados por sustitución monoalfabética con la misma longitud que la clave. En este caso es difícil asignar letras en fragmentos de texto de tan solo 29 caracteres. La paradoja de este cifrado es que con claves más largas sería más fácil de romper, porque tendríamos fragmentos mayores en los que se podrían hacer mejores estadísticas. Naturalmente, tampoco una clave excesivamente corta sería buena, ya que dejaría casi inalterado el alfabeto. Creo que la longitud que has elegido es de las mejores. Cumple la condición de que "para que un cifrado sea irrompible, prácticamente basta con que sea corto".
La verdad es que no veo cómo avanzar, por más que tú hables de grandes debilidades que piensas corregir para la siguiente versión.
UUUF
LlamameX28 Febrero 2011 - 5:21pm
Madre mia, la implementación es de papel de fumar mojado. Usando la vulnerabilidad que tiene he localizado en google el texto en claro que use para el reto en un minuto, así que ¡ánimo! ¡que lo tumbais a poco que sopleis! (y que ya tengo Fractal_Koch en la recámara)
JI, ji, ji...
DEDDS28 Febrero 2011 - 6:00pm
Qué fácil es cuando se está "a ese lado" del asunto ;)
Preeguntita
Agustín26 Febrero 2011 - 5:02pm
¿El texto plano contiene números? Y más concretamente ¿contiene dígitos sueltos? Porque si es así, como dice infosniper, los números hacen que el análisis de frecuencias sea impracticable.
La respuesta debería ser "es posible"
LlamameX26 Febrero 2011 - 6:42pm
Si quieres te la contesto y gastamos un comodín, pero creo que podeis deducirlo por vosotros mismos.
No des pistas
Agustín26 Febrero 2011 - 7:27pm
No quiero devaluar el reto.
La pagina
LlamameX25 Febrero 2011 - 8:43pm
Aquí teneis la página que os prometí para que podais trastear más a gusto
Al hilo
DEDDS25 Febrero 2011 - 10:28pm
de esta "página" que has puesto para que trasteemos (y antes de que se me vuelva a pasar la ocasión) yo quiero darte las gracias por una página parecida que pusiste para un reto de hace ya unos años, que yo no pillé porque estaba recién llegado a Kriptopolis y no tenía ni pajolera idea de lo que estabais hablando la mayor parte del tiempo :-)
Esa página de entonces me sirvió para empezar a entender un poco el mecanismo (por llamarlo así) de la criptografía y para adentrarme en el mundo del "javascript". Te puedo decir que aún la conservo con su nombre original (llamame36b) y con las debidas modificaciones la uso para tareas más o menos sencillas porque es muy fácil de manejar.
Asi que, de nuevo gracias.
P.S. Estoy por aquí aunque lamentablemente no tengo mucho tiempo para los retos.
Un saludo.
Pues me das una alegría
LlamameX26 Febrero 2011 - 3:45am
Me alegro que te haya sido útil, esa es también la intención.
Bueno, pues 29
Agustín25 Febrero 2011 - 2:15am
No lo digo por decir. He hecho el siguiente análisis:
1. Se descompone el texto en fragmentos de N letras, donde N varía desde 10 hasta 100, en el supuesto de que la longitud de la clave esté contenida entre esos valores, si no, apaga y vámonos
2. Se busca en cada fragmento la letra más repetida, que debería corresponder al separador, siempre que la longitud del fragmento no sea demasiado pequeña, claro.
3. Se toman las frecuencias relativas de las letras más frecuentes de todos los fragmentos de una longitud dada, y se halla su valor promedio. Se descarta el último fragmento que, en algunos casos, es residual.
Por razones supongo que lingüísticas, este valor promedio es máximo para los fragmentos de longitud más corta, como el de 10 letras, y va disminuyendo; pero para la longitud 29 se produce un ligero repunte, que yo atribuyo a que, efectivamente, para ese tamaño estamos escogiendo las letras que corresponden al separador, cosa que no ocurrirá para longitudes arbitrarias.
Así que la longitud de la clave, si el estudio es correcto, sería 29, y los caracteres que representan el espacio en cada fragmento serían los que figuran en esta lista, acompañados de su correpondiente frecuencia relativa:
Si esto fuera cierto podríamos empezar a valorar los grupos de pocas letras para determinar los famosos monosílabos. Y si no, yo lo dejo, que tampoco parece haber mucho ambiente aquí.
P.S.
Se observará que aparece mucho la letra "Z". Es, con mucho, la letra más frecuente del texto cifrado, por razones que no logro comprender, pero que sin duda serán relevantes para el análisis.
******** EDICIÓN *********
Con la hipótesis anterior, salvo errores, el texto cifrado, con los separadores sustituidos por espacios, sería:
********* FIN EDICION *******
Buen análisis
LlamameX25 Febrero 2011 - 8:20pm
No es del todo correcto, pero vas en la dirección adecuada.
Ambiguo
Agustín25 Febrero 2011 - 9:09pm
Tu comentario me deja confuso. Ya magino que los resultados no son correctos, pero ¿no mide 29 la clave?
Que si
LlamameX26 Febrero 2011 - 3:44am
La clave es de 29 carácteres, eso lo tienes, aunque muchos de los espacios que marcas no son correctos (afortunadamente)
Ok
Agustín26 Febrero 2011 - 12:25pm
Vale
Revisando la hipótesis
Agustín24 Febrero 2011 - 3:37pm
No estoy nada contento con lo que dije antes sobre una clave de 28 letras. Desde el principio se puede ver que hay muchas "U", que tambión podrían representar al separador. Si así fuera, la longitud de la clave sería mucho mayor. Qué lío
¡Buena idea!
Calario24 Febrero 2011 - 1:42pm
Muchos de mis colegas tenían serias dificultadas no sólo para manejar la recursividad, sino para entenderla.
No obstante, la recursividad es algo que se usa para programar algoritmos de generación de fractales pero el concepto del fractal es otra cosa distinta. En realidad, los dibujitos de los fractales lo que realmente pintan es la parte de la que se tiene seguridad de que "no es fractal".
En un comentario anterior se hace mención al uso de conjuntos de Mandelbrot en lugar de primos largos; el objetivo es el mismo: hacer llaves con objetos raros de encontrar.
Bromas recursivas
Agustín26 Febrero 2011 - 4:33pm
Una broma de gurús informáticos: "para entender la recursividad, primero tenemos que entender la recursividad". Y una aplicación de la vida cotidiana: De un tipo insufrible, completamente insoportable, yo dije: "A ése lo que le pasa es que no sabe lo que le pasa"
Completamente de acuerdo
LlamameX24 Febrero 2011 - 4:22pm
Evidententemente no podemos llegar a un cifrado "fractal" puro puesto que manejamos conjuntos de datos discretos. Las aproximaciones con las que estoy jugando simplemente tratan de emplear las técnicas de cálculo de fractales en el cifrado de datos.
Podríamos ser más rigurosos y llamar a esto un cifrado recursivo, pero creo el termino fractal que es más visual en los modelos (curva de Koch) con los que estoy trabajando. Aparte de que es más resultón :)
Of course!
Calario25 Febrero 2011 - 1:16pm
Está claro que "Cifrado Fractal" es un nombre con más gancho que "Cifrado recursivo" ¡Lo compro! :-)
Hipótesis 28
Agustín24 Febrero 2011 - 2:41pm
En el primer tramo del mensaje cifrado, la "L" representa el separador "_", y esto ocurre hasta el carácter número 28, donde dicha letra deja de aparecer. Es decir, se ha producido una transición debida al cifrado recursivo del primer cacho. De manera que la clave tendrá una longitud de 28 o muy próxima.
Ahí se ven las palabrejas de 1 y 2 letras que a los expertos les sugieren partículas como "A" "Y" "O" "EL" "LA" "UN", pero que a mí no me dicen nada.
Del 29 al 56, aparece rutilante la "U" como candidato al separador, con lo que tendríamos otro cachito:
Etc.
¿Qué sabemos?
1. Que la clave mide 28, que contiene los números 1, 9, 6 y 8, por lo menos.
2. Que la primera clave compactada y completada sitúa la "L" en la posición 28 del alfabeto, el dichoso separador.
Y ya no veo más, porque mi mente se pierde en los laberintos de la recursividad.
Todo esto es una hipótesis, claro.
********* REEDICION *******
Un poco de "ingeniería social":
¿Por casualidad naciste en el 1969 o 1966 o 1968?
Nada, cosas mías.
********* FIN REEDICION ******
Buena aproximación
LlamameX24 Febrero 2011 - 4:35pm
Aunque veo que las curvas del camino consiguen su objetivo. Tener una única longitud de clave (LC) debería dificultaros (impediros, vaya) una buena aproximación estadística. El tema del 28 (debo decir que no es esa la cifra, te devuelvo la pelota XD) es una buena vía de ataque y etrapolando el método creo que podeis fácilmente establecer LC a lo largo del texto.
Lo del año O_o ¿quieres saber mi horóscopo chino? pues nací un año del tigre.
Me vas a permitir unas preguntas
usrdxt23 Febrero 2011 - 2:25pm
y me vas a perdonar si alguna es una chorrada (most of them) o no la quieres contestar para no facilitar el asedio de los que nos estrujamos el seso con estas cosas...
Entiendo que si tenemos un alfabeto de 38 caracteres, expandiremos la clave K0 (si es menor de esa longitud) de alguna manera hasta que, según las operaciones necesarias, alcance los 38 caracteres que tiene K1.
¿La eliminación de los caracteres repetidos es de izquierda a derecha, en el sentido de lectura o es de otra manera?
¿El relleno con los caracteres ausentes del alfabeto sigue el mismo orden, de izquierda a derecha o se hace de alguna otra manera?
Si lo tienes calculado o pensado (seguro que sí), ¿qué pasaría si los caracteres de relleno llegaran a duplicarse también? ¿cómo trataríamos ese proceso?
No seas muy duro conmigo xD
Es que he abreviado demasiado...
LlamameX23 Febrero 2011 - 4:34pm
Dado que el método para construir K1 es el que ya se ha usado en otros retos he condensado la explicación esperando que ya os sería familiar. Me explico un poco mejor. Construimos K1 desde K0 de la siguiente manera:
ABCDEFGHIJKLMNÑOPQRSTUVWXYZ_1234567890
En nustro caso quedará:
CLAVE_DJMPOBFGHIKNÑQRSTUWXYZ1234567890
Como ves, por construcción, no puede haber carácteres repetidos. A partir de ahi la primera codificación será por sustitución directa:
Es decir HOLA_QUE_TAL_VAS (A1) se codifica como JIBCZNSEZRCBZTCQ (B1)
Hasta aquí nada nuevo bajo el sol. La gracia empieza a partir del segundo grupo (cortamos por longitudes de clave, en este caso hacemos grupos de 16). Ahora obtenemos K2, codificando JIBCZNSEZRCBZTCQ con la misma substitución, comprimiento y rellenando. Tendremos:
Y usaremos K2 como antes hemos usado K1. Es decir, si el texto en claro siguiera como _AMIGO_MIO se codificaría con
Resultando _PÑQH_CÑH, con lo que el texto codificado final sería
JIBCZNSEZRCBZTCQ_PÑQH_CÑH
En este ejemplo queda claro que es conveniente usar números en la clave, ya que si no no entrarán en la codificación. También decir que no busqué cosas más complejas para los cálculos de las Ki tanto por dar más oportunidades al ataque (que me interesa ver como se comporta el concepto) como por facilitar la implementación y la comprensión del modelo.
Espero que haya quedado más claro. Todas las operaciones las he hecho a mano, así que es posible que haya algún desliz.
Error y pista
Agustín24 Febrero 2011 - 12:37am
Según mis cuentas, el cifrado que pones de ejemplo tiene un error
Debería ser:
o sea, que falta una C en la posición 19
Curiosamente, los separadores de las últimas palabras están en su sitio, je, je.
Y si cifro con la misma clave el texto:
se obtiene:
Obsérvese que los separadores coinciden de vez en cuando en ambos textos (los he marcado con astersico). También ha dejado la primera letra sin transformar. Seguramente será cosa de la clave elegida, que es débil. No sé, no sé... ¡mellon!
Cierto
LlamameX24 Febrero 2011 - 2:30am
Ya dije que lo hice a mano. Lo de los separadores, aunque casual, revela que la composición de alfabase para la generación de las Ki es demasiado importante y genera una debilidad. No es exactamente el problema que había visto pero lo agrava. Resolviéndolo pasa menos pero aún pasa.
De todos modos esta es la primera aproximación. Estoy ya preparando la segunda con un diseño basado en la curva de Koch. Esta vez ya completamente recursiva... pero me espero a que lanceis el engendro maltrecho al abismo.
Que las matemáticas
usrdxt24 Febrero 2011 - 11:33am
nos pillen confesados!
De verdad, se os ocurren unas cosas que es para quitarse el sombrero...
Gracias por la explicación
usrdxt23 Febrero 2011 - 5:20pm
Como no sigo todos los retos, alguna cosa se escapa, ahora ha quedado perfectamente claro :)
Más claro
Agustín23 Febrero 2011 - 4:45pm
Va estando más claro, incluso para una mente "alumínica", como la mía. Ahora me gustaría tener una expliación igual de clara del descifrado, porque con tantos pasos (fractalmente) recursivos, me pierdo.
Es equivalente.
LlamameX23 Febrero 2011 - 5:49pm
Seguimos construyendo las Ki de la misma manera. Sólo tenemos que decodificar aplicando la inversa en cada grupo. En el caso del ejemplo primero obtenemos A1 decodificando B1 con K1 (cielos... acabo de ver -y resolver para la versión 1.1- un problema gordísimo :O :O :O a ver si lo pillais... Uy que eso es una pista).
¡Andá!
Agustín23 Febrero 2011 - 11:29pm
Pues como se entere mellon...
Otras interpretaciones de "cifrado fractal"
LlamameX23 Febrero 2011 - 2:20am
Antes de bautizar al engendro estuve mirando si existían cosas parecidas ya hechas y efectivamente así es (incluso patentes). Hay otros enfoques como el uso de los conjuntos de Mandelbrot y Julia para generar espacios de claves (en lugar de números primos) PDF, el uso de valores fractales bidimendionales como claves para cifrar imágnes y vídeos en sistemas DRM, etc.
En estos casos la codificación en si no parece parte del cálculo fractal sinó que ésta se apoya en fractales ya existentes. Mi idea es llegar a que el proceso de cifrado sea de por si una función recursiva, de manera que a mayor longitud del texto más complejidad se añada (al contrario de lo que viene pasando con los cifrados más clásicos).
Si, me fije en eso
LlamameX23 Febrero 2011 - 1:55am
Si el alfabeto base es precisamente ese.
Creo que esas agrupaciones vienen un poco por como se generan las Ki que implica un doble cifrado con la misma clave y creo que es una debilidad del sistema aunque me gustaria ver como puede explotarse.
Como ya os digo la complejidad de la notación es más que nada formal. Luego la implementación es de mecanismo botijeño. Eso es lo que más me sorprende del sistema, que me parece muy complejo de atacar para lo simple que es. Aunque trabajoso podría hacerse con "lapiz y papel".
A ver si mañana os publico una paginilla con la implementación en javascript y ya vereis.
Imaginación
Agustín23 Febrero 2011 - 1:35am
Imaginación no te falta, compadre. Un cifrado robusto, creo, porque al tiempo de cripto-análisis hay que sumarle el tiempo necesario para entender el asunto..., vamos, una eternidad. Oye, ¿y el alfabeto es, como parece, ABCDEFGHIJKLMNÑOPQRSTUVWXYZ_1234567890? Curiosamente, algunos números no salen (2, 5, 7, 0). También es curioso que los números, que son muy escasos, se concentren en las tres primeras líneas y en las líneas 17-20 contando desde el final. Se diría que hay como "transiciones", en el texto. Mereces que te "fractalemos" la cabeza. Ah, ojo, y esto es sólo el nivel 1.
Felicidades
eb4bgr (no verificado)23 Febrero 2011 - 12:27am
LlamameX, el método que tú describes en este tipo de cifrado es lo más aproximado que he encontrado en Kriptópolis, pero con cálculos muy distintos, a los fundamentos en los que me basé para crear el Cifrado PSA en el año 2003. Felicidades.
No, no es open-source. En el
eb4bgr (no verificado)23 Febrero 2011 - 11:55pm
No, no es open-source. En el futuro ya veré qué opciones puedo considerar.
Un saludo.
Lo tienes publicado?
LlamameX23 Febrero 2011 - 11:48am
Si es así me encantaría echarle un ojo.