Un reto con el criptógrafo de Wheatstone con clave homofónica

Imagen de tokamak
Enviado por tokamak en

Foros: 

Por tokamak

Os voy a presentar un reto de medios vuelos, apto para las tórridas tardes veraniegas. El asunto está basado en el criptógrafo de Wheatstone, inventado por Sir Charles Wheatstone, o más bien reinventado pues parece que estaba basado en otro diseño anterior, de un militar americano: Decius Wartword.

El aparato en cuestión es un mecanismo simplísimo, pues básicamente consta de dos agujas, una mayor y otra más pequeña, dispuestas sobre una esfera de reloj, engranadas de tal manera que ambas se separan una posición, una letra, en cada revolución completa. El mecanismo para hacer tal cosa consiste tan sólo en dos engranajes de diámetro diferente unidos entre sí.

En la parte exterior de la esfera se dispone un alfabeto ordenado de 26 letras, además del espacio colocado en la posición de las 12, en tanto que en la parte interior tenemos un alfabeto perturbado de 26 letras, sin el espacio, que, junto a la combinación de partida de las dos agujas, constituye la clave del invento.

Para cifrar vamos buscando cada letra del texto en claro con la manecilla larga, incluyendo espacios, siempre en el sentido de las agujas del reloj. Al hacer esto, siempre que cifremos un espacio o una letra alfabéticamente menor que que la última, provocaremos un cambio de alfabeto al obligarnos a efectuar una revolución completa con la aguja grande. Es notable que pueda llevarse a cabo un cifrado polialfabético en un mecanismo provisto tan sólo de dos engranajes.

Hay algo más de información en este artículo (pdf) de Germán Fco. Martínez Navarro, de donde provienen las imágenes de este reto.

En la imagen 1 vemos un ejemplar del criptógrafo, mostrando las agujas y los dos alfabetos. El alfabeto interior tenía las letras desmontables, para cambiar la clave con facilidad. Otros sistemas empleaban para tal efecto un disco de papel, con la clave del día impresa.

Podemos seguir el ejemplo que nos proporciona el autor del citado artículo, a partir de la posición del criptógrafo que muestra la figura 2. El alfabeto interior, que no se lee bien, es:

FBKSYRDLTZAGMUNHOVCIPWEJQX

Si ciframos

CHICO FELIZ

el resultado será

TUNZWLUUPCZ

, en tanto que

CHICA FELIZ

nos dará

TUNZTTNNWIA

Para simular este dispositivo de cifra, podéis usar este pequeño script VB para Excel:

Function cifrar(aguja_grande, aguja_pequeña, texto, alfabetoP)
 
a1 = alfabetoP
 
a0 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 
M = aguja_grande
N = aguja_pequeña
 
x = InStr(a0, M)
y = InStr(a1, N)
 
    zz = (y - x + 26) Mod 26 + 1
    a2 = Right(alfabetoP, 26 - zz + 1) & Left(alfabetoP, zz - 1)
 
For i = 1 To Len(texto)
 
  letra = Mid(texto, i, 1)
  x = InStr(1, a0, letra)
  y = x
  If x = 0 Then y = 26
  If x < antes Then a2 = Right(a2, 25) & Left(a2, 1)
 
 
  lc = Mid(a2, y, 1)
 
  cif = cif & lc
  antes = x
 
Next i
 
cifrar = cif
 
End Function
 
Function descifrar(aguja_grande, aguja_pequeña, texto, alfabetoP)
a1 = alfabetoP
 
a0 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
 
M = aguja_grande
N = aguja_pequeña
 
x = InStr(a0, M)
y = InStr(a1, N)
 
 
    zz = (y - x + 26) Mod 26 + 1
    a2 = Right(alfabetoP, 26 - zz + 1) & Left(alfabetoP, zz - 1)
 
For i = 1 To Len(texto)
 
  letra = Mid(texto, i, 1)
  x = InStr(1, a2, letra)
  y = x
 
 
  If y <= antes Then
    a2 = Right(a2, 25) & Left(a2, 1)
    x = InStr(1, a2, letra)
    y = x
    If x = 26 Then y = 0
  End If
 
  If y = 0 Then lc = "_" Else lc = Mid(a0, y, 1)
 
  cif = cif & lc
 
  antes = y
 
Next i
descifrar = cif
 
End Function

El problema es que este criptosistema estaba obsoleto en el momento de su invención, pues ya eran conocidas las técnicas estadísticas de ataque a los cifrados polialfabéticos, como el método Kasiski, de manera que me hice la pregunta de si sería posible mejorarlo un poco, pero eso sí: sin perder nada de su maravillosa simplicidad. Además el criptógrafo de Wheatstone fue utilizado por el bando nacional durante la Guerra Civil (Clave Norte) y siguió en uso (me imagino que para regocijo de los servicios secretos extranjeros) hasta mediados de los años 50.

Por otra parte, resulta que el método de cifra oficial del Ejército durante el final del XIX hasta la Guerra Civil, por lo menos, fue el criptógrafo de cinta, básicamente una tabla de homófonos, donde cada letra del alfabeto se codifica utilizando varias cifras diferentes, entre el 0 y el 99, así que se me ocurrió combinar este método con la máquina de Wheatstone, disponiendo los números del 01 al 99, desordenados, en el disco interior, mientras que en el exterior se colocarían, ordenadas, las letras del alfabeto, repitiendo todas varias veces, tanto más cuanto mayor sea su frecuencia de aparición en español.

Además echaremos mano de un útil recurso utilizado desde el Renacimiento, los nulos,insertando el nulo en la posición de las 12, prescindiendo, por tanto, del espacio habitual en todas estas máquinas.

Cuando ciframos, por ejemplo una "A", ponemos la aguja en una cualquiera de las posiciones consecutivas de la "A", siete en total, lo que permite reducir la fatiga del cifrador, que tendía, a la larga, a repetir los mismos homófonos para la misma letra. Además con el sistema de Wheatstone hay que cifrar con otra letra, por ejemplo la "Q", los dígrafos como "LL" o "RR", en tanto que con mi sistema basta con elegir una posición homofónica distinta para cada letra, si resulta que es igual que la anterior (el script que proporciono lo hace automáticamente).

La corona exterior tendría el siguiente alfabeto:

/AAAAAAABBBCCCCDDDDEEEEEEFFFGGGHHHIIIIIJJJKKKLLLLMMMMNNNNNOOOOOOPPPQQQRRRRRSSSSSTTTTUU
UUVVVXXXYYYZZZ

Se ha prescindido de la Ñ, reemplazable por N, y de la W, que se puede substituir por dos uves.

Para cifrar un texto cualquiera, por ejemplo:

 EN_UN_LUGAR_DE_LA_MANCHA_DE_CUYO_NOMBRE_NO_PUEDO_ACORDARME_NO_HACE_MUCHO_TIEMPO_QUE_
VIVIA_UN_HIDALGO_DE_LOS_DE_LANZA_EN_ASTILLERO_GALGO_CORREDOR

Lo primero quitamos los espacios:

ENUNLUGARDELAMANCHADECUYONOMBRENOPUEDOACORDARMENOHACEMUCHOTIEMPOQUEVIVIAUNHIDALGOD
ELOSDELANZAENASTILLEROGALGOCORREDOR

Y a continuación pintamos de vez en cuando una raya vertical al tuntún; serán los nulos:

ENUN/LUGARD/ELAMA/NCHADEC/UYONOMB/RENOPUE/DOACORD/ARMENOHAC/EMUCH/OTIEMPOQUEV/IVIAUNHIDA
/LG/ODELOSD/EL/ANZAENAST/ILLE/ROGAL/GOCORREDOR

Y ya podemos cifrar, utlizaramos la siguiente clave homofónica en el disco interior:

010203040506070809101112131415161718192021222324252627282930313233343536373839404142434445464748495051525
354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899

Con la posición de agujas (grande, pequeña)

A,  08

Obtenemos el cifrado:

3060 9364 0957 9638 1784 2713 3258 2063 1816 7030 4921 3540 3120 0817 8177 8075 3325 9745 8288 9014 4928 4691
3542 9204 4831 3306 8155 8994 6542 4836 5785 2350 6938 0219 7461 9007 0311 2965 3343 8032 8047 3003 7983 6352 5095 7952 1171 7601 1730 7255 7604 5660 1454 6480 1561 3842 5993 0606 8262 3622 9466 1266 9626 8027 4039 8885 2945

En grupos de a dos, como manda la tradición española para las claves homofónicas.

Este sistema podría darse por bueno si emisor y receptor pudiesen cruzar unos 20 mensajes entre ellos, con la misma clave. Si cada mensaje tuviese de media unos 200 caracteres, al lacónico estilo militar, esto nos da unos 4000 caracteres. Yo os proporciono un reto con unos 5 Kbytes, y valor y al toro, que sin duda se puede descifrar.

Reto cifrado

2722 4384 6271 3673 6290 9829 3369 2128 5170 3732 0670 2503 4569 6709 9049 9540 2818 2316 5636 3092 3251 4452
5252 3575 7931 8046 1136 6301 9028 8106 7992 6712 7969 0160 4477 4693 4433 1747 5576 0774 3544 4223 1299 6270 2027 4996 5748 5638 1041 9504 7345 2726 6167 0403 5477 5528 5978 6686 3694 8785 8611 2936 3094 6086 3741 1232 8281 2447 5724 4041 0884 3737 8730 6324 7711 3317 9704 1699 0597 6484 4908 9906 9384 0220 2383 2351 4575 6764 7209 6583 8537 3358 1853 5181 5556 6962 0712 4788 2512 5428 7610 8638 4673 5739 2412 2027 6238 0315 7919 9894 9869 5251 1137 8149 4473 3675 4679 6821 9109 7353 2802 7512 5876 1307 6905 5231 5489 5896 8889 5122 5868 9007 7817 0452 5453 6237 4406 9801 7994 0964 9939 6625 3536 2311 8731 1151 0487 9152 9765 8699 0973 3305 6023 5027 9298 0602 7950 1346 1592 5393 3493 9234 4253 4226 3150 1917 8104 0797 4805 7397 4198 2486 6289 3927 6065 7404 8505 7766 9060 2099 5215 3696 2057 5175 8371 4056 5912 3275 6031 5562 5019 9865 4540 2182 6944 6479 8294 3064 5625 3756 6369 8018 3683 5428 3328 9163 4956 8824 1565 6296 5977 2219 5734 2851 2816 1976 7358 3463 5051 8592 2064 9215 7919 3870 2618 2471 9001 3303 7628 6927 6112 8695 1066 8988 6557 1336 0316 0205 5718 2199 3023 9239 8907 9754 1784 7202 9802 5861 8909 8414 8229 7694 8520 8261 8131 4662 8416 4874 0499 5124 6574 3975 6349 7912 2721 5311 4164 3639 1841 9822 2108 6229 7969 8524 2645 1687 9406 4536 2375 0260 9086 2015 3728 2403 4325 8360 9560 7210 6466 0849 4397 2390 7514 5739 7217 6254 4182 3735 9596 1464 3411 7942 2618 6994 1255 7939 2313 5461 1106 5575 1942 0829 2278 3352 8732 5155 0449 7351 6979 7299 2568 9280 0876 8798 3930 3577 4955 7371 5524 6644 2317 7889 0392 6733 0131 9105 7755 1438 4928 6335 7851 3950 4570 0502 3388 1880 9490 3540 1253 5716 9843 2214 4417 5788 3971 2079 4206 2755 9515 5106 2370 6502 9066 0663 4712 6385 2487 7202 6640 3442 9933 0205 3548 5398 5240 6386 4592 9695 3778 4765 2767 5267 8578 4615 6999 9576 6639 1981 5035 5512 8592 8245 2021 3495 2227 4880 5106 6435 4398 1151 3918 4149 6504 4307 1180 6061 5404 7204 2928 2414 8543 5257 6668 7758 4025 0832 7224 1741 4885 3062 3745 9148 2635 2968 5746 3305 0473 6046 0108 6168 3166 6744 5279 1102 6389 8356 1457 1411 3690 0562 1191 3520 0483 6893 9231 8664 1161 5593 3094 0746 9403 8785 7628 2866 9985 6630 9566 5631 7097 2207 2025 4430 3748 9151 3280 4081 5576 2246 3578 5046 6285 5293 2568 1595 3023 8302 8111 0775 4121 1889 7953 3292 0364 4773 2127 5944 5376 1115 5455 6674 5601 5480 2255 5980 4697 1861 1999 6276 4117 4520 4870 9641 3217 8455 9198 7056 6684 2769 6370 2835 7156 5341 0650 6824 0280 5352 5776 7781 1236 9558 6250 9410 3125 3405 8178 4450 5613 8178 0390 6044 7369 1676 2899 6489 4792 1933 4571 1752 6383 5462 1492 5157 9277 0511 2317 4728 0434 1127 2692 1267 5802 4302 1365 4798 7657 8342 1026 3673 7114 3414 9161 0193 8095 4310 0462 0148 0332 1709 0716 5277 9255 7943 5770 2570 3841 4730 4438 9510 2989 1451 4146 0302 8184 8848 3840 1037 6586 6482 6483 6319 2166 6102 7747 9638 6774 2604 7835 0308 7507 5569 9187 9330 0413 1941 6196 5813 8320 3974 4254 7618 1815 3084 7426 4578 0321 3939 5170 5507 9680 4822 8226 8091 8424 1734 2414 4820 3221 1364 9983 0883 2781 0282 3628 1881 3978 2418 7254 9479 8214 5631 3932 8842 9721 1416 2178 1286 7401 0461 8275 7667 2099 2170 1935 1963 9543 8498 0873 1096 3465 0598 1214 7012 4118 5965 1745 6375 2720 8338 6751 4870 8069 1353 7380 8019 8730 2943 7245 5039 5431 1035 4904 6409 3248 8877 5905 8911 7988 7935 0864 9240 6052 4929 4943 0269 9995 0639 6291 5949 3674 8853 1270 9718 3972 6181 3144 3450 5740 1335 3351 4886 5001 0371 9387 3170 2769 2936 2284 4778 5199 6888 7788 1055 2717 6661 7187 7690 6242 4079 7358 5073 7449 4813 1828 0826 9118 2667 6416 2493 2866 3293 7374 7302 7640 3262 2575 6740 1489 3770 8271 2905 4505 6341 2196 9826 8084 2773 6541 9167 9468 8401 4398 0176 7116 7435 1001 0273 2059 5236 4211 1934 5401 2305 5027 2634 2270 7879 1541 3529 4449 1928 8420 5314 6742 1976 2607 4838 0932 9593 9683 7918 8763 0397 1133 4991 4256 0569 1318 4666 2345 3654 0749 5997 2988 2223 2274 6169 6175 7022 3416 2574 5764 6365 6448 5350 0958 0555 8669 8231 2801 5651 2185 3973 7760 5397 5257 3329 1234 6876 4229 1763 2378 4521 5148 6053 2965 8627 9847 8268 6692 6790 1230 2007 8069 1014 6995 4360 5294 0703 1972 8366 4699 9805 9446 7646 1566 0463 7491 0653 7246 0976 1761 5026 9276 4511 7364 5095 2814 1086 9632 8517 1232 3782 3310 1304 3305 6115 3986 6444 8003 6662 1696 8729 5967 0395 7148 6786 7534 2078 7681 3247 4633 2833 4582 7279 6071 2993 1133 5769 0564 5108 5623 9487 3623 3097 1686 7578 6619 0730 4021 1187 3142 1031 8341 0950 5743 6793 0336 8154 8468 0347 3027 4824 3899 9217 0244 8965 2557 4332 1223 8481 7366 2275 1793 3870 1307 0730 4078 7226 0706 7136 0378 4606 9473 3125 6536 4710 5931 6719 9740 0881 3540 0597 8783 6548 6036 3646 0706 5139 3830 0341 3399 2635 8439 0861 5243 4758 2366 0707 5315 2506 2318 1172 2552 2503 7491 0995 8610 0477 1753 6764 2651 8557 3344 3663 4217 4598 4750 8928 9756 3261 7345 0435 2575 6441 6888 7808 3447 1490 2133 9911 6690 4099 3937 5297 0821 1254 8371 0582 0722 9619 5396 5780 6893 6095 5752 6418 8166 0488 4218 5635 9043 6886 2248 6099 9910 6614 9568 4583 3380 4380 0573 2070 4981 3226 3213 0978 2588 8775 1128 6968 5786 3917 8461 6474 5302 7176 5807 2802 9596 8835 1445 7651 0906 5790 0114 9191 5197 4941 2345 6031 3499 6755 8597 3131 0494 7050 6484 6614 9168 3110 0831 9848 5701 4279 1865 7174 0133 4952 4490 6144 0288 0939 8630 0812 9873 8661 8709 5016 8466 4219 6601 0367 6424 1133 4241 0184 6965 2434 6173 3392 0543 5655 6947 5226 4036 2758 8537 8046 0724 5745 3142 5811 5148 4801 4627 9843 9691 1769 2684 3974 7799 5966 7037 3015 0163 5708 9190 8424 8145 9589 2363 4469 1632 7940 1142 0398 1326 2924 9106 7988 3703 6849 6016 7718 4647 9098 3039 8836 9876 2488 9252 9759 8943 7824 8207 2045 5366 6878 9175 3141 9291 3920 4705 9270 9891 3746 9770 2773 5676 2650 2870 2918 6594 5285 4144 1979 8878 1785 0145 8020 0677 6292 5330 5555 9392 6653 6006 6909 4374 8567 9429 5668 3388 5230 3672 1506 8164 4590 9424 6297 7087 2337 7031 6627 7360 3459 9282 0876 0686 5922 2742 7388 5817 4686 3575 0157 6292 8396 4898 1564 0391 9348 8737 5128 2030 7328 2556 3055 3449 9957 6852 2345 8861 1597 4316 1984 7155 8086 4853 1308 1113 2182 1390 0647 8666 9906 1050 4368 7846 8716 0343 4054 8492 5890 6973 1088 3948 5775 3505 0989 8505 2158 7533 9065 1284 2740 0904 6148 4692 7784 7634 3747 2350 0831 7656 8515 1312 8580 0785 4214 7080 0780 8525 0160 1286 2707 2852 3321 2385 9582 6810 8436 0715 3070 1905 3603 3614 2637 0175 4230 9646 3743 3317 7840 2441 9980 8689 9397 9677 1573 6177 3495 7265 6872 0855 4212 6745 9358 9776 6376 5494 7675 4185 6916 8287 6976 7475 6123 8143 1518 9199 8587 8147 5312 3454 9917 0779 5710 8495 3326 2235 7129 1041 0413 3336 8634 7598 3113 1847 9501 4341 0250 8736 8798 8437 0604 2895 2931 6424 6294 9626 6347 2132 1154 9058 6563 6880 3187 7812 4634 3992 3288 7062 6779 2969 0204 1514 3084 1807 4436 4198 5591 6865 9613 2310 3990 1933 2287 9527 4378 0253 8106 8367 0255 8653 0967 6606 7018 6344 4760 5142 7042 6114 4542 5137 5522 1986 7152 8619 9861 6337 7170 5549 0454 9150 4392 7278 4666 2522 9540 6548 0726 4564 7278 6407 1778 4564 6711 4462 1664 2398 6082 9899 8569 3769 1110 7479 6943 5638 2217 5993 2230 5443 7323 0946 6252 0855 5112 9140 4309 4009 8926 2479 3498 1405 1161 4128 2006 3768 4746 5936 8320 9556 7160 2406 3972 3696 2270 1315 2171 5949 1291 8078 3075 3679 9434 7412 7370 4685 2122 4007 0914 3583 9647 9631 8921 6111 7437 1101 4837 0156 0537 9468 9679 1554 3955 1287 8957 5070 1838 8472 8702 8548 3915 9983 1656 4307 5106 8281 3886 5912 8910 8352 0184 7918 4544 6914 8446 3715 1015 3219 3398 3578 5931 8305 4783 3572 9885 2140 1827 1785 8713 2293 3399 0827 7855 2724 2759 5437 3080 0151 5716 9722 4885 3089 3958 8518 6479 3440 0346 1992 7160 8785 1668 7671 9928 0883 5743 9584 1375 1469 1053 1159 0650 2129 3620 5390 8721 1578 6702 2136 3991 6044 5955 6573 4695 1335 6709 2048 5882 4206 5962 8880 3654 2765 5283 5505 7534 3077 2550 3903 8725 7326 7908 8647 4350 2049 1632 6941 3605 8132 6748 9578 3178 0141 8449 9684 4498 3169 4050 7711 1138 9006 0459 4876 7036 7221 5907 0207 7888 3098 8812 8875 1702 1883 1904 1734 1004 2954 4847 1811 3368 7433 2628 2939 2361 3796 5257 2401 2241 8212 4475 8149 9450 3817 5551 5121 6418 9270 9610 2675 0894 0723 2789 4707 7124 4805 9147 5217 8089 2135 0179 8351 0758 9612 9004 7555 5760 8358 4146 5692 4663 4636 5970 9302 1776 0275 8632 5694 6191 1294 9541 1893 9189 2079 0408 0160 2307 4099 0453 5923 9568 4953 5315 0962 1645 8511 9728 5058 1949 1140 5620 4885 4109 2657 1641 7264 4110 0184 7883 1830 3147 8377 5190 5302 1856 8945 6408 7529 2299 0440 7848 4650 1912 0231 5345 8817 6404 7014 0810 8284 9817 5693 3509 0169 6668 3347 6808 6191 0880 2253 5015 8804 8928 6758 2066 2212 3810 1203 9305 5905 6337 0997 4995 6054 6469 6709 0524 0887 2220 6605 4302 6148 2772 4196 1831 8864 4032 3631 4256 6811 0107 7895 7882 1955 0235 8076 6069 7546 5022 3485 8716 6910 5714 5824 9025 3195 3817 8991 9455 3260 6391 8279 6023 2203 4550 1622 3968 0366 2270 2047 1752 4461 2184 2909 3356 4836 9716 2688 5851 8815 3521 1498 8695 0155 8580 8336 4140 6777 7883 1589 4266 7702 3621 8826 8372 7412 8450 9484 4070 7269 8324 6456 7198 9804 0513 5530 3766 5473 8147 5637 8740 8803 9207 0882 0773 2632 5962 1250 8389 4557 9763 5871 3485 4336 9216 7826 8567 2631 4030 9524 8433 2895 4522 5881 8636 8658 2408 2210 5999 5015 6515 9232 7899 5340 0801 7892 3468 3426 5597 2831 6025 1806 8854 6363 5229 2814 0143 8414 5171 1607 5470 2518 0814 0749 9017 9559 5585 4704 2750 3925 1502 5144 2184 1353 0261 3359 8517 9903 2536 9542 7789 7311 9124 7225 8289 4191 6497 7890 8873 5183 4443 5181 4693 7290 2860 2238 9772 4481 8305 8351 3712 7675 8663 0660 3814 5146 9325 9357 5543 0935 7654 3345 8556 5875 5492 3124 8188 3710 0540 4475 8973 8150 6224 7847 9454 1434 2678 1621 3948 4119 1860 3878 6046 7561 8626 8927 6171 6764 7810 4902 3071 3561 8191 5392 5261 9515 7580 9565 1213 0883 3215 6757 9027 0134 7838 3908 8658 6247 4467 3830 3555 8553 0327 1170 3588 1190 2471 4129 9656 2392 7340 1679 0889 2704 5803 5464 6333 9202 1553 5183 3014 3816 5286 6288 1693 7943 5732 7321 4867 7925 9771 8953 9691 9840 1967 3321 2350 8985 8747 9193 0208 6753 2006 2822 7281 8359 0193 8518 0796 5882 0290 2427 8988 2202 9920 7451 8799 8172 3031 1439 4854 1952 6552 8137 7357 8126 8241 8063 5742 4852 7139 7943 1747 9287 9386 0509 7782 2976 9314 1274 8852 6198 5595 1454 0651 6753 8989 9990 7771 5326 9783 8043 8184 6274 9213 9369 0609 4184 9150 0269 2854 5494 8780 9568 6314 8912 3495 5565 8537 2401 1604 6339 9955 8966 3907 3969 7750 4310 7249 6126 9916 2818 6561 5278 2764 7282 2507 5563 3545 9879 1584 4493 6130 4984 4456 7774 0443 9019 2326 7158 5801 2940 5902 5097 5765 8255 4041 3598 3379 8396 2960 4710 2731 2625 3318 7813 0751 4716 2279 0799 1316 2365 2979 4052 5208 1230 7758 2671 0508 3840 7834 7420 2688 3860 3854 2641 1036 4087 4369 9955 5480 5724 7325 4195 3790 7689 3389 7489 8578 0971 5966 9359 5583 2664 2392 6206 2655 6724 6976 7690 5084 2024 8365 3156 2545 6387 9904 6522 3752 2781 3320 0438 8077 5123 4405 3509 2044 9818 0235 2429 9288 8190 7960 7973 8157 7390 3548 2822 4118 5291 9403 0184 5393 4633 1402 2343 7013 8550 8519 5436 7048 6719 9683 0545 1853 4575 9170 9627 9518 1234 9282 8433 3198 3423 5138 0218 3986 5438 7497 5808 5303 5153 9129 8188 8389 3050 1097 2866 8468 6394 6674 4270 1473 7538 7732 4379 4674 5652 5297 3024 6435 3357 7384 6036 4362 5690 7685 0232 4642 6445 4245 8135 8102 4966 5453 6247 5364 1646 3393 0407 6407 4274 3901 9485 1469 8074 4807 9013 4201 3380 6703 2705 6095 5549 9498 3329 6070 7672 3872 1330 0611 3071 5047 7275 7375 5115 0464 6148 9171 4518 0703 7537 9637 2506 5365 0699 0507 5272 0883 2855 0576 7919 4958 8597 8392 1976 2063 0212 3917 4081 4183 1722 9135 0568 1493 0426 7441 5637 2445 2388 8388 5254 8285 3412 7915 8172 4058 4093 8213 3455 7028 1609 0526 1668 8326 2730 9077 8166 8828 3667 1056 2552 1054 8295 4745 1234 3216 6326 1390 0563 2949 8448 0645 9296 9237 0147 9579 1767 2050 9885 7747 5776 0429 1810 2067 3553 9068 6554 3220 7321 0496 2080 4779 0189 4286 1281 6453 1970 5055 8244 2130 1385 3330 7952 2928 9728 7795 3011 0641 0248 0309 8832 2466 8474 6469 0327 8542 3898 9715 0109 6476 3481 4514 8473 1946 8162 9295 8738 9479 8251 5718 9337 5469 4179 2647 4573 0359 0628 2230 7353 0742 9857 0217 4532 2932 6652 8175 6302 1496 4875 1547 0583 2113 9765 3048 7628 8166 7487 4393 2112 5233 4659 2169 2435 9285 1107 3197 6168 2071 2842 0704 4528 1967 7664 4975 7928 4696 5813 4691 5646 1890 0387 2484 5845 9884 5838 7332 6314 4487 4281 3187 0406 4811 1242 3701 8151 2404 2285 0476 0755 8534 4666 2184 6285 4349 4459 3752 6758 9606 4506 2042 5891 0881 8823 4819 8641 4082 9569 8780 8927 6996 0334 2111 8254 2445 0197 3915 3852 2907 6087 1925 4629 9731 9035 7473 7634 0384 8383 2295 8107 2779 5157 5608 1896 7433 3663 3648 3757 5854 6207 2313 1777 4662 41

También os proporciono los scripts para cifrar con homófonos

Function cifrar(aguja_grande, aguja_pequeña, texto, alfabetoP)
 
Randomize
 
alfabetoP = Replace(alfabetoP, " ", "")
a1 = ""
For i = 1 To 198 Step 2
 homofono = Val(Mid(alfabetoP, i, 2)) + 39
 a1 = a1 & Chr(homofono)
Next i
 
 
a0 = "AAAAAAABBBCCCCDDDDEEEEEEFFFGGGHHHIIIIIJJJKKKLLLLMMMMNNNNNOOOOOOPPPQQQRRRRRSSSSSTTTTUU
UUVVVXXXYYYZZZ"
numeros = "777777733344444444666666333333333555553333334444444455555666666333333555555555544444444333333333333"
 
M = aguja_grande
N = Chr(Val(aguja_pequeña) + 39)
 
x = InStr(a0, M)
y = InStr(a1, N)
 
 
    zz = (y - x + 99) Mod 99 + 1
    a2 = Right(a1, 99 - zz + 1) & Left(a1, zz - 1)
 
For i = 1 To Len(texto)
 
  letra = Mid(texto, i, 1)
  x = InStr(1, a0, letra)
  numero = 0
  If x > 0 Then numero = Val(Mid(numeros, x, 1))
  Do
     If x = 0 Then rango = 0 Else rango = Int((Rnd * numero))
  Loop Until Not (x + rango = antes)
  x = x + rango
 
  y = x
  If x = 0 Then y = 99
  If x < antes Then a2 = Right(a2, 98) & Left(a2, 1)
 
  lc = Mid(a2, y, 1)
  homofono = Asc(lc) - 39
 
  cif = cif & Format(homofono, "00") & flag
  If flag = "" Then flag = " " Else flag = ""
  antes = x
Next i
 
cifrar = cif
 
End Function
 
Function descifrar(aguja_grande, aguja_pequeña, texto, alfabetoP)
 
alfabetoP = Replace(alfabetoP, " ", "")
a1 = ""
For i = 1 To 198 Step 2
 homofono = Val(Mid(alfabetoP, i, 2)) + 39
 a1 = a1 & Chr(homofono)
Next i
 
texto = Replace(texto, " ", "")
For i = 1 To Len(texto) Step 2
 homofono = Val(Mid(texto, i, 2)) + 39
 textop = textop & Chr(homofono)
Next i
 
a0 = "AAAAAAABBBCCCCDDDDEEEEEEFFFGGGHHHIIIIIJJJKKKLLLLMMMMNNNNNOOOOOOPPPQQQRRRRRSSSSSTTTTUU
UUVVVXXXYYYZZZ"
 
 
M = aguja_grande
N = Chr(Val(aguja_pequeña) + 39)
 
x = InStr(a0, M)
y = InStr(a1, N)
 
 
    zz = (y - x + 99) Mod 99 + 1
    a2 = Right(a1, 99 - zz + 1) & Left(a1, zz - 1)
 
For i = 1 To Len(textop)
 
  letra = Mid(textop, i, 1)
  x = InStr(1, a2, letra)
  y = x
 
 
  If y <= antes Then
    a2 = Right(a2, 98) & Left(a2, 1)
    x = InStr(1, a2, letra)
    y = x
    If x = 99 Then y = 0
  End If
 
  If y = 0 Then lc = "/" Else lc = Mid(a0, y, 1)
 
  cif = cif & lc
 
  antes = y
 
Next i
 
descifrar = cif
 
 
End Function

Imágenes: 

Imagen 1. Criptógrafo de Wheatstone
Imagen2. Esfera del criptógrafo de Wheatstone

Buen aporte

"Hay algo más de información en este artículo (pdf) de Germán Fco. Martínez Navarro, de donde provienen las imágenes de este reto" ¡Bien! por fin un enlace externo a Kryptopolis en español. Por cierto, buen aporte, pero no le veo mucho sentido puesto que con un simple análisis, se puede descifrar.

Esmerada y digna estética para un reto excelente

Muchísimas gracias, tokamak, me parece un reto excelente: muy bien presentado y con una estética digna del mejor arte criptográfico clásico y analógico.

Aunque lamento no llegar al nivel necesario en la parte que atañe al análisis criptológico del asunto; creo que tiene mucho mérito porque, además de presentar admirablemente esta tecnología para muchos totalmente desconocida, también proporciona una asequible implementación digital para poder jugar con ella e intentar comprenderlo todo -tanto la implentación digital como el mecanismo analógico- mucho mejor.

Así que no me extrañaría que, con el tiempo, se convierta en todo un clásico en Kriptópolis tal como ya lo es el Curso básico de criptografía clásica.

Saludos cordiales,

Pedro Fernández
--

P.S. Si, como a mí me ha ocurrido hoy, no funcionase el enlace a nationalgeographic.es proporcionado arriba al facilitarnos el pseudocódigo del descifrado que queda en la variable D -y que alguien acabará implementando en uno u otro lenguaje de programación-; aquí hay archivada una versión del martes 16 de julio de 2013 que también puede servir como breve introducción a estas sorprendentes observaciones del biólogo evolutivo checo Jaroslav Flegr sobre el Toxoplasma.

Disculpas

Debo disculparme por no haber entrado a tu reto. Al principio tuve alguna dificultad en la implementación, y luego he pasado por aun período de apatía o de incapacidad intelectual -mayor de lo habitual-.

Un cordial saludo.

opinar

Texto puro

  • No se permiten etiquetas HTML.
  • Saltos automáticos de líneas y de párrafos.
Imágenes
Puedes añadir hasta 10 imágenes explicativas a tus comentarios (pantallazos, etc).
Los archivos deben ser menores que 8 MB.
Tipos de archivo permitidos: png gif jpg jpeg.
By submitting this form, you accept the Mollom privacy policy.