Esteganografía en textos en cuatro líneas (incluye reto)

Imagen de tokamak
Enviado por tokamak en

Foros: 

Por tokamak

Voy a mostraros un pequeño programa para ocultar mensajes en textos que nada tengan que ver con el mensaje real a transmitir. Está basado en las congruencias que ya hemos utilizado en algunos retos para generar secuencias numéricas pseudoaleatorias.

La cosa está en generar, a partir de una cierta semilla, una serie de cifras que indicarán las sucesivas posiciones del texto público donde estarán ubicados los caracteres del mensaje secreto a transmitir.

El programa tomará la clave inicial y el texto a cifrar y generará una plantilla compuesta por un carácter de relleno, sobre los que podremos escribir lo que queramos, en tanto que en las posiciones generadas por la función pseudoaleatoria, colocará los caracteres del texto a enviar. Obviamente al escribir el texto de pega deberemos ingeniárnoslas para ir respetando los caracteres del cifrado, integrándolos en nuestro texto.

La función propuesta sólo genera números en el rango 0-999, y la he dejado así, para no generar mensajes muy largos, pues es fatigoso, según he comprobado, rellenar mucho más texto. La sudodicha función es: f = (43 * x + 117) Mod 1000

El texto a cifrar ha de ser de una longitud del 10% del ciclo máximo del generador aleatorio, para que sea fácil insertar texto entre el cifrado, y además, para facilitar esta interpolación, el programa realiza una segunda operación: una vez generada la plantilla, inserta otro carácter de relleno después de cada carácter metido en la plantilla, para prevenir la vecindad inmediata entre caracteres del cifrado.

Todo esto genera una distancia media entre los caracteres del cifrado en la plantilla de unas 19 posiciones, lo que permite sobreescribir el nuevo texto, manteniendo una aceptable gramaticalidad.

Es obvio que esto no nos proporciona, por si mismo, la más mínima seguridad, pues basta con probar todas las semillas posibles, muy pocas, para dar con el mensaje secreto. Sin embargo este criptosistema está pensado para ser utilizado siempre junto a otro método de cifrado, por ejemplo una trasposición, o, incluso, una implementación alfabética de AES. Entonces, primero se cifraría el mensaje a transmitir, y luego se ocultaría el cifrado en el texto, mediante el método descrito. Empleado de esta forma, sería posible enviar mensajes cifrados por canales que no admitan el envío explícito de mensajes en cifra.

Os doy un ejemplo de este método, aplicado sin cifrar el mensaje, utilizado en la cárcel por Leandro, un delincuente de poca monta.

 

El mensaje secreto:

MANDAME_UNA_LIMA_DENTRO_DE_UN_BOCADILLO_DE_JAMON_Y_EL_JAMON_QUE_SEA_DEL_BUENO,_NO_COMO
_LA_OTRA_VEZ.

 

La plantilla generada, utilizando 66 de semilla:

xxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxExxxxxxxxxxxxxxxxxxxVxNxxxxxxxxxxxxxxxxxxxB
xxxxxxxxxxxxxxxxxxxxxYxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxExDxxxxxxxxxxxxxxxxxxxUxxxxxxxxxxxxxxxxx
xxxx_xxxxxxxxxxxxxxxxxxxxxUxxxxxxxxxxxxxxxxxxxZxAxxxxxxxxxxxxxxxxxxxExxxxxxxxxxxxxxxxxxxxxExxxxxxxxxxxx
xxxxxxxxxNxxxxxxxxxxxxxxxxxxx.xMxxxxxxxxxxxxxxxxxxxNxxxxxxxxxxxxxxxxxxxxxLxxxxxxxxxxxxxxxxxxxxx_xxxxxxxx
xxxxxxxxxxxxxExxxxxxxxxxxxxxxxxxxOxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxBxxxxxxxxxxxxxxxxxxxxx_xxx
xxxxxxxxxxxxxxxx,xxxxxxxxxxxxxxxxxxxxxJxxxxxxxxxxxxxxxxxxxxxOxxxxxxxxxxxxxxxxxxxxxUxxxxxxxxxxxxxxxxxxx_x
xxxxxxxxxxxxxxxxxxxxAxxxxxxxxxxxxxxxxxxxxxCxxxxxxxxxxxxxxxxxxxxxNxxxxxxxxxxxxxxxxxxxNxxxxxxxxxxxxxxxxxx
xxxMxxxxxxxxxxxxxxxxxxxxxAxxxxxxxxxxxxxxxxxxxxxAxxxxxxxxxxxxxxxxxxxOxxxxxxxxxxxxxxxxxxxxxOxxxxxxxxxxxx
xxxxxxxxxDxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxNxxxxxxxxxxxxxxxxxxxxxIxxxxxxxx
xxxxxxxxxxxxxLxxxxxxxxxxxxxxxxxxxCxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxLxxxxxxxxxxxxxxxxxxxxxIxxxxx
xxxxxxxxxxxxxxOxxxxxxxxxxxxxxxxxxxxxQxxxxxxxxxxxxxxxxxxxxxLxxxxxxxxxxxxxxxxxxxxxMxxxxxxxxxxxxxxxxxxxMx
xxxxxxxxxxxxxxxxxxxxUxxxxxxxxxxxxxxxxxxxxxOxxxxxxxxxxxxxxxxxxxxxAxxxxxxxxxxxxxxxxxxxOxxxxxxxxxxxxxxxxxx
xxxExxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxx
xxxxxxxDxxxxxxxxxxxxxxxxxxxxxDxxxxxxxxxxxxxxxxxxxLxxxxxxxxxxxxxxxxxxxxxSxxxxxxxxxxxxxxxxxxxxxExxxxxxxxx
xxxxxxxxxxxxExxxxxxxxxxxxxxxxxxxAxxxxxxxxxxxxxxxxxxxxxExxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxNxxxx
xxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxAxxxxxxxxxxxxxxxxxxxxxJxxxxxxxxxxxxxxxxxxxxxTxxxxxxxxxxxxxxxxxxxOxx
xxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxxxAxxxxxxxxxxxxxxxxxxxxxRxxxxxxxxxxxxxxxxxxxTxxxxxxxxxxxxxxxxxxxx
xDxxxxxxxxxxxxxxxxxxxxxMxxxxxxxxxxxxxxxxxxxxxOxxxxxxxxxxxxxxxxxxxRxxxxxxxxxxxxxxxxxxxxxExxxxxxxxxxxxxx
xxxxxxxOxxxxxxxxxxxxxxxxxxxxx_xxxxxxxxxxxxxxxxxxxAxMxxxxxxxxxxxxxxxxxxxLxxxxxxxxxxxxxxxxxxxxxNxxxxxxxxx
xxxxxxxxxxxxDxxxxxxxxxxxxxxxxxxx_xAxxxxx

 

La carta escrita por Leandro:

QUERIDA_EDUVIGIS_EN_LA_CARCEL_NO_ESTOY_MAL_POR_TAN_RESISTENTE_APOYO._MANDAD_LA_AVENA_A_ES
OS_PRIMOS_DE_BARCELONA._LOS_PRESOS_Y_YO_NOS_ATERRORIZAMOS_,SI_EN_LAS_DUCHAS_SE_DA_LA_PER
EGRINA_CIRCUNSTANCIA_DE_QUE_TIREN_UNA_PASTILLA_DE_JABONUCO,_ASI_ABUSA_LA_HEZ_A_PASTO_Y_RESU
LTA_QUE_COMIENDO_MOLESTAMOS_EN_LA_ZONA_DE_LOS_MATONES_Y_PIERDO_DIENTES._MOLESTA_UN_POCO_
SI_ANTERIORMENTE_SE_CAYO_ALGUNA_PIEZA_EN_SIMILAR_CIRCUNSTANCIA._YA_NO_ES_TAN_ASI_SI_AL_CABO_D
EL_DIA_NOS_EVADIMOS_CON_EL_PEGAMENTO_QUE_BUENAMENTE_NOS_APORTAN_ALGUNOS._TRAE_QUESO,_A
NCHOAS,_SI_PUEDES,_JAMON,_PUES_HAMBRE_ALGO_SE_PASA._POR_FAVOR:_UTILIZA_MI_FURGONETA__NECESI
TA_MUCHO_CAMINAR_TAMBIEN_LIMPIA_LAS_COSAS_DE_TRABAJAR,_ES_NECESARIO_PARA_SU_CONSERVACION._
ME_DICES_AMIGOS_QUE_PUEDAN_ACERCARSE_AQUI_PUES_ME_GUSTA_HABLAR_DURANTE_ESTOS_DIAS_LARG
OS_QUE_POCO_VALEN._CUANDO_TU_PUEDAS,_LLAMA_A_PANCRACIO_QUE_SE_INTERESO_POR_MI_PERSONA_C
UANDO_ME_NOTIFICARON_ESTA_PENA_INCLUSO_SE_OFRECIO_A_LLEVARME_TABACO._POR_CAUSAS_INCONFES
ABLES_Y_DOLOROSAS_ME_VEO_EN_ALGUNA_NECESIDAD_ECONOMICA._RUEGO_UN_PEQUEÑO_APORTE_MONET
ARIO_DE_QUIEN_TU_SABES._PERO_AL_LADRON_DE_PACO_DALE_MAS_LARGAS_Y_QUE_NO_MOLESTE_MAS_EL_
MUY_CAPULLO._NO_DESCUIDO_MI_LOCURA,_CON_ABUNDANTES_APORTES_ANTIPSICOTICOS_DE_QUE_ME_SURT
E_LA_ENFERMERIA,_SIN_TASA_Y_SIN_COSTE_ALGUNO,_QUE_GOZADA._CUANDO_TODO_VUELVA_A_SU_SER,_TOM
A_TODO_EL_PARNE_QUE_PUEDAS_Y_COMPRA_ACCIONES_DE_BANKIA._EN_EL_TRULLO_DICEN_QUE_SUBIRAN_SI,
_CUANDO_MUCHOS_ELEMEMENTOS_SALGAN,_Y_OCUPEN_SUS_ANTIGUAS_OCUPACIONES._LA_REPRESION_ES_P
OCO_VISIBLE,_PUEDE_HACERSE_UN_POCO_EL_TONTO_QUE_NO_PASA_NADA_A_MENOS_QUE_TE_METAS_A_NAR
COTRAFICANTE._ES_JUICIOSO_TU_PRIMO_AL_ATENDER_AL_CURA._UN_MONAGILLO_SIEMPRE_TIENE_TRABAJO_FE
_Y_CONFIANZA_Y_SABEMOS_QUE_CONCURREN_EN_AMBOS._PUEDE_TOMAR_UN_TIEMPO_SALIR_DE_AQUI_PERO
_POR_FIN_AMAESTRARE_ESE_CABALLO_OLVIDADO_EN_LAS_CUADRAS_DE_TU_PUEBLO._YA_TENGO_GANAS_DE_
OLVIDAR_OBTUSAMENTE_LOS_RUEGOS__DE_LOS_GUARDIANES_A_MEJORAR_MI_PERSONA_ALGO._ME_DESPIDO
_AHORA_NO_RECES_PUES,_SABES,_DIOS,_A_MI,_NI_FU_NI_FA

 

Y ahora las dos funciones VB para Excel y Open Office

Sub extraer_de_plantilla(clave, plantilla, cifrado)
 
cifrado = ""
plantilla0 = plantilla
plantilla = ""
For i = 1 To Len(plantilla0) Step 2
 plantilla = plantilla & Mid$(plantilla0, i, 1)
Next i
 
x = clave
For i = 1 To 100
    f = (43 * x + 117) Mod 1000
    x = x + 1
    x = x Mod 1000
    cifrado = cifrado & Mid$(plantilla, f + 1, 1)
Next i
 
End Sub
Sub crear_plantilla(clave, cifrado, plantilla)
 
plantilla0 = String(1001, "x")
 
x = clave
For i = 1 To Len(cifrado)
 
    f = (43 * x + 117) Mod 1000
    x = x + 1
    x = x Mod 1000
 
   Mid$(plantilla0, f + 1, 1) = Mid$(cifrado, i, 1)
 
   rr = Mid$(cifrado, i, 1)
Next i
 
For i = 1 To Len(plantilla0)
 plantilla = plantilla & Mid$(plantilla0, i, 1) & "x"
Next i
 
End Sub

 

EL RETO

Es un mensaje apócrifo enviado por un comunista español infiltrado en la Wehrmacht como voluntario español filonazi, al objeto de sacar información para el tío Stalin. Se llama Manolo y como se le da bien el cálculo, obtuvo en menos de una hora 100 valores para la función f = (43 * x + 117) Mod 1000, a partir de un cierto valor de x. Aparte de eso, cifró un mensaje de menos de 100 caracteres con el sistema Playfair, con la tabla de 5 x 5 y una clave adecuada. Luego procedió a colocar ese mensaje cifrado en las posiciones obtenidas por la función, en una cuadrícula de papel.

Ya, finalmente, se inventó una carta a la familia, que interpoló entre el mensaje cifrado. La carta dice así:

QUERIDA_FAMILIA_EL_ENVIO_NO_TENIA_DOS_KILOS,_SEGURO_QUE_NOS_LO_ROBARON._PROCURA_HOY_HACER
_LOS_RESTANTES._INTENTA_QUE_PRONTO_CAUSE_BAJA_EN_LA_GRANJA_TU_HERMANO,_PUES_MANEJA_MAL_L
AS_COSAS,_ARADOS_Y_TODO_YA_SABES_QUE_ES_UN_POCO_TORPE_OBLIGADO_TRABAJA_MAL_ZANGANEA_MU
CHO,_ES_UN_ZAPATERO_BUENO_Y_DEBE_HACER_ESO._CUANDO_SEA_QUE_ME_ESCRIBA_MANOLI_QUE_HACE_M
UCHO_QUE_LLEVA_SIN_ESCRIBIRME._LOS_VIEJOS_ESPERO_QUE_ANDEN_BIEN,_SON_MUY_AMABLES_HACIENDO
_TANTO_EN_CASA,_DADA_SU_EDAD_BASTANTE_AVANZADA._NO_PIDAS_QUE_TE_CUENTE_QUE_VIDA_LLEVO._EST
O_NO_SE_PUEDE_CONTAR,_AL_QUEDAR_BAJO_SECRETO_MILITAR._MEJOR_ME_DICES_MAS_DE_MI_QUERIDA_BO
NIFACIA._RECUERDO_QUE_ZAMPABA_SUS_EMPANADAS_Y_BOLLOS_DE_CHORIZO_ZAMORANO._AUNQUE_AQUI_S
E_COME_BIEN_NO_PUEDO_FELICITAR_AL_COCINERO_SIN_COMPARACION_POSIBLE._CUENTAME_DE_LOS_VECINO
S_DEL_PUEBLO,_DE_WENCESLAO,_BUEN_AMIGO_A_QUIEN_LE_DESEO_SUERTE_EN_SUS_ESTUDIOS_EMPEZADO
S_CON_ILUSION._AQUI_HACE_CALOR_Y_BUEN_TIEMPO,_NOS_ABURRIMOS,_NO_TENEIS_QUE_PREOCUPAROS_PO
R_MI,_ES_UNA_HOSPITALARIA_GENTE,_LAS_DE_POR_AQUI_NOS_TRATAN_COMO_AMIGOS,_CONVERSAMOS_CON_
ELLOS_Y_ALOJAN,_GUSTOSOS_EN_SUS_CASAS_A_NUESTROS_MAS_ILUSTRES_JEFES._PARA_FIRMAR_TU_HIPOT
ECA_LO_TENEMOS_QUE_HACER,_SI_PUEDES_CON_EL_NOTARIO_DE_VILLACONEJOS,_SI_ALCANZA_LA_SOLDADA.
_Y_UNE_MIS_AHORROS_Y_LOS_HABERES_DE_TU_PADRE,_ESO_ALGO_QUE_DEBEMOS_SOLICITAR._SI_HUBIERA_ZAPATOS:
_ENVIASELOS_A_WENCESLAO_QUE_LE_HARAN_MUCHA_FALTA._PARA_AQUEL_PRIMO_TUYO_ESTOY_F
ABRICANDOLE_YA_LA_ARMONICA,_SABES_QUE_TENGO_BUENAS_MANOS_Y_MEJOR_OIDO._OS_DESEO_UNA_COS
ECHA_ABUNDANTE,_EN_AQUELLA_TIERRA_DEL_RIO,_TAN_FERTIL_QUE_YO_ATRAVESE_CON_EL_ARADO._IGNORO_
CUANTO_TIEMPO_SEGUIRE_AQUI,_PERO_SEGURO_QUE_BASTANTE._NO_HAY_QUE_HACER_CABALAS_DE_NUEST
RO_DESTINO._APLICO_LA_FILOSOFIA_DE_LIDIAR_LO_QUE_VENGA_ANTES_DE_PENSARLO._EL_AYER_FUE_BONITO
_Y_NOS_DA_LOS_RECUERDOS._LA_AMBICION_DE_TORRENTE_NUNCA_SE_VE_SATISFECHA_LO_QUE_ME_CUENTA
S_ME_AFIRMA_EN_MI_OPINION_DEL_INDIVIDUO._ME_VOY_INTENTANDO_NO_LLORAR,_QUE_ME_EMOCIONO._ASI_A
DIOS,_NO_OS_AFLIJAIS_ARROJO_ANTE_LA_VIDA,_MANOLO.

 

¿Qué mensaje envió a Stalin el astuto Manolo, tras saltarse a la torera la censura militar?

 

Otros intentos

La idea de ocultar un texto plano en otro más o menos legible no es nueva, aunque sin duda tu método parece más prometedor.

Aquí pongo una página donde se cifra un texto y luego se convierte en otro bastante absurdo, usando un sistema basado en diccionarios:

http://www.fourmilab.ch/javascrypt/javascrypt.html

(se escribe el texto plano)
Esto es una prueba para cifrar texto sobre texto legible

(Se cifra de alguna manera)
##### Encrypted: decrypt with http://www.fourmilab.ch/javascrypt/
ZZZZZ JURVN OVAXM VAPEL SOFKH UILCQ EGUDL UGPXS HMKQV JIJQB CNMCK
RSXAF ETMKC MTDHB BBNXG DWOHA OTVWN HUFSR DOFXQ GTDFX RAITH CSBVB
XOEDG NMUPO TQMXA DNWDO JNOGX NRRGI CGGXA UKNJW JIIRW OTVOP LTCMQ
BRSQP KHAFS DGNMK JFQSQ GPKDC TDAEC IFZZZ YYYYY
##### End encrypted message

ww.fourmilab.ch/javascrypt/stego.html

(Se convierte en el texto bizarro)
Skulkers spondees galago sphinges diol. Ballista dunted prop routeway
special anomies leewards aquarian. Infracts plyingly gazebo hawkmoth
logoi. Benefit hardy, rerun, bumped kerfs marabou hae caprine.
Outpray, machine lucks, plater bannerol papillar istle. Auld grunting
outbrave aleuron! Orifice pericarp gainable derider loathers. Eposes
murmurs excreta byworks sodaless.

Quintile.

Por si te sirve de algo.

Creo recordar haber visto en otra ocasión un método parecido, pero no consigo recordar dónde.

Esta muy bien el método

Esta muy bien el método, me ha gustado mucho porque no solo tienes que aplicar un algoritmo y ya esta hecho, sino que también tienes que pensar una manera de encajarlo en un texto. Sin duda conseguir que de manera automática un ordenador consiga un texto más o menos inteligente es un reto, pero con Google y su "Quería decir esto" puede que estemos más cerca de lo que creamos a unas máquinas capaces de reconocer y generar texto por si mismas.

Y tan cerca...

...como que ya se está haciendo.

http://sinapsis-aom.blogspot.com.es/2011/11/el-periodista-electronico-noticias.html

Y tiene un par de años la noticia.

Intoxicación

Seguro que hay alguna forma de sacar partido de la vigilancia de los Vigilantes El chiste que sigue ¿sería un ejemplo de esteganografía inversa de textos, o de intoxicación?

Un viejo árabe vivía en Idaho, EEUU, desde hacía 40 años.
Quería plantar patatas en su terreno, pero arar la tierra era un trabajo muy pesado.
Su único hijo, Alí, estaba estudiando en Francia.

El hombre viejo le manda un e-mail a su hijo explicándole el problema:

- Querido Alí, me siento mal porque no voy a poder, este año, plantar patatas en el terreno.
Estoy muy viejo para arar las parcelas.
Si tu estuvieras aquí, todos mis problemas desaparecerían. Sé que tu removerías la tierra para mí.
Te quiere, Papá.

Poco después, recibe un e-mail de su hijo:

- Querido papá, por todo lo que más quieras, no reuevas la tierra de esas parcelas, ahí es donde tengo escondido "aquello". Te quiere, Alí.

A las 4:00 AM de la mañana siguiente, aparecen la Policía local, agentes del FBI, de la CIA, de la DEA, de otras catorce Agencias y representantes del Pentágono, que remueven todo el terreno buscando materiales para construir bombas, ántrax o lo que sea.
No encuentran nada y se van.

Ese mismo día, el hombre recibe otro e-mail de su hijo:

- Querido papá: seguramente ya podrás plantar las patatas.
Es lo mejor que pude hacer por vos desde aquí, dadas las circunstancias.
Te quiere, Alí.

Sacado de:
http://www.forodeseguridad.com/artic/humor/hum_1047.htm

(a ver si cuela)

Yo almaceno toda la información peligrosa y perjudicial para la libertad y la democracia con un tinte especial en la ropa arrugada de mi casa y que sólo sale a la luz si se plancha (las mangas sin rayas, por favor).

Bueno

Quizá en la vida real el anciano padre hubiera padecido algún "severo" interrogatorio antes de acabar en Guantánamo, y el hijo recibiría también alguna visita desagradable de miembros de esas agencias o de otras "colaboradoras", de modo que no es imposible que ambos acabaran comiéndose las patatas por la raíz. Bueno, la patata ES una raíz, ya sabéis a qué me refiero.

Pero no cabe duda de que sería posible inducir a los Servicios a hacer movimientos en direcciones equivocadas. Lo que no sé es por qué he puesto estos comentarios en este hilo en vez de en el de Prism. Estas pastillas...

Caso real

Hola, estoy leyendo vuestros comentarios y quería nombrar un libro que se llama The Secrets of Rue St. Roch de Janet Morgan en que se explica el funcionamiento durante la Primera Guerra Mundial de una red de civiles en Luxemburgo que observa los trenes para informar alos servicios secretos ingleses.

El libro es muy entretenido y está muy bien documentado. La autora y su marido son los hijos de los agentes ingleses que recibían la información en Paris. Al acabar la guerra, el oficial al mando no destruyó los documentos como le habían dicho y se los llevó a casa. Cuando murió los hijos los descubrieron.

Pero el motivo por el que traía esto a colación es que uno de los sistemas con el que los miembros de la red se comunican con sus controladores en Paris es mediante esteganografía. Tienen un sistema muy sofisticado que permite enviar la composición de los trenes y su carga, dentro de una carta típica de las de "Estimado primo, espero que estés bien, bla, bla.." No recuerdo como era exactamente pero creo que la primera letra de cada línea indica el código que se usará en esa línea y luego las iniciales de las palabras son lo que oculta la información. A ver si me acuerdo de mirarlo y lo cuelgo mañana.

Una observación

Aunque este reto se ha dejado un poco apartado, le he echado un vistazo. Creo haber localizado el lugar donde más o menos se ubica el mensaje oculto, aunque de momento no sé cómo descifrarlo. Explico aquí lo que he obtenido, para ver si a alguien se le ocurre cómo descifrarlo.

A rasgos generales, un sistema esteganográfico como éste puede delatarse. Si el mensaje oculto no estuviera cifrado, entonces se delataría con mucha facilidad. En el caso de utilizar un sistema de sustitución, nos encontramos con un problema, y es que los métodos de sustitución alteran la frecuencia de aparición de las letras, de forma que las letras más frecuentes en un texto normal tienen una frecuencia menor en el criptograma, y viceversa, las letras de menor frecuencia en un texto normal tienen una frecuencia mayor en el criptograma. Por otro lado, estamos ocultando el criptograma en un texto normal. Precisamente el aumento de la frecuencia de las letras de poca frecuencia es lo que puede delatar que hay un mensaje oculto en este tipo de cifrados, ya que hay que incluirlas, y esto aumentará también la frecuencia de aparición de estas letras en el texto principal. Esto puede hacer que se note en el texto principal que se ha forzado la aparición de estas letras. Un método de transposición reduce este problema, ya que conserva las letras, y salvo que sean mensajes raros, o técnicos, la frecuencia de las letras será normal. Creo que para este tipo de esteganografía sería más adecuado un cifrario de transposición, siempre que sea seguro, claro.

Según indicó Agustín en http://www.kriptopolis.org/frecuencia-letras-castellano, las letras de menos frecuencia son la "W" (0.001%), la "K" (0.003%), la "X" (0.071%), la "Z" (0.320%) y la "J" (0.371%). En el reto, que utiliza un método de sustitución, tenemos un texto de 2001 caracteres. El número de veces que aparecen las letras antes indicadas es: W=2 veces, K=1 vez, X=0 veces, Z=9 veces, J=13 veces. Si obtenemos los porcentajes: W=2*100/2001~0.10%, K=1*100/2001~0.05%, X=0*100/2001=0.00%, Z=9*100/2001~0.45%, J=13*100/2001~0.65%. Observamos un aumento de la frecuencia de estas letras, aunque con la pequeña longitud de este texto no quedaría del todo claro que hubiera nada escondido si no lo supiéramos.

Por otro lado, el texto principal se puede ver forzado para albergar el texto oculto, quitándole naturalidad, de forma que esta forma de expresión poco natural levantaría sospechas. El problema es que es difícil obtener un texto natural en el primer intento, y varios intentos pondrían en peligro el ocultamiento si el enemigo accede a esos intentos.

En particular, la letra "W" es un problema para este sistema, y la "K" también presenta alguna dificultad. En el texto de ejemplo, la letra "W" aparece en el nombre "Wenceslao", un nombre poco habitual, y que se puede comprobar fácilmente si existe una persona con ese nombre en el círculo del sospechoso. La presencia de esta letra, con una cierta sospecha de que se está ocultando un mensaje, aumentaría la certeza de que se oculta un mensaje.

Veamos ahora las debilidades que presenta este sistema, una vez que lo conocemos. Si no lo conociéramos, lo tendríamos difícil, primero para determinar que contiene un mensaje oculto, y luego para descifrarlo.

Sabemos que las letras donde se oculta el mensaje son las pares, si comenzamos a contar por 0. Esto es, tomaremos solamente las letras en las posiciones 0, 2, 4, .... Nos queda lo siguiente:

QEIAFMLAE_NI_OTNADSKLS_EUOQENSL_OAO.POUAHYHCRLSRSATS_NET_U_RNOCUEBJ_NL_RNAT_EMN,PE_AEAMLLSCSS_RDSYTD_ASBSQEE_NPC_OP_BIAOTAAAMLZNAE_UH,E_NZPTR_UN__EEHCREO_UNOSAQEM_SRB_AOIQEHC_UH_U_LV_I_SRBRE_O_IJSEPR_U_NE_IN_O_U_MBE_AINOTNOE_AA_AAS_DDBSAT_VNAA_OPDSQET_UNEQEVD_LV.ET_OS_UD_OTR_LQEA_AOSCEOMLTR_EO_EDCSMSD_IQEIABNFCA_EUROQEZMAASSEPNDSYBLO_ECOIOZMRN.ANU_QIS_OEBE_OPEOFLCTRA_OIEOSNCMAAINPSBE_UNAED_O_EIO_E_UBO_EWNELO_UNAIOAQINL_EE_UREE_U_SUISEPZDSCNIUIN_QIHC_AO__UNTEP,NSAURMS_OTNI_U_ROUAO_O_I_SUAHSIAAI_ET,LSD_O_QINSTAA_OOAIO,CNESMSCNELSYAOA,GSOO_NSSCSSANETO_A_LSRSJFS_AAFRA_UHPTC_OTNMSQEHCR_IPEE_O_LNTROD_ILCNJS_IACNAL_ODD.YUEMSAORSYLSHBRSD_UPDE_S_LOQEDBMSSLCTR_IHBEAZPTS_NISLSAWNELOQEL_AA_UH_AT.PR_QE_RM_UOETYFBIADL_AL_ROIA_AE_U_EG_UNSMNSYMJROD.O_EE_N_OEH_BNAT,E_QEL_IRADLRO_A_ETLQEY_TAEECNE_RD.INR_UNOTEP_EUR_QI_EOSGR_U_ATNE_OHYQEHCRCBLSD_USR_ETN.ALC_AFLSFAD_IIRL_U_EG_NE_EPNAL.E_YRFEBNT__O_ALSRCEDS_AABCO_ETRET_UC_EV_AIFCAL_U_ECETSM_FRAE_IOIINDLIDVDO_EVYITNAD_OLOA,QEM_MCOO_S_DO,N_SALJI_ROOAT_AVD,MNL.

También sabemos que el orden en que se escriben las letras del mensaje oculto viene dado por la expresión 43*i+117(mod 1000). Por lo que reordenamos las letras según esta expresión, quedándonos:

IEEDTBNQEDSEBNIEUCLROLUEC_SEMLNISANEPBEN_R_E__DPV_SF_IZASRCLEOAYECTNYENQBEMMEE_ALDS___RIBLRLABQNPLYSATSCPHWOQELAFDKCQHOBQZFWQHOTUZFOIDYLQESRZLEONSEPUEFASQRTHNUIMHAZIMQSZBRSA_O_AGOG_AD_SN_A_OMSOONLSISAR__A___SOSE_DLEOE_AAOYAY_.S_A,AT_N_O_BI_EONAIS_J_O__Y,A_LO_ECOSUMTAREAERSDANINRPSU_ODEIU,S_LS_EP.OMSDNBEED_QE_NUY_.ETNDLECALAS_UNTAQOSRCA_MRMY_GTVDUEMAUNDIP_RS_TD__LOA_IJE_OO_AENIA_TNRYLL,EN_S_ARS_R_ROPOISSCDBE_RB.FOMSSE_TEI__I_,_SBPYEEEEEVOPA__UEONEUNONPLUDEFSILQL_NRACPON_E_CSSATTT_TON_A_BSTROBU_LTDHOE_CLILFRC,HO.EUDUUOSJD.SQN_R_AP,ABO__CIEAITLUE_A_SDOAONCUPNSE_UO_OHRI_AOETEOTU_NRAOU_UIIEPOIUEERAAOASSHUNVQNES_IFNETNLTUTO_.NAR_TOEA_SQE__QERILEISU_P_EVOSA_AIOEONLNN_NCCO_DUSA_EE_N_NH____NCN__ILLU_ILIAA_IAJCQAMTA_EDTOMTSNEE_ALN_NODOAIQFC__EJNOS_ASRO_ASQA_DBURBEM_TT___D_BECOCULRMOCHPVDERL_CA__.NUNOSLO_SE_L_VAAEO_IQ_OMN,OA_SL___AREN_B_EJT_ATLCAGSSSA__SE__IEYRIAUAE_S_S_ATR.EEEEAQCMEH_DDNU_TORILHN_URODOO_AM_SRLCIP_SEREALR_SA,SEERIAAACEHI,MMTIHRUFUMNNST_A_COODOMANC_DEQ__NLHAAEEVSR_EO_S__UUA_ICIO_T

Hay que tener en cuenta que este texto es cíclico, es decir, el final continúa en el comienzo, ya que estamos ante una aritmética modular, y el mensaje puede empezar en cualquier punto, en particular, cerca del final, y si alcanza este final, continuaría en el principio.

El mensaje cifrado estará en algún lugar de esta cadena de caracteres, con todos sus caracteres de forma consecutiva, ya que los hemos reordenado según se ordenan las letras del criptograma. El problema es que no sabemos dónde empieza y dónde acaba.

Ahora observamos que el mensaje está cifrado con el sistema de Playfair (porque nos lo han dicho, claro). Este sistema no tiene espacios ni signos de puntuación. Por tanto, el criptograma no contendrá estos símbolos y, por tanto, estará en una secuencia de caracteres sin espacios. Podemos, por tanto, fragmentar la anterior cadena en subcadenas, rompiéndola por los espacios y los signos de puntuación. Dentro de una de estas subcadenas obtenidas estará el criptograma. Así, si dividimos, obtenemos:

IEEDTBNQEDSEBNIEUCLROLUEC
SEMLNISANEPBEN
R
E
DPV
SF
IZASRCLEOAYECTNYENQBEMMEE
ALDS
RIBLRLABQNPLYSATSCPHWOQELAFDKCQHOBQZFWQHOTUZFOIDYLQESRZLEONSEPUEFASQRTHNUIMHAZIMQSZBRSA
O
AGOG
AD
SN
A
OMSOONLSISAR
A
SOSE
DLEOE
AAOYAY
S
A
AT
N
O
BI
EONAIS
J
O
Y
A
LO
ECOSUMTAREAERSDANINRPSU
ODEIU
S
LS
EP
OMSDNBEED
QE
NUY
ETNDLECALAS
UNTAQOSRCA
MRMY
GTVDUEMAUNDIP
RS
TD
LOA
IJE
OO
AENIA
TNRYLL
EN
S
ARS
R
ROPOISSCDBE
RB
FOMSSE
TEI
I
SBPYEEEEEVOPA
UEONEUNONPLUDEFSILQL
NRACPON
E
CSSATTT
TON
A
BSTROBU
LTDHOE
CLILFRC
HO
EUDUUOSJD
SQN
R
AP
ABO
CIEAITLUE
A
SDOAONCUPNSE
UO
OHRI
AOETEOTU
NRAOU
UIIEPOIUEERAAOASSHUNVQNES
IFNETNLTUTO
NAR
TOEA
SQE
QERILEISU
P
EVOSA
AIOEONLNN
NCCO
DUSA
EE
N
NH
NCN
ILLU
ILIAA
IAJCQAMTA
EDTOMTSNEE
ALN
NODOAIQFC
EJNOS
ASRO
ASQA
DBURBEM
TT
D
BECOCULRMOCHPVDERL
CA
NUNOSLO
SE
L
VAAEO
IQ
OMN
OA
SL
AREN
B
EJT
ATLCAGSSSA
SE
IEYRIAUAE
S
S
ATR
EEEEAQCMEH
DDNU
TORILHN
URODOO
AM
SRLCIP
SEREALR
SA
SEERIAAACEHI
MMTIHRUFUMNNST
A
COODOMANC
DEQ
NLHAAEEVSR
EO
S
UUA
ICIO
T

Hay una subcadena que destaca por su longitud. Esto ya es un indicio de que es la que contiene el criptograma, pues dado que los espacios y signos de puntuación son los más frecuentes, ante subcadenas obtenidas aleatoriamente (es decir, las que no contienen el criptograma), por la mayor frecuencia de aparición de estos signos, es probable que sean cortas. Sin embargo, si el criptograma es largo, éste no podrá contener espacios ni signos de puntuación entre medias, y estará contenido en una subcadena larga. Esto sólo es cierto si el criptograma es largo.

Otro indicio que nos indica que esa subcadena es la que contiene el criptograma es que es la que contiene las dos letras "W", además de contener cinco letras "Z" de las seis que aparecen en la cadena de letras en posiciones pares. También contiene la letra "K". Con todos estos indicios, tenemos una gran seguridad de que ésta es la subcadena que contiene el criptograma. Por tanto, el criptograma seguramente esté aquí:

RIBLRLABQNPLYSATSCPHWOQELAFDKCQHOBQZFWQHOTUZFOIDYLQESRZLEONSEPUEFASQRTHNUIMHAZIMQSZBRSA

Ahora el problema es determinar dónde empieza y dónde acaba el criptograma. Supondremos que las letras "W" pertenecen al criptograma, dado lo escasa que es la probabilidad de que aparezcan en un texto normal. Podríamos suponer que todas las letras "Z" pertenecen al criptograma, pero quizá esto sea mucho suponer. Tampoco sabemos si el criptograma empieza en una posición par o impar dentro de la subcadena. Como el cifrario Playfair divide el texto en digramas, tendríamos los digramas del criptograma, junto con digramas ajenos, en posiciones pares e impares:

Digramas pares:
RI, BL, RL, AB, QN, PL, YS, AT, SC, PH, WO, QE, LA, FD, KC, QH, OB, QZ, FW, QH, OT, UZ, FO, ID, YL, QE, SR, ZL, EO, NS, EP, UE, FA, SQ, RT, HN, UI, MH, AZ, IM, QS, ZB, RS
 
Digramas impares:
IB, LR, LA, BQ, NP, LY, SA, TS, CP, HW, OQ, EL, AF, DK, CQ, HO, BQ, ZF, WQ, HO, TU, ZF, OI, DY, LQ, ES, RZ, LE, ON, SE, PU, EF, AS, QR, TH, NU, IM, HA, ZI, MQ, SZ, BR, SA

No sabemos cuál de los dos grupos de digramas contiene los digramas del criptograma, ni cuáles de los digramas son los del criptograma.

Si observamos los digramas repetidos, en el primer caso, el de los digramas pares, vemos que se repiten los digramas "QH" y "QE", mientras que en los digramas impares, vemos que se repiten los digramas "BQ", "HO", "ZF" y "SA". El digrama "SA" aparece al final de la subcadena, y es poco probable que el criptograma acabe justo ahí, pero tampoco lo podemos descartar.

A la hora de elegir qué grupo de digramas puede contener el criptograma, me decantaría por el que más digramas repetidos tiene, es decir, el de posiciones impares, ya que la probabilidad de que en un texto claro se repitan digramas es relativamente alta, y esta repetición de digramas se conserva en el cifrario Playfair.

Ahora se presenta el problema de descifrar el criptograma. Con un mensaje tan corto, va a ser complicado. De momento no se me ocurre cómo atacarlo. Había pensado en utilizar el sistema de trigramas de LlamameX, pero con tan pocos digramas repetidos, no creo que funcione, y sería prácticamente una búsqueda exhaustiva (aunque tampoco sé si funcionaría de tener muchos digramas repetidos). A ver si a alguien se le ocurre cómo atacarlo.

¿No sabes qué estabas haciendo el 5 de Agosto?

Pues no es difícil de imaginar. O estabas preparando un nuevo cifrario con el que aterrorizarnos a todos, o estabas desarrollando uno de tus implacables algoritmos genéticos con el que atacar alguno de los retos que están campando a sus anchas por estos lares.

Bueno, ahora habrá que ver cómo atacar esa cadena de digramas Playfair tan corta.

Demontres a mi también se me pasó

Y sí sé que hacía el 5 de agosto: preparar el examen del curso de Criptografía I de Stanford. Por cierto acabo de ver que aplazan el 2 hasta febrero (malditos)

Pues muy buen análisis, en tu línea de genialidad. Éste lo tenía entre los pendientes con bastantes ganas de meterle mano.

opinar

Texto puro

  • No se permiten etiquetas HTML.
  • Saltos automáticos de líneas y de párrafos.
By submitting this form, you accept the Mollom privacy policy.