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.

Comentarios

Selecciona arriba tu forma preferida de visualizar los comentarios y pulsa el botón para guardar tu elección para próximas visitas (sólo si eres usuario registrado).
LlamameX's picture

Por si quereis enredar


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.

JPS's picture

Una imagen vale más ...


... que mil palabras.

  ABCDEFGHIJKLMNOPQRSTUVWXYZ_123456789
A       .  .....   .   ...     . .  .. A
B       .   .. .   .   ...      ..  .. B
C     ...  . . .   .   . .     .    .. C
D     ...  .  .        ...      ..     D
E         .                            E
F                 .   .                F
G         .                            G
H .   ........        .    .. .   ..   H
I .   ........    .   .     .          I
J        .                             J
K         .                            K
L                                      L
M ...         ..   . .   .   . . .  .. M
N  . . .  .. ...   .... ..   . ...  .. N
O   . ..   .. . .  .    ...    .     . O
P     ...  ....    . . ...           . P
Q      ..  .....       . .   .  ..   . Q
R  .         .     . . ...   . ...  .. R
S     ...    ...   .    ..             S
T     . .   ...    .   . .     .    .  T
U      ..  .  ..   .    ..     .    .. U
V . ....   . ...   ...  .    .   .  .. V
W   ..        ...   .. ...       .     W
X  .       .  ...  ..  ...     . .  .  X
Y .   ........    .   .   ... .        Y
Z  .  ..   ..      .   .      . .    . Z
_ ..  ........        .    ..      .   _
1     . .  ...   .   .     .  .    .   1
2 .   . ......   ..  ..    ..      .   2
3   . ...  ...    . . . ..    .  . .   3
4  .. ...   ..   ...  .    ..   . ..   4
5   . .... ...  .         .. ..   .    5
6    .  .  . . . . ..   ..         . . 6
7 .   .... ...    .   .    .      .    7
8  .. . . ....   .. ...   . . .  ...   8
9  ......  ...     ...    .        .   9
  ABCDEFGHIJKLMNOPQRSTUVWXYZ_123456789

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

LlamameX's picture

Eh eh, que no digo


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.

Agustín's picture

Pues


Pues se siente como una liberación, un alivio.

---

Agustín's picture

MI aportación


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...

---

LlamameX's picture

Resuelto el tema del Firefox


Ya funciona correctamente desde firefox (y desde Chrome)

Saludos

p0LyeSt3R's picture

A lapiz y papel


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.

Agustín's picture

741


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.

---

LlamameX's picture

Hombre, lo he hecho con un programilla XD


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.

Agustín's picture

Interesante


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

---