Publicado: Mié Abr 16, 2008 2:06 pm
Me voy a enfadar, han puesto una pregunta de claves y no me he enterado.
Romper esa cifra de sustitución es todavía más sencillo de lo que ha dicho Bitxo, puede hacerse con un miniprograma (cuesta cinco minutos escribirlo) usando la técnica de la "palabra probable"
En principio, la cifra más probable es la de sustitución simple, en la que cada carácter se desplaza un número fijo de caracteres. Viene a ser como si sumásemos un número. Me explico:
Supongamos que a la letra "a" le corresponde el 1, a la "b" el dos, etcétera. Si sumamos 3 a cada número, y lo convertimos de nuevo en letra, el 1 pasa a ser 4, es decir, le corresponde una "d", y sucesivamente. Sila cifra sobrepasa el 26 (número de caracteres), se resta y ya está: a la "y" le corresponde "b".
Lo que haremos será: resto de la división ((número de carácter + cifra) / 26)
Ahora, se escribe un corto programa (yo lo he hecho en Visual Basic para Aplicacioness) que parta la palabra en letras, y que vaya probando claves. Cuando sale la palabra "de", me avisa y me muestra el resultado. El segundo resultado muestra el mensaje roto (con algunos errores por las A mayúsculas).
La verdad, un código de sustitución simple no necesitaría usar la "palabra probable", se podrían revisar los resultados uno a uno, pero serviría en caso que se usasen varios códigos.
Este es el código (no está muy depurado, aviso) que se puede cortar y pegar en un módulo de Access o Excel y probarlo.
Option Explicit
Public Sub LeeClave()
Dim s1 As String
Dim sLetra() As String
Dim iLetra() As Long
Dim iLon As Long
Dim i As Long
Dim a As Long
s1 = "uvzoltvzklqAkvsvzwAxblalzklsbjrflsdopzrflzjvjlzfsAnbpAtpjolspululsiAyyAjvuxblAsnbpluuvzsvzayApnAvuvoAfxbplutvualbuspvjvtvlzklipkv"
iLon = Len(s1)
ReDim sLetra(iLon)
ReDim iLetra(iLon)
For i = 0 To iLon - 1
sLetra(i) = Mid$(s1, i + 1, 1)
iLetra(i) = Asc(sLetra(i)) - Asc("a")
Next
For a = 1 To 26
s1 = ""
For i = 0 To iLon - 1
iLetra(i) = (iLetra(i) + a) Mod 26
sLetra(i) = Chr$(iLetra(i) + Asc("a"))
s1 = s1 & sLetra(i)
Next
If InStr(s1, "de") Then
MsgBox a
MsgBox s1
Stop
End If
Next
End Sub
EScribir códigos que cifren (o rompan) un mensaje basándonos en una palabra clave tampoco es muy difícil. De hecho, la siguiente era probar la parte del mensaje en claro y usarlo como palabras clave, y luego otras como "band of brothers", "compañía E", "aguilas aullantes", "licor", etcétera. Incluso puede usarse un sistema de fuerza bruta probando combinaciones de las primeras letras, a ver si se pilla la clave.
La verdad es que un ordenador personal actual tiene potencia suficiente para romper la mayor parte de las cifras usadas durante la SGM sin demasiados problemas (sabiendo un poco de criptografía, claro).
Felicidades a Bitxo. Saludos
Romper esa cifra de sustitución es todavía más sencillo de lo que ha dicho Bitxo, puede hacerse con un miniprograma (cuesta cinco minutos escribirlo) usando la técnica de la "palabra probable"
En principio, la cifra más probable es la de sustitución simple, en la que cada carácter se desplaza un número fijo de caracteres. Viene a ser como si sumásemos un número. Me explico:
Supongamos que a la letra "a" le corresponde el 1, a la "b" el dos, etcétera. Si sumamos 3 a cada número, y lo convertimos de nuevo en letra, el 1 pasa a ser 4, es decir, le corresponde una "d", y sucesivamente. Sila cifra sobrepasa el 26 (número de caracteres), se resta y ya está: a la "y" le corresponde "b".
Lo que haremos será: resto de la división ((número de carácter + cifra) / 26)
Ahora, se escribe un corto programa (yo lo he hecho en Visual Basic para Aplicacioness) que parta la palabra en letras, y que vaya probando claves. Cuando sale la palabra "de", me avisa y me muestra el resultado. El segundo resultado muestra el mensaje roto (con algunos errores por las A mayúsculas).
La verdad, un código de sustitución simple no necesitaría usar la "palabra probable", se podrían revisar los resultados uno a uno, pero serviría en caso que se usasen varios códigos.
Este es el código (no está muy depurado, aviso) que se puede cortar y pegar en un módulo de Access o Excel y probarlo.
Option Explicit
Public Sub LeeClave()
Dim s1 As String
Dim sLetra() As String
Dim iLetra() As Long
Dim iLon As Long
Dim i As Long
Dim a As Long
s1 = "uvzoltvzklqAkvsvzwAxblalzklsbjrflsdopzrflzjvjlzfsAnbpAtpjolspululsiAyyAjvuxblAsnbpluuvzsvzayApnAvuvoAfxbplutvualbuspvjvtvlzklipkv"
iLon = Len(s1)
ReDim sLetra(iLon)
ReDim iLetra(iLon)
For i = 0 To iLon - 1
sLetra(i) = Mid$(s1, i + 1, 1)
iLetra(i) = Asc(sLetra(i)) - Asc("a")
Next
For a = 1 To 26
s1 = ""
For i = 0 To iLon - 1
iLetra(i) = (iLetra(i) + a) Mod 26
sLetra(i) = Chr$(iLetra(i) + Asc("a"))
s1 = s1 & sLetra(i)
Next
If InStr(s1, "de") Then
MsgBox a
MsgBox s1
Stop
End If
Next
End Sub
EScribir códigos que cifren (o rompan) un mensaje basándonos en una palabra clave tampoco es muy difícil. De hecho, la siguiente era probar la parte del mensaje en claro y usarlo como palabras clave, y luego otras como "band of brothers", "compañía E", "aguilas aullantes", "licor", etcétera. Incluso puede usarse un sistema de fuerza bruta probando combinaciones de las primeras letras, a ver si se pilla la clave.
La verdad es que un ordenador personal actual tiene potencia suficiente para romper la mayor parte de las cifras usadas durante la SGM sin demasiados problemas (sabiendo un poco de criptografía, claro).
Felicidades a Bitxo. Saludos