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.