Recientemente encontre una oferta laboral en la que como proceso de preselección pedía desencriptar el siguiente texto y explicar el procedimiento realizado.

ΣΦΨΞΔλΨΔΛΣΦΔλΨξΔϗΞΔΦΨΞϑλΨΛΣΘϑΞϗΦϑλΨΣΞΨλϑΞΨζβΣφΔΨΣΦΨΣΞΨξΛϗ ΞΞϑΨϖΣΞΨΠΣϖΛΣφΔΞΨΩΨΠΛΣΦϖϗϖϑΨΔΨΞΔΨΘΔφϗΔΨϖΣΨΞϑλΨΓΔΘϗΦϑλΨΣΞΨ ΔΛΛϗΣΛϑΨαΔΨΣΞΨΔΛΛϗΣΛϑΨαΔΨΣλΨξΔΦϖΣΛΔΨϖΣΨΦϗΣξΞΔΨλβΨΠϑΦΓΡϑΨΔ ΞΨαϗΣΦμϑΨΞϑΨλΔΞβϖΔΦΨΞΔλΨεΞΔβμΔλΨϖΣΞΨΠΔζϑΦΔΞΨΩΨΔΦϗΘΔΦϖϑΨΞΔ ΨμΛϑΠΔΨΠΔΛΨΣλϑλΨΓΣΛΛϑλΨΣΞΨΔΛΛϗΣΛϑΨαΔΨΣΞΨΔΛΛϗΣΛϑΨαΔΨΞΔλΨΠΣ ΦΔλΨΩΨΞΔλΨαΔηβϗμΔλΨλΣΨαΔΦΨΠΔΛΨΞΔΨΘϗλΘΔΨλΣΦϖΔΨΞΔλΨΠΣΦΔλΨλϑ ΦΨϖΣΨΦϑλϑμΛϑλΨΞΔλΨαΔηβϗμΔλΨλϑΦΨΔζΣΦΔλ

Hace poco también leí el libro ‘Los códigos secretos’ de Simon Singh, donde cuenta toda la historia de la criptografía y sus usos, muy bueno y lo súper recomiendo.

Portada del libro

Así que pensé que sería algo interesante para hacer, me arremangue la camisa y comencé.

Tabla de contenidos

  1. Análisis de la situación y suposiciones
  2. Análisis de frecuencia

Análisis de la situación y suposiciones

En este punto sabemos muy poco asi que vamos a suponer lo siguiente y ver hacia donde nos lleva

  • Que el lenguaje original del mensaje es en español, dado que la oferta laboral estaba en este idioma
  • Que se utilizó una de las encriptaciones más simple e históricas, llamada cifrado clásico más específicamente un subconjunto de éste, llamado cifrado por sustitución.

    En un cifrado por sustitución, las letras (o grupos de letras) son sistemáticamente reemplazadas en el mensaje por otras letras (o grupos de letras).

Ejemplo

Análisis de frecuencia

Para poder romper la encriptación vamos a utilizar el método análisis de frecuencia.

El análisis de frecuencias está basado en el hecho que, dado un texto, ciertas letras o combinaciones de letras aparecen más a menudo que otras, existiendo distintas frecuencias para ellas. Por ejemplo, en español la letra A y E son muy comunes, mientras que la K y W son muy raras.

gráfico frecuencia de uso de letras en español

Mediante un pequeño programa escrito en python vemos los diferentes signos utilizados, y la cantidad de uso de cada uno de ellos


from collections import Counter

text = "ΣΦΨΞΔλΨΔΛΣΦΔλΨξΔϗΞΔΦΨΞϑλΨΛΣΘϑΞϗΦϑλΨΣΞΨλϑΞΨζβΣφΔΨΣΦΨΣΞΨξΛϗΞΞϑΨϖΣΞΨΠΣϖΛΣφΔΞΨΩΨΠΛΣΦϖϗϖϑΨΔΨΞΔΨΘΔφϗΔΨϖΣΨΞϑλΨΓΔΘϗΦϑλΨΣΞΨΔΛΛϗΣΛϑΨαΔΨΣΞΨΔΛΛϗΣΛϑΨαΔΨΣλΨξΔΦϖΣΛΔΨϖΣΨΦϗΣξΞΔΨλβΨΠϑΦΓΡϑΨΔΞΨαϗΣΦμϑΨΞϑΨλΔΞβϖΔΦΨΞΔλΨεΞΔβμΔλΨϖΣΞΨΠΔζϑΦΔΞΨΩΨΔΦϗΘΔΦϖϑΨΞΔΨμΛϑΠΔΨΠΔΛΨΣλϑλΨΓΣΛΛϑλΨΣΞΨΔΛΛϗΣΛϑΨαΔΨΣΞΨΔΛΛϗΣΛϑΨαΔΨΞΔλΨΠΣΦΔλΨΩΨΞΔλΨαΔηβϗμΔλΨλΣΨαΔΦΨΠΔΛΨΞΔΨΘϗλΘΔΨλΣΦϖΔΨΞΔλΨΠΣΦΔλΨλϑΦΨϖΣΨΦϑλϑμΛϑλΨΞΔλΨαΔηβϗμΔλΨλϑΦΨΔζΣΦΔλ"
letters = Counter(text)
print("cantidad de letras = ", len(letters))
print(letters)

Obteniendo el resultado:

signos y sus cantidades.

Dandonos cierta confirmación de que vamos bien ya que se utilizan 23 signos distintos, un valor cercano a la cantidad de letras en el alfabeto.

Además vemos que de mayor a menor en cantidad de usos de un signo es: 74 - 53 - 34 - 31 - 31…


Según el siguiente artículo (frecuencia de aparición de letras) en el idioma español la letra ‘a’ es la más frecuente, seguida de cerca por la letra ‘e’, pero superandolas esta el ‘espacio’ casi duplicando a la letra más frecuente.

Por lo tanto reemplazamos el signo Ψ por un espacio, Δ por una ‘a’ y Σ por una ‘e’.

Nota: Tener en cuenta por supuesto que esto no es una ciencia exacta, estamos haciendo uso de la probabilidad. “Puede fallar” dijo Tusam. Si éste fuera el caso se puede volver atrás e intercambiar la ‘a’ por la ‘e’ y continuar el proceso.

Agregamos las siguientes líneas de código a nuestro programa:


text = text.replace('Ψ', ' ')
text = text.replace('Δ', 'a')
text = text.replace('Σ', 'e')
print(text)

Obteniendo:

Analizando el resultado es muy posible que el signo ‘Ξ’ sea una ‘l’, por que en una palabra se repite 2 veces seguidas, y por que se usaría para las palabras ‘las’ ‘los’, ‘el, ‘la’.

Hacemos el reemplazo…


text = text.replace('Ξ', 'l')

Obteniendo:

Continuando de la misma forma es muy posible que:

  • Ω sea una ‘y’
  • ϑ sea una ‘o’
  • λ sea una ‘s’

text = text.replace('Ω', 'y')
text = text.replace('ϑ', 'o')
text = text.replace('λ', 's')

Obteniendo:

Esto es un proceso iterativo, donde en cada iteración nos vamos acercando cada vez más al objetivo.

A partir de acá ya es mucho más fácil deducir el resto, ¿Te animas a completarlo?

Buena suerte y nos vemos!