Foros:
Brillantemente superado por LlamameX en tiempo record. ¡Enhorabuena!
Por Agustín
Debéis saber que, a la vista de la descomunal potencia de algunos atacantes a los que no quiero nombrar, pero que todos sabéis quiénes son, esta vez la cosa va en serio. Este engendro no está pensado para que os divirtáis, sino para que lloréis lágrimas de sangre, eso en el caso de que tengáis a bien prestarle un poco de atención, a pesar de -o gracias a- mis desafortunadas palabras iniciales.
Bueno, al grano. Es un cifrado diabólico -al menos a mí me lo parece- que reúne las siguientes características:
- I. La clave mide 32 caracteres, y se completa, si es necesario, por un sencillo procedimiento.
- II. El alfabeto se modifica a partir de la clave.
- III. Se cifra el texto por bloques de 32 caracteres, que previamente se desordenan a partir de una clave -distinta cada vez- y del alfabeto modificado.
- IIII. El cifrado consiste en XOR con cada carácter del bloque desordenado y los de la citada clave variable que se genera, a partir de la anterior, para cada bloque.
1. El alfabeto es el que últimamente está de moda, es decir
ABCDEFGHIJKLMNÑOPQRSTUVWXYZ_.,:;
de 32 caracteres, que puede codificarse con 5 bits
2. Hay una clave inicial que debe medir exactamente 32 caracteres. Si mide menos, se completa por un procedimiento simple que consiste en añadirle caracteres mediante la fórmula
K[i +1] = K[i] + 1
que ya se empleó en la Omelette. Es decir: Si el primer carácter es una A, el primero que se añade será una B, si el segundo es una B, el segundo que se añade será una C, etc.
Por ejemplo, si la clave es
LOS_LAMELIBRANQUIOS
(que es un tipo de molusco), la clave completa será:
LOS_LAMELIBRANQUIOSMPT.MBNFMJCSB
3. El alfabeto se modifica a partir de la clave, del siguiente modo:
a) Se obtienen las posiciones de la clave en el alfabeto base, lo que nos dará la lista:
12 16 20 28 12 01 13 05 12 09 02 19 01 14 18 22 09 16 20 13 17 21 29 13 02 14 06 13 10 03 20 02
b) Luego se ordena esta lista para obtener una secuencialización, de forma que podamos tratar con las repeticiones.
Clave ordenada 01 01 02 02 02 03 05 06 09 09 10 12 12 12 13 13 13 13 14 14 16 16 17 18 19 20 20 20 21 22 28 29 Secuencia 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
c)Ahora procedemos a desordenar el alfabeto de la siguiente manera: Tomamos la primera letra, que es, lógicamente, la A. Como el primer valor de la clave es el 12, que aparece por primera vez en la posición 11 (empezando por cero) de la secuencia, la letra A irá a la posición 11 del alfabeto
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 __ __ __ __ __ __ __ __ __ __ __ A_ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __ __
Hay que marcar de algún modo que la posición 11 ya está ocupada. Yo lo he implementado borrando el valor 11 de la matriz de posiciones de la clave.
A continuación tomamos la B, a la que le corresponde el valor 16 de la clave, cuya primera posición en la secuencia es la 20, luego la B va a la posición 20:
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 __ __ __ __ __ __ __ __ __ __ __ A_ __ __ __ __ __ __ __ __ B_ __ __ __ __ __ __ __ __ __ __ __
y así sucesivamente, hasta que nos queda el alfabeto desordenado de esta forma:
FMKX;,HZJP.AEIGSW_NYBQTÑLCR:UODV
4. A partir de aquí ya podemos empezar a cifrar. Tenemos un flujo de entrada que es un fichero normalizado con respecto al alfabeto base. Por ejemplo este texto sobre la revolución palestina del malogrado Rodolfo Walsh, quien fue hecho desaparecer por la dictadura de Videla, :
LA_REVOLUCION_PALESTINA_POR_RODOLFO_J._WALSH_EN_ESTE_AGOSTO_DE_EN_QUE_RECRUDECE_LA_AGRESION_DE_ISRAEL_EN _MEDIO_ORIENTE_Y_EN_QUE,_CORRESPONDIENTEMENTE,_SE_MULTIPLICAN_LAS_MENTIRAS_IMPERIALISTAS_PROPAGADAS_POR_LOS _GRANDES_MONOPOLIOS_DE_LA_COMUNICACION,_RESULTA_IMPRESCINDIBLE_LEER_LO_QUE_ESCRIBIERA_ESTE_INSIGNE_Y_RECONO CIDO_PERIODISTA_Y,_MAS_QUE_ESO,_ESTE_CONSECUENTE_COMBATIENTE_REVOLUCIONARIO,_INTEGRANTE_DE_MONTONEROS,_QUE _DESAPARECIERA_EN_MARZO_DE_A_MANOS_DE_LA_DICTADURA_DE_VIDELA._ES_ESTA_LA_VERDADERA_HISTORIA,_DOCUMENTADA_A UN_CON_FUENTES_QUE,_COMO_LA_ONU,_SI_PUEDEN_SER_SOSPECHADAS_DE_PARCIALIDAD,_NO_ES_PRECISAMENTE_EN_FAVOR_D E_LA_RESISTENCIA_PALESTINA,_Y_RELATADA_POR_UN_RODOLFO_WALSH_SOBRE_EL_QUE_HOY_YA_ES_UNIVERSAL_SU_CREDIBILIDA D_Y_HONESTIDAD_INTELECTUAL,_UN_ESCRITOR_ALABADO_MUNDIALMENTE_Y_RECONOCIDO_COMO_UN_CLASICO_DE_LA_LITERATURA _POLITICA_Y_COMO_UN_EXCELSO,_PENETRANTE_E_INSUPERABLE_INVESTIGADOR._EL_PRESENTE_TRABAJO_DE_RODOLFO_WALSH_F UE_PUBLICADO_EN_EL_DIARIO_NOTICIAS,_EN_JUNIO_DE_._PUBLICAMOS_ADEMAS_LA_POLEMICA_POSTERIOR_ENTRE_WALSH_Y_EL_E NTONCES_EMBAJADOR_DEL_ESTADO_DE_ISRAEL_EN_ARGENTINA._EL_CONJUNTO_DE_ESTOS_MATERIALES_ES_REPRODUCIDO_EN_B ASE_A_LOS_CUADERNOS_DE_LA_REVISTA_JOTAPE_QUE_APARECIA_EN_LOS_Y_A_LA_EDICION_REALIZADA_POR_LA_EDITORIAL_ULTIM O_RECURSO,_EN_MAYO_DE_._
https://www.dropbox.com/s/aqx7zpjl4y6mhrw/Rodolfo-Walsh-La-revoluci%C3%B...
a) Tomamos el texto en bloques de 32 caracteres
Bloque LA_REVOLUCION_PALESTINA_POR_RODO
b) Generamos una clave nueva, a partir de la anterior, por el procedimieto ya descrito, de tomar para cada carácter, el que le sigue en el alfabeto base. Aunque esto parece excesivamente trivial, no lo es tanto, porque las posiciones de esas letras van a referirse al alfabeto modificado, y la secuencia ya no será tan simple. Eso también viene de la Omelette.
Nueva clave MPT.MBNFMJCSBÑRVJPTNQU,NCÑGNKDTC
Cuyas posiciones en el alfabeto modificado son:
Posiciones de la clave 02 10 23 11 02 21 19 01 02 09 26 16 21 24 27 32 09 10 23 19 22 29 06 19 26 24 15 19 03 31 23 26 Posiciones ordenadas 01 02 02 02 03 06 09 09 10 10 11 15 16 19 19 19 19 21 21 22 23 23 23 24 24 26 26 26 27 29 31 32 Secuencia 00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
c) Mediante esta clave se desordena el primer bloque de caracteres, por el procedimiento ya descrito.
Bloque desordenado LLEURACLAERROOT__VNI_SD_OIPOPNOA
d) Se realiza XOR entre cada carácter del bloque desordenado y cada carácter de la clave, usando las posiciones de ambas en el alfabeto modificado
En nuestro caso tenemos los siguientes valores:
Bloque cifrado C_RT:VAL.;XQP.EGCT;V;Y:X;RZSAEAN
(El cifrado de este artículo está en: https://www.dropbox.com/s/0rh8jodo4sr1xy0/Cifrado-R-Walsh.txt)
Y así sucesivamente. Si el último bloque tiene menos de 32 caracteres se completa con el mismo procedimiento que se usa para completar la clave, pero con referencia al alfabeto derivado.
Por Agustín
Como véis, hay cierto tejemaneje de bytes, como en AES, pero para cada bloque es distinto, porque la clave va cambiando. Podría parecer que es un OTP porque la clave no se repite, pero tiene la debilidad de que las nuevas claves se derivan de la que introduce el usuario. Ay, que no debía señalar las debilidades. Bueno, da igual, porque ya veo a LlamameX estableciendo ecuaciones diofánticas sobre los índices y los valores, y..., bueno, ya sabéis cómo es.
El descifrado sigue el mismo procedimiento con la salvedad de que primero se realiza el XOR entre la clave y el bloque cifrado, y luego se reordena, La reordenación es muy sencilla, pues, basta con ir a los valores de la clave secuenciados, e ir tomando los caracteres que ocupan en el bloque las posiciones correpondientes.
El reto consiste en descifrar este fichero
Bueno, lo que más me preocupa es que varios de vosotros tenéis retos en marcha, y alguno más, que estábais a punto de alumbrar, como el CHE de LlamameX, Lo siento mucho, pero es época de crisis y hay que hacer méritos ante el Lado Oscuro. Por cierto, que al parecer no hay ninguna oferta de empleo en este momento. Cachis.
Os dejo ya, que oigo el retumbar de la botas de la Mengela, acercándose.
P.S.
Prometo prestar toda mi atención a vuestros monstruos, dentro de mis limitaciones, claro.
PS II
Veo que algunas listas (que se tratan como matrices) se cuentan desde 0, y otras desde 1. Ello es debido a ciertas limtaciones del lenguaje de programación empleado. Si embargo mi implementación funciona al cifrar y descifrar. Vosotros podéis modificar ese aspecto y los que haga falta.

¡Demontres!
¿No decías que no se te viniera con más cifrados?
Bueno, devuelvo mi cifrado a su cripta, pero que sepais que para cuando salga estará más gordo y más fuerte.
Y ahora echémosle un vistazo al tuyo...
Un arrebato
Después de tantos días lidiando con el XOR de sqrmatrix se me ocurrió de repente, tomando cosas de anteriores chapuzas, y en unas pocas horas lo tenía funcionando. No me pude resistr a colgarlo. Me disculpo por haber interferido con lo tuyo, por otra parte no veo por qué no habrías de presentar tu invento.
Casi que mejor que no nos dispersemos
Me parece que vamos a necesitar todas nuestras energías en este monstruito tuyo, así que me espero.
Para acabar de pillarlo bien primero haré mi propia implementación, que es la mejor manera de ver a los algoritmos en paños menores, aunque a priori este tuyo parece ya para jugar con los chicos grandes.
Un detalle,
La construcción de la clave extendida no la haces con la fórmula que indicas, sinó que sumas 1 al carácter desde el principio, algo así como: K[L+i]=K[i]+1, donde L es la longitud de la clave sin extender
Sigo leyendo
Exacto
Es lo que quería decir, y así es como creo recordar que se hacía en Omelette.
Vaya pedazo de bicho
Es lo primero que se me ha venido a la cabeza después de leerlo. Me parece que se van a hacer realidad tus palabras: vamos a llorar lágrimas de sangre. Bueno, vamos a ver qué se puede hacer
El reto parece inaccesible
Creo que el enlace está corrompido. Basta con que pinchéis en este otro
https://www.dropbox.com/s/wgvki5nbxl4svse/AESito32.txt
Arreglado
Ya está OK
Gracias
Gracias, admin
Pero bueno: ¿no decías que
Pero bueno: ¿no decías que los retos tenían que ser abordables, para no frustrar a los atacantes? Venga, por lo menos dinos si la clave del reto es toda una frase de 32 bytes, o ha sido completada con el procedimiento que indicas; estamos en cuarto menguante y proceden las peticiones de cosas que queramos menguar, o eso dicen..
Eso era antes
Eso era antes de ver de lo que algunos pueden llegar a romper. Bueno, reconozco que a lo mejor me he pasado, pero es frecuente que el diseñador imagine a su criatura más fuerte de lo que en realidad es, al menos es lo que a mí me ha pasado siempre, sobre todo cuando han aparecido ciertos criptoanalistas. En este caso, por ejemplo, estoy seguro de que los atacantes sacarán partido de la regla de extensión de la clave, que es en extremo sencilla. Creo que una de las cosas más fuertes del cifrado es la desordenación de los bloques, que los deja prácticamente irreconocibles. Si embargo, como la desordenación también proviene de la clave, si ésta es vulnerable, estamos en las mismas. A propósito de la clave del usuario, en efecto, en el cifrado ha debido ser completada, aunque sólo un poco.
REEDICIÓN
He pensado que si el punto débil del cifrado es la extensión de la clave, debería haber puesto una clave corta para que esta debilidad se manifestara. Esoy considerando poner otro cifrado con otra clave.
Tanto potito en la clinica
ha acabado desarrollándote superpoderes y llevándote al lado oscuro. Pero te vas a enfrentar a un grupo de Vengadores entrenado en la lucha bit a bit, con sus uniformes ajustados y sus lenguajes de programa-repetición. No te darán cuartel hasta recluirte de nuevo en las profundidades de las mazmorras de la clínica, pero antes despedazarán a esa criatura infernal que acabas de crear. ¿Verdad chicos?.
¿Chicos?
(...)
¡CHICOS!
¡Esperadmeeeeee!
Supongo
Supongo que los potitos tendrán su poquito de radiactividad, aunque me han dicho que ésta no produce exactamente los efectos que se le atribuyen en la La Masa.
Contraespionaje
He dado orden de que se confeccione otro cifrado con una clave algo más corta, a ver si eso ayuda.
(Это тот же файл? Глупо! Теперь они слишком легко)
Wala!
Que sepas que eso son 2 ayudas y la segunda (la del ruso) muchísimo más gorda que la primera.
Espero que se note
Aunque yo no estaría muy seguro, debido a la diferente desordenación de los bloques. Pero ya veremos.
Por cierto, ya hemos fusilado el bruto ese, que seguramente estaba pagado por vosotros.
Si no estuviera desordenado
ya estaría frito. Un XOR entre los cifrados nos daría el XOR entre las claves. De todos modos el tamaño de bloque es lo suficientemente pequeño como para intentar alguna cosa por frecuencias comunes.
He hecho bien
He hecho bien fusilándolo
Una preguntita...
Ayer tuve que interrumpir la implementación del cifrario, y me quedé a medias. A ver si me pongo esta noche un ratito, porque me pasa como a LlamameX, hasta que no lo implemente no lo entenderé.
Quería preguntar para confirmar. Para obtener la siguiente clave del siguiente bloque, a las letras de la clave actual se les suma 1, pero su codificación se hace con el alfabeto desordenado actual, no con el ordenado del comienzo (es decir, no se hace con "ABCDEFGHIJKLMNÑOPQRSTUVWXYZ_.,:;"), ¿no?
En efecto
Las nuevas letras para la clave se obtienen del alfabeto base; pero los valores de sus posiciones se extraen del alfabeto modificado, porque creo que así se consigue mayor entropía.
En el ejemplo expuesto arriba, la clave para desordenar y cifrar el primer bloque es
que se obtiene con las letras siguientes a las de "LOS_LAMELIBRAQUIOS..." en al alfabeto base. Pero la lista de sus posiciones es:
Observa que a la primera letra, la M. le corresponde la posición 2, que es la del alfabeto modificado:
Aqui he cometido una chapuza, al numerar las posiciones a partir de 1, Espero que me disculpéis.
P.S.
Yo tampoco entiendo los algoritmos hasta que no los implemento. Y a veces ni entonces.
Una cosilla
No lo puedo comprobar hasta que termine mi implementación, pero me está pareciendo que la evolución es siempre sumando 1 modulo 32, si esto es asi cada 32 bloques repetimos clave, cosa que permitiría encolumnar un grupo de 32 cada 1024 caracteres, puesto que las posiciones desordenadas dependen sólo de la clave. A ver, a ver.
Claro
Se pasa a la letra siguiente, y al llegar al final del alfabeto se empieza por el principio. O sea, modulo 32, claro. Estaba claro que habría periodicidad. Esa es la parte más débil del sistema. Es que no contaba con que entendieras el ruso, je, je.
Es que el ruso
forma parte del entrenamiento básico... ops!
Quizá me equivoque, porque no
Quizá me equivoque, porque no lo he comprobado, pero puesto que la suma de 1 se hace respecto del alfabeto desordenado, es muy posible que la clave no se repita, ya que al variar el alfabeto, varía la letra que se codificará al sumarle 1 para una misma letra, y distintos alfabetos (precisamente la pregunta que hice antes era para asegurarme de que esa repetición no se producía)
El alfabeto sólo se modifica una vez
El alfabeto sólo se modifica una vez, por lo que me temo que al ir creando nuevas claves, las posiciones se repitan a partir de cierto punto, aunque no lo he comprobado. Ahora que lo pienso, no costaba nada haber creado un alfabeto nuevo para cada bloque, y así no tendría ahora a LlamameX pisándome los talones, incluso con la traición del agente Kassimirov.
Eso está mejor
Yo había entendido que en cada bloque de 32 caracteres se desordenaba de nuevo el alfabeto. Entonces sí, se repite la clave cada 32 bloques, por lo que podemos hacer como dice LlamameX, partir el criptograma en líneas de 1024 caracteres, una debajo de otra, y luego partir estas líneas en grupos de 32 caracteres. Bloques en la misma vertical están codificados con la misma clave. Y puesto que el desorden depende únicamente de la clave, todos los bloques de 32 caracteres en una misma vertical tendrán el mismo desorden. Si tomamos una columna de un carácter de uno de estos bloques, veremos que todos los caracteres de esa columna están xoreados con una misma letra de la clave, por lo que conservarán las estadísticas de un texto normal. A partir de estas estadísticas, podemos determinar la codificación de las letras más frecuentes (en este caso, los espacios), y luego... tendré que mirarlo con más detenimiento para ver cómo se podría determinar la letra de la clave a partir de estas estadísticas
Espero no haberme equivocado en lo que he dicho, que tampoco me he parado mucho a pensarlo
Esa es la cosa
Y tenemos una ayuda añadida, la del kamarada kassimirov. Es decir, tenemos el mismo texto claro cifrado con dos claves distintas. Aunque tendrán ordanaciones distintas mantendrán exactamente la misma distribución estadística, por lo que no será difícil identificarlas. Esto debería ayudar mucho a desentrañar la codificación del alfabeto con el XOR, puesto que si xoreamos los carácteres cifrados que corresponden a las mismas posiciones (aunque estarán en columnas distintas) deberíamos obtener el XOR de las claves. No parece imposible poder sacarlas de ahí aunque falta por ver el esfuerzo.
Aunque voy demasiado lanzado. Aún me falta acabar la implementación para ver si todo esto es así o no. A ver si todo esto acaba en borraja's water.
Creo que no se va a poder hacer XOR...
La operación XOR entre texto desordenado y clave se hace respecto del alfabeto desordenado, y los alfabetos van a ser distintos en cada criptograma. La operación XOR entre los mismos caracteres cifrados con diferentes claves no nos va a dar la operación XOR entre las claves que los codifican
Si, cierto
Es verdad, el XOR directo no funcionará por las codificaciones distintas. Son huevos y castañas. Sin embargo no cierro del todo la puerta.
Ah, pues al final va a ser
Ah, pues al final va a ser divertido y todo. Sigamos los pasos del difunto Xor:
Tenemos un hexagrama que se repite dos veces:
:JWSYH
y 12 pentagramas que se repiten también 2 veces cada uno:
:JWSY
;MJEH
AMSQT
FFIS;
J,B,R
JWSYH
MWMYC
NW;KM
PÑJÑA
SHQHN
VYÑ_J
YRCW,
Eso va a ser
Eso va a ser (parte de) la lista de los nombre de Dios. El primero me recuerda al famoso Tetragrammaton de Yavéh. Ay no, que era YHWH.
Versión javascript
He subido ya la versión online de Aesito32, podeis verla aquí:
http://llamamex.nixiweb.com/aesito32/
¡Bravo!
Ahor podrá sumarse más gente al ataque... si les dais tiempo.
Primeros datos
Verificado, la clave se bucla cada 32 bloques, pero lo que es más divertido, la primera clave extendida, la que se uso para generar el alfabeto desordenado, se utiliza también en el bloque 31 (y cada 32 después) ya que la que cifra el primer bloque se obtiene de su evolución por el mismo método
En el texto de ejemplo:
pista pista
Buenas hace tiempo,he estado escondido sin enfrentarme a los retos que postean y hoy he decidido hacerlo, y solo tengo una pregunta no se si puedas responderla o quizás la respuesta diga demasiado...
al grano la pregunta es ¿La clave inicial es algo coherente o simplemente creaste una clave como cayera?
------------------------------------------------------------------------------------------------------------
"El que va demasiado aprisa llega tan tarde como el que va muy despacio"
Coherente
El acuerdo tácito vigente es que las claves sean legibles, a menos que se indique lo contrario por razones justificadas.
Hala!
Otro que se lanza a la piscina!
Bienvenido ;)
Gracias
Espero no ahogarme tan rápido.
Agustin --> gracias por tu respuesta, como había dicho nunca me había lanzado a estos retos y no sabía la estructura que manejaban... y si que hace llorar
------------------------------------------------------------------------------------------------------------
"El que va demasiado aprisa llega tan tarde como el que va muy despacio"
Otra idea
Se va a notar que vengo de un atasco de tráfico, ya sabéis las ideas locas que me dan.
Dado que la clave siempre evoluciona +1 mod 32, para cada posición pasaremos por todos los carácteres del alfabeto modificado. Concretamente en algún momento pasaremos por una cuyo primer carácter sea el que se codifica como 0. Dicha clave, al ordenarla, mantendrá ese carácter en la primera posición y además al hacer el XOR su valor será nulo, manteniendo el valor del caracter en claro (eso si, codificado por el alfabeto desordenado).
Sabemos también que cada 32 bloques volveremos a pasar por él, con lo que cada 32 tendremos en la primera columna algo parecido a un carácter sin cifrar. Podríamos pues agrupar por bloques de 32 y buscar por frecuencias en ellos asumiendo para cada uno de ellos que estamos en el caso Ki=0. Eso nos permitiría obtener 32 candidatos a alfabeto derivado y desde ahí atacar la clave.
Да
Для меня это кажется нормально
¡Cállese, Karpinski, o el próximo será usted!
Cachis...
Ayer no me pude poner con el reto, y no sé si hoy y mañana podré, pero seguro que el Viernes, Sábado y Domingo podré. Lo que ha dicho LlamameX me parece muy interesante, y si sigue así, pronto se lo cargará
No me cabe duda
Ya casi está
Implementación
Voy muy retrasado con este reto, aún estoy implementándolo. Tengo el cifrado, pero no me acaba de salir bien el descifrado, no entiendo la explicación de la parte última del procedimiento, que se resume en una única frase: La reordenación es muy sencilla, pues, basta con ir a los valores de la clave secuenciados, e ir tomando los caracteres que ocupan en el bloque las posiciones correpondientes.
El resultado que obtengo, el XOR previo a la reordenación con el primer bloque cifrado del ejemplo, es LLEURACLAERROOT__VNI_SD_OIPOPNOA. ¿Qué he de hacer a continuación?.
Para cuando lo termine ya estará descifrado, si es que....
la reordenación
1 Tomas la clave, la ordenas, y le asignas un índice correlativo a sus elementos
2 Tomas el primer carácter la clave, y ves cuál el índice se su primera ocurrerncia en la matriz ordenada
3 Marcas esa posición P como "no disponible"
4 Tomas carácter del bloque que tenga la posición P, y lo colocas el primero del bloque ordenado
5 Volver a 2 con los caracteres siguientes. Se van colocando en el bloque ordenado, después de los anteriores
Gracias!, por lo menos lo
Gracias!, por lo menos lo habré implementado para cuando termine LlamameX, qué verguenza por dios!
Uy ahi casi lo saque por prueba y error
Ya que con esa definición no me acababa de salir. Tal y como lo hago:
1) 2) y 3) Como dice Agustín.
4) Obtienes el carácter del bloque desordenado (el que acabas de obtener del XOR) de la misma posición P obtenida en 2)
5) Concatenas ese caracter al nuevo bloque.
Te lo pongo en código
function Reordenar(clave,bloque,alfabeto) { var i=0; var j=0; var a=''; var resul=''; var ocupados=new Array(LB); var oclave=Ordenar(clave,alfabeto); for (i=0;i<LB;i++) { j=oclave.indexOf(clave.substr(i,1)); while (ocupados[j] && j<LB) j=j+1; a=bloque.substr(j,1) ocupados[j]=true; resul=resul+a; } return (resul); }Gracias de nuevo, ya lo había
Gracias de nuevo, ya lo había conseguido gracias a la nueva explicación de Agustín, también había intentado espiar desvergonzadamente tu código javascript, pero no descarga los fuentes, no se que pasa.
Cositas y me corrijo
Decía que cuando la clave empiece por el carácter Ki=0 la el Ci correspondería al Ai codificado por el alfabeto derivado. Es mejor aún. Dado que todas las codificaciones se hacen por el mismo alfabeto, el carácter al final será el del texto en claro ya que lo aplicamos 2 veces, para obtener Ai y para Ci. En el caso del ejemplo. Dado que el alfabeto derivado es
Será la F la que será nula en el XOR. MIrando que clave generada empieza por F tenemos:
Que se aplica a
Para ser codificado como
vemos que la E original se mantiene en su sitio (por el valor 0 de la F) y que no cambia en el cifrado, ya que hacemos XOR entre 0 y 12 (su valor en el alfabeto derivado) pero buscamos ese mismo valor (12) en el alfabeto para buscar el carácter que representa, que por supuesto es "E".
Así pues podemos buscar carácteres en claro concretos. He buscado ver para que bloque el espacio tiene una frecuencia más alta y en el ejemplo encuentro
Que casa perfectamente con el caso en que la clave empieza por F, validando el método.
Trasladando este sistema al texto del reto tenemos:
De donde podríamos concluir que la clave 16 (y cada 32 posteriormente) empieza por el caracter nulo. No obstante aparecen dos "Y" y ninguna "A". No es imposible aunque poco probable. El siguiente 2 casos con más espacios sólo tienen 3 y en uno de ellos sale una "W" y en el otro 3 "J" con lo que me quedo con este candidato.
A partir de aquí sabemos que la clave 17 empezará por el carácter siguiente, según el alfabeto normal, al que represente al espacio y que los XORs que se hagan se harán con 1 con lo que la representación del caracter será +-1. Voy a mirar que camino encuentro más viable si ese o buscar el espacio en la columna 1 (para mi la primera es la 0)
Ahora con la vale corta
Lo anterior corresponde a la clave larga. Los mismos datos con la clave corta son
Aunque el número de espacios coincide, recordemos que con esta clave el cero lo tendremos en otra posición con lo que los carácteres en claro no tienen por que coincidir.
Ahora bien, podemos usarlo para determinar en que líneas de tenemos "A" en el claro en posiciones conocidas (que pasen a ser, por ejemplo segundas columnas) para ver que carácter tiene la clave ahí. Si determinamos eso, si bajamos hasta la 31 sumando 1 desde ella tendremos un caracter de la clave original.
¡Pssst! ¡Eh! ¡Compis!
Ahora que no mira, ¿os habéis fijado que a LlamameX parece como si se le trabara la lengua?. Entre el Cifrario XOR y ahora el Aesito32 no le dáis respiro, por lo que a ver si le va a entrar un paralís. Que tener el melón en contínuo trance es mu malo pa las nuronas, tú.
Uyy, que se ha girado. Despistad.
Páginas
opinar