Por LlamameX

Visto que me se acabó la diversión con el cifrado de arena (si, ya se que queda ACYNOS, me estoy poniendo al día con él) voy a proponeros una nueva familia de algoritmos. Los llamo cifrados fractales en honor a una película de Star Trek (TNG), donde se los nombraba y que me hizo pensar en cómo podrían ser.

Una primera aproximación sería un algoritmo recursivo, donde un cifrado llevara al siguiente y lo contuviera. Algo del estilo N!=N*(N-1)!. Otras aproximaciones podrian partir el texto en trozos, cada uno de los cuales se codificaría en segmentos menores que volverían a partirse.

La gracia, como ya vi con Llamame36 rotante, es que al hacer evolucionar la clave dependiendo del texto en claro, se está usando una información de la que carece el atacante y se aumenta mucho la robustez del sistema...

Una implementación de la primera idea es la siguiente:

Dividimos el texto en claro en longitudes de clave LC. Sea A el conjunto de esas divisiones y Ai el elemento i-ésimo de ese conjunto.

Sea K0 la clave inicial de encriptación. K1 será la conversión de K0 en una clave de longitud del alfabeto (eliminamos caracteres duplicados y rellenamos con los ausentes del alfabeto)

Definimos "Bi=Ai[+]Ki" como el resultado de cifrar -por sustitución- el segmento Ai con la clave -alfabeto- Ki. Por tanto "Ai=Bi[-]Ki" Será la operación inversa.

Definimos también "Ki+1=Bi[*]Ki" Como la operación de cifrar Bi con Ki y generar una nueva clave a partir del resultado (equivalente a lo que hemos hecho con K0)

Tenemos pues:

B1=A1[+]K1; K2=B1[*]K1;
B2=A2[+]K2; K3=B2[*]K2;

y en general

Bi=Ai[+]Ki=Ai[+](Bi-1[*]Ki-1)=Ai[+]((Ai-1[+]Ki-1)[*]Ki-1)

La decodificación será el proceso inverso, pero seguiremos generando las claves Ki del mismo modo. Tendremos pues

Ai=Bi[-]Ki=Bi[-](Bi-1[*]Ki-1)

En esta notación parece más complejo de lo que en realidad es, pero quería reflejar el carácter recursivo del algoritmo. La implementación que he hecho, sin embargo, es bastante lineal (estoy haciendo una más elegante que publicaré para que podáis jugar).

Y como la vida sin retos no es nada, aquí os dejo un texto cifrado con FRACTAL1, a ver qué sois capaces de hacer él. El alfabeto base es el castellano en mayúsculas, el espacio y los números.

El corte a 40 es a efectos de facilitar la visualización. Nada relacionado con la longitud de clave. Quizás me ha quedado algo corto; si necesitáis más lo añado.

  1. OCI8LVLUFID9EILUJL1LUVEULI9LJU61OUDCJKVO
  2. OFU61U6FAUALAFUWCAKGWF6WPLJLQLWXGAF6WF6W
  3. GOQGW6AY3GYGCÑ3MCGYD3M3SPCYJMIA3MYÑ3MBJF
  4. HZQFWZKQEMPWZEFZÑEDQFSHZPNJSIÑDZWZNÑZDTU
  5. BQBZPÑBZNÑDJSNZMROFCBCÑZCBZCHZAGLGZJSCLQ
  6. ÑNZW_TANQYNYHAO_ISA_LBPSNRLYN_LBCZÑCUZMN
  7. KKUXUZNCZNHZHUMNKUHZBYLRDFMÑQZKMDEFMZPFM
  8. EDGIZFBZQMNWDJRC_ÑC_RDW_HWKCNYW_WBGSCÑWA
  9. DZNPZQBOLHEZONJHLPEZEOJDZGQNMODZODKBYGÑZ
  10. _QGAFGÑZMBLQBÑB_JKY_GI_WÑG_KYNMPYNKYWNYF
  11. BPTNYTHNMEÑEÑ_YLBVHJLSNEÑ_VLB_JPZ_LYÑFYD
  12. NOFZMSFYDZYÑFYMJSGDZDFYQNPVYKOBALZYKVYV_
  13. _NFCYZCYKVMY_WLPCBKCMZTWZEWGBZCEECZWBZWE
  14. ZMN_BGZTNNZPOLQDÑIZIBZLINDQPGZPVYDFÑHAOH
  15. YSBBYDFYFVSDAQDMOVYVNYPCNFBYCMPSBYCBYCM_
  16. CBSYCNY_FH_GZHQHKZFBA_BEGHBZOQZMYCBZ_KIM
  17. _LMUBLNY_ÑP_XPNIM_XEIM_IBIEDYUPLÑGNFCDGY
  18. ODYHGQPDYHOINBLYTALNCXFCFYFTJFCFYATZQFYQ
  19. FLZAMZOMTPCOLGMZWZNGCÑMZKÑMZAPXOLOO_LQI_
  20. AFÑJFUIU_HY_OIMSRNQÑGMIZLRXZHFGIBXXUZLUG
  21. ZYDFBXRGZVZLFKZGWJCKZCLZDFASCZCAZÑAZTIWA
  22. ZHSEEB_ZUPGUYZTPZEYZENMVGPZCGPGDVDZÑVAYZ
  23. _YPAJLFFAYTY_AGYVZMNGZLCFJNMWCZNFHBGHBOC
  24. ZTFIDCZQ_OGSKSJMBXE_M_TOFIECXÑBE_DKO_VSZ
  25. VLZRVSFCXZGVZL_ZVDRVS_ZVDFK_ÑCUHPKELI_QE
  26. K_PÑISK_EQEI_K__QÑRIOUADIZBSXZFGBKGDSUGB
  27. QDRQXAFAXEZNHMXYKSPZDXAFXKNXANEZNMEYWRÑV
  28. YGOLMRAEYAVLAVYLOYHKTCUECEA_Y_KL_CJAQEPE
  29. ALA_HOK_KMNJ_ZNOFNDZUOFNDZFDZ_TBLNOZFBFR
  30. RB_MNINE_AHÑFHJDBH_SDMFHF_BRBGXMXZBLQGKA
  31. POGXÑBDRPAXZBLQGKAMLC_MLFEMLDLWCOZ_ÑZOHZ
  32. PQCOC_AAN_A_VNONGVKNKLWCFGVAVPALCGMVKOG_
  33. VOVYQVYGAC_VAIIAP_NGLÑEIPVDFYFV_YNRYAZBR
  34. YODYKMZDYNVCRDUXCVSVKYUXNPVYBDPNXUPIYBNY
  35. VJCKZUNÑMJDZBLJEÑADKZINGADALKZÑZÑWZÑMNOW
  36. ZJCZWFICJKWIDSZUZWÑZNFKKSK_GS_ÑPÑ_QKEGFM
  37. SÑ_VFJF_B_ÑODNKEZXVIDRDÑSEAXMZIDMNDZXRZ_
  38. BJLPMMFZMMTYBIFQZ4ZBVZATMZ_BJKLHHAYMLUGI
  39. AÑYEZUZMYCIGJKAYGIZYFUIJFXGGCYHUGGUFCSYQ
  40. YSUWUYCWKGCAZJCGTCJZJHAZTPTXZJKZ4HQ4XHCA
  41. W3CJW4AYQAKXJWOX3WIQJK43CEXLQAIQIXQCXFNQ
  42. ALQXLQAIQICEXKRHÑZCHZGJZPMTHEEJZKMNCAHYZ
  43. MGÑYL_IYH_CJKGYJ_IYLÑYHHA_IAGDJKAGNZIXZX
  44. IÑORKYZ_KZKNXZÑGMMKZEDXYGL_CY_QYZZH_YBNH
  45. BPYL_ZHL_JIZYIRDIUKVSDILUKLYHDIVFDCHUK_P
  46. BRBG_CWFW_WGWPIWF_IBFFHBSHGZJS_QÑIZLSNDI
  47. DMPZPIDZKIJIPZT_PLQ_HYKRY_GYO_MSDQIQLO_P
  48. LOYZ_ADYRQALPHJYJRADPQHJYECHFQAYJRFCQRNJ
  49. ZFPZJLRFPQJZLRFZHRNJZKGJIRC_HCJNRJO_CE_U
  50. GNGIRC_CD_BWZWÑNN_IMÑZVZÑZOTÑZI_TÑNZLCIE
  51. ÑIXIFDYJFKYAZILZIFKYQXJJZKLZIFÑ_Y_TV_OBA
  52. _NPWÑB_BOWEBLGE_KPVZDCKZQVZLÑQVCZKCOFKCN
  53. ZYCKYQVQL_U_YXOXWWJKEL_AÑKAÑWWEL_RJ_XFIC
  54. _WÑNCAZVZLTSOAZDCLZÑICANÑCCQJ_EHOY_KQILY
  55. CE_ME_WYJKFIYE__QZ_CBÑZÑL_CBXÑZHIDCBQJZP
  56. NBÑ_ZWPHWYFMWJÑVBFBHMWSWIKVEZWPHWMBLZDB_
  57. NBKCU