Estas aquiContenido / Mi algoritmo (llámame36)
Mi algoritmo (llámame36)
Actualización (7-JUL,18:55): Superado el reto inicial en un tiempo récord, LlamameX acaba de publicar una nueva versión, presuntamente más resistente.
Por LlamameX
Siguiendo en la línea de los algoritmos caseros os presento el mío. Os lo cuento y dejo que lo analicéis. Dádme duro.
La idea es poderlo usar sin programación, ni tan siquiera macros de hoja de cálculo, con la única ayuda del lápiz y el papel (si le metemos algo de programación podemos subir mucho la dificultad de atacarlo).
Se usa un alfabeto de 36 caracteres y una clave, perteneciente al mismo, de longitud variable. Cuantos más caracteres del alfabeto contenga mejor, ya que la idea es usarla para desordenarlo...
El alfabeto (Alfabase) escogido es:
AlfaBase: ABCDEFGHIJKLMNOPQRSTUVWXYZ_123456789
Nota: No hay Ñ ni cero (se trata como O). Podría incluir uno y quitar el espacio (que de hecho fortalecería la codificación, ya que su frecuencia reduce la entropía), pero así os lo dejo más fácil.
A partir de la clave se generan 3 alfabetos ClH, ClV y ClM. Por simplicidad
los generaremos por compresión. Así:
- ClH se genera por compresión normal. Se toman las letras de la clave por orden (una única ocurrencia) y se complementan con las letras de AlfaBase que faltan en el orden natural.
- ClV se genera con las letras de AlfaBase que no aparezcan en la clave en orden inverso y se complementan con las de la clave en orden natural.
- ClM se genera con las letras de AlfaBase que no aparezcan en la clave en orden natural y se complementan con las de la clave en orden inverso.
Nota: Obviamente aquí podrían usarse 3 claves distintas. Usar una única clave debilita el sistema pero hay menos posibildades de olvidar uno de los componentes y así hay más opciones de atacarlo.
Construimos una matriz de 36x36. En la horizontal ponemos ClH, en la vertical ClV y ClM lo repartimos a razón de una letra en cada cuadro de 6x6 (tenemos 36 de ellos, de ahí el número), por filas.
A partir de aquí codificamos de la siguiente manera. Buscamos el cuadro 6x6 correspondiente a la letra del mensaje en claro y escogemos al azar una de sus casillas. La codificación del carácter se hará por 2, los correspondientes a la pareja (fila, columna) que corresponderán a caracteres de ClV y ClH.
La decodificación seguirá el proceso inverso.
Por ejemplo:
Sea la clave NOS_VEMOS_EN_ZIMBAWE_2OO9
Generaremos los alfabetos:
ClH: NOS_VEMZIBAW29CDFGHJKLPQRTUXY1345678 ClV: 8765431YXUTRQPLKJHGFDCNOS_VEMZIBAW29 ClM: CDFGHJKLPQRTUXY13456789O2_EWABMIZNSV
Repartidos por la matriz quedarán:
NOS_VEMZIBAW29CDFGHJKLPQRTUXY1345678 8CCCCCCDDDDDDFFFFFFGGGGGGHHHHHHJJJJJJ8 7CCCCCCDDDDDDFFFFFFGGGGGGHHHHHHJJJJJJ7 6CCCCCCDDDDDDFFFFFFGGGGGGHHHHHHJJJJJJ6 5CCCCCCDDDDDDFFFFFFGGGGGGHHHHHHJJJJJJ5 4CCCCCCDDDDDDFFFFFFGGGGGGHHHHHHJJJJJJ4 3CCCCCCDDDDDDFFFFFFGGGGGGHHHHHHJJJJJJ3 1KKKKKKLLLLLLPPPPPPQQQQQQRRRRRRTTTTTT1 YKKKKKKLLLLLLPPPPPPQQQQQQRRRRRRTTTTTTY XKKKKKKLLLLLLPPPPPPQQQQQQRRRRRRTTTTTTX UKKKKKKLLLLLLPPPPPPQQQQQQRRRRRRTTTTTTU TKKKKKKLLLLLLPPPPPPQQQQQQRRRRRRTTTTTTT RKKKKKKLLLLLLPPPPPPQQQQQQRRRRRRTTTTTTR QUUUUUUXXXXXXYYYYYY111111333333444444Q PUUUUUUXXXXXXYYYYYY111111333333444444P LUUUUUUXXXXXXYYYYYY111111333333444444L KUUUUUUXXXXXXYYYYYY111111333333444444K JUUUUUUXXXXXXYYYYYY111111333333444444J HUUUUUUXXXXXXYYYYYY111111333333444444H G555555666666777777888888999999OOOOOOG F555555666666777777888888999999OOOOOOF D555555666666777777888888999999OOOOOOD C555555666666777777888888999999OOOOOOC N555555666666777777888888999999OOOOOON O555555666666777777888888999999OOOOOOO S222222______EEEEEEWWWWWWAAAAAABBBBBBS _222222______EEEEEEWWWWWWAAAAAABBBBBB_ V222222______EEEEEEWWWWWWAAAAAABBBBBBV E222222______EEEEEEWWWWWWAAAAAABBBBBBE M222222______EEEEEEWWWWWWAAAAAABBBBBBM Z222222______EEEEEEWWWWWWAAAAAABBBBBBZ IMMMMMMIIIIIIZZZZZZNNNNNNSSSSSSVVVVVVI BMMMMMMIIIIIIZZZZZZNNNNNNSSSSSSVVVVVVB AMMMMMMIIIIIIZZZZZZNNNNNNSSSSSSVVVVVVA WMMMMMMIIIIIIZZZZZZNNNNNNSSSSSSVVVVVVW 2MMMMMMIIIIIIZZZZZZNNNNNNSSSSSSVVVVVV2 9MMMMMMIIIIIIZZZZZZNNNNNNSSSSSSVVVVVV9 NOS_VEMZIBAW29CDFGHJKLPQRTUXY1345678
Un texto como:
EN_UN_LUGAR_DE_LA_MANCHA
Se codificaría como:
VC 2L EA PO BK _A RZ JV 5Q SX XU ZW 8B VD MW 1A SY SW BO Z1 IK 3O 5R EU
Bueno, pues ahora ahí va el reto:
Se ha recibido el siguiente mensaje codificado con llamame36:
5C SX V9 HA RW A3 9F YJ 6X XR HI YF JH OJ DE 6G Q1 HA 7K YH 2J SW VW 7H 2L 4Z WS TE XN 6G 17 HU IF 7Z BL ZK Z4 ZR 6J Y_ B4 R4 6J 52 _H IE PV VW DX IL 3C 5L YE WS DW CJ HG KI OJ AL TL A5 YH VW U9 5G UF HF XS 4K IK 2P M8 4G 85 SM WM C9 AV _E _A RB 7L 8T ZE N5 8K 87 A9 CV V8 7E O9 OM 1E _F 5Y R3 PL C9 5E R8 PE UR 2L QG 9G HF PR QF 2U 4_ 2H YG H6 HI M1 2I HE 9B 3J 3W ZE NR OF R4 7E CE TE YF SR MN HK 2Z IA 32 6G 9K NW U9 9G HK 8S 4L 4U 9K N3 SG 7A HG AM IF WV CR YK CG 3G R9 2G OK NW Q9 3K N1 WW _I 4C BX HJ 1K RR 7G VT 2A _J 1P MT ZK XM ZF 47 7U IE 4_ 6N 3L NM UR _F 4B OE MA CX _F 8G ND _E 9D 6G M5 4F 5Z Q9 AX N8 7E 6S HH 8Y 5J VE AN UG YL VT YI YK Y2 M3 SR 8G 8_ _I IK CF TK 44 TX OF 1K NN Q4 8E 2K NS XB 5L WV IH VF QV UJ HK 97 CR NF H7 RB 9G U9 __ VL 8L RV B9 5K IG TR MN IQ 7G 3U I_ XV 4F V1 YQ 7K VS SM 5J 51 AX IE XO 1E IF AR 4R R1 1G 9Y 8J NL CN UJ YG _U MB 7K 2P 2U 1Z SE 9L WV A8 4E YJ 6W WX _I IJ 56 6R 12 OC 2_ W5 PK C3 II IE PX XX IH 2G A9 7Q 2T 7H YL 6P 2G ZV NN IE 86 OM 5H UW 7K 67 HJ NT 4F YE 27 4K 5O ZJ VJ BN DF 7J 69 SN 3L 2J GI 2H 8P PK 1E _G VC 7Q _L 8U YH XR 8L M9 YA IE 3E VR YF 9R OW MN 82 PG QN RV IE 3S 5L 7K 37 AR VE DV 2E FQ IU 46 SG 8K 2G XO YI IE 8Q 7U VW 4G V8 H_ _K 1J VS IJ YZ 2Q 1Z OJ 9J NR B5 4K 2J AK __ 4Q 1L XJ BR CJ YL AJ TE YL 6D IQ OY 7F O3 OR 4F IG SL RX U8 9E N1 NR 7U V5 RT CN YL UN 2G MM CV IG YI OO _F 5L VN U9 6L 9J NR 1T UX HE 3C 6J NU BV IF 9G WT _K EI PG DJ TG Q4 H_ WN B8 9J 2J OX XN HU 7F YY 4K X8 QL BR NR 2H _E XW AW N4 RL IA MC 2L TV UJ IQ X3 ZE YI 2L 3F RB _K 97 SM 4U DX 2E _Z QM M3 O3 PW 5K YK 9L DE IF VE 2H QK HL 35 R8 _H RV 8S 5G 7J P9 SR 1K 7K MC _H HG 5Y TM 5Y PT Y_ N8 PE C8 7U 2E Z2 IE Z9 OX 8E 7G WC __ 7G U3 2H _B _A 7K VW DM _G 5C PL NI CV HE 9E NB 7J 8B OK M8 8J 87 Q1 BW V1 IE PV VR 2_ YK HZ 1G X5 DF AW NX _I HG MX BX R9 NJ YU WO YG BK IQ 32 7U R5 OK YA 2E 8J WC HF B4 _I 76 AW WV 7E PM QJ C3 8E 9T HL T3 TV 3G 7G H2 N9 4E 3X TG 3G R8 5F 2E PV MN IA _L ZB YA 8I PJ D4 2A 86 SL DW RW _F 1P QX WW YJ BR HJ UG OF MR IL FU PF CL Q5 2_ _E HH VD YF VA 2U N4 1T SF NW YE 5O 3K 8C PE 82 _I 9C UM YF _U IE C8 UN 9S BW AK _J RT CN BG IK T8 PX 5J 7G _7 3J NR QL YU AG D5 8J ZK DG _L 4L VM _E 3K WD 7J 4P ZR 3Q DM
Se ignora la clave usada. Sin duda se trata de un mensaje vital, que debe ser descifrado lo antes posible.
Os adjunto una implementación del algoritmo en javascript. No se muy bien por que me hace un extraño en Firefox y en Chrome y se me borran los campos después de generarlos (luego lo miro) pero en explorer funciona bien.
Podeis probarlo aqui.
... que mil palabras.
Ya sé que sólo debemos usar lápiz y papel ... bueno, pues imaginaros que he pasado multitud horas apuntando un puntito a cada una de las entradas del mensaje. ;)
[PS] Agustín, que tal se ven las cosas desde éste lado? :)
JPS
que debais atacarlo con lápiz y papel. Digo que el requisito era que los extremos de la comunicación no han de necesitar nada más (nuestro servicio de espionaje es pobre). Vosotros interceptais el mensaje y lo podeis atacar con lo que os plazca.
Pues se siente como una liberación, un alivio.
De momento he confeccionado una Hoja de Cálculo que fabrica los alfabetos, la jodida matriz de 36*36 y el descifrado automático
La primera hoja resuelve el ejemplo presentado por LlamameX
En la otra se plantea el reto en sí, a falta de la clave. Se pueden probar diferentes claves, a ver qué pasa, sin perjuicio de otras líneas de análisis. Tal como está configurada la página, el mensaje (que es largo) habría que drescifrarlo a cachos. El algoritmo se presta a ello sin problemas.
El ejemplo:
http://sites.google.com/site/mambrilla/llamame36/ElEnigmadeLlamameX-Elre...
http://sites.google.com/site/mambrilla/llamame36/ElEnigmadeLlamameX-Elre...
El problema (con clave ignota)
http://sites.google.com/site/mambrilla/llamame36/ElEnigmadeLlamameX-Clav...
http://sites.google.com/site/mambrilla/llamame36/ElEnigmadeLlamameX-Clav...
Ya funciona correctamente desde firefox (y desde Chrome)
Saludos
Pues como te hayas liado a escribir los 1450 caracteres del mensaje codificado te has podido aburrir jaja.
Así que, haciendo práctica de mi poderoso análisis criptográfico, deduzco que el mensaje es de 725 caracteres. Sé que esta información os servirá... No hace falta que me deis las gracias.
Un saludo a todos.
Siento no haber tenido tiempo para tu algoritmo Agustín.
A mí me salen 741, pero da igual, si se sacaran los seis primeros sería un éxito
No te preocupes, todos sabemos lo que es la falta de tiempo.
Pero no es muy complicado hacerlo a mano si tienes la tabla llena. Si además cuadriculas por colores como un damero (incluyendo los bordes) es bastante inmediato ya que es muy visual. Decodificar tampoco cuesta, por la misma razón.
El truqui ese de los grupos 6x6 hace que el cifrado no sea biyectivo, y dificultará, supongo, el análisis por frecuencias.
No está nada mal.
Ahora bien, si no acertamos con la clave, apaga y vámonos