Conociendo el texto sin formato, ¿cómo descubrir el esquema de cifrado utilizado? [cerrado]

StackOverflow https://stackoverflow.com/questions/231592

  •  04-07-2019
  •  | 
  •  

Pregunta

Tengo algunos campos char () en una tabla DBF que un desarrollador anterior dejó encriptados en el proyecto.

Sin embargo, conozco el resultado de texto simple del descifrado de varios registros. ¿Cómo puedo determinar la función / algoritmo / esquema para descifrar los datos originales? Estos son algunos campos de muestra:

Para cryptext:

b5 01 02 c1 e3 0d 0a

el texto en claro debe ser:

3543921 or 3.543.921

Y para cryptext:

41 c3 c5 07 17 0d 0a

el texto en claro debe ser

1851154 or 1.851.154

Creo que 0d 0a es solo relleno. Fue a partir de los datos recopilados en la codificación win-1252 (no sé si importa)

EDITAR: es por curiosidad y aprendizaje. Quiero poder entender el cifrado utilizado (parece simple, aunque son datos binarios) para recuperar el valor de los campos para las tuplas cuyo texto sin formato no sé.

EDIT 2: Se agregaron un par de muestras.

¿Fue útil?

Solución

No hay una manera fácil en el caso general. Esta pregunta es demasiado general. Intenta publicar estas cadenas planas y cifradas.

EDITAR:

  • en aras del aprendizaje, puede leer este artículo: Criptografía en Wikipedia
  • si realmente cree que el cifrado es simple, verifique si se trata de un nivel XOR de byte (o palabra); consulte el siguiente pseudocódigo

    for (i in originalString) {
    newString[i] = originalString[i] ^ CRYPT_BYTE;
    }
    

Otros consejos

Suponiendo que no es algo tan simple como un cifrado de sustitución (análisis de frecuencia de prueba) o un XOR mal aplicado (p. ej., reutilizando la clave; intente XORear dos ciphertexts con plaintexts conocidos y luego ver si el resultado es el XOR de los plaintexts; o intente XORing el texto cifrado con sí mismo desplazado por una cierta cantidad de bytes), probablemente debería asumir que es un cifrado de secuencia / bloque bien conocido con una clave desconocida (que probablemente consiste en caracteres ASCII). Si tiene una muestra lo suficientemente grande de pares de texto cifrado-texto plano, puede comenzar por verificar si los textos simples con los mismos primeros caracteres / bytes tienen textos cifrados con los mismos primeros caracteres / bytes. Allí también puede ver si es un bloque o un cifrado de flujo y si hay algún mecanismo de retroalimentación involucrado. El relleno, si está presente, también podría sugerir que es un cifrado de bloque en lugar de un cifrado de flujo.

Dependiendo de cuánto esfuerzo desees poner en él, deberías poder llegar a alguna parte. Comience leyendo sobre cryptanalysis , en particular el métodos de cryptanalysis .

Las cosas que determinarán qué tan fácil será esta tarea son:

  • qué tan bueno es el método de encriptación utilizado; Si se trata de un método reciente y bien considerado, como RSA o AES, es probable que no tenga suerte.
  • cuánto texto cifrado y simple tiene, cuanto más mejor
  • qué tipo de datos son: el texto simple es el más fácil, mientras que los datos aleatorios serían los más difíciles
  • si todos los datos están encriptados con la misma clave o si se han utilizado varias claves.

La clave del éxito es no desanimarse; la historia del criptoanálisis está llena de historias de códigos supuestamente irrompibles que se están descifrando; Quizás la más famosa sea la máquina Enigma de la Segunda Guerra Mundial, cuyo craqueo contribuyó al desarrollo de las computadoras modernas.

Podemos decir algunas cosas de lo que has proporcionado:

  • Con una longitud de texto cifrado de 7 bytes en cada caso, es poco probable que sea un cifrado de bloque (dado que los cifrados de bloque cifran un bloque a la vez, su longitud será un múltiplo del tamaño de bloque, y un tamaño de bloque de 56 bits es bastante improbable *).
  • La longitud del texto cifrado y la cantidad de caracteres en el texto plano es la misma en cada caso, por lo que podría ser una codificación directa de números como ascii con un cifrado de flujo aplicado.
  • XORAR el texto simple (como ascii) y el texto cifrado juntos no proporciona ni un solo octeto repetido ni el mismo criptostream para cada uno, por lo que no es un cifrado trivial. Tampoco es un simple cifrado de flujo que usa la misma clave para ambos, a menos que algunos de los bytes de texto cifrado sean un IV.
  • Los dos últimos bytes son idénticos en texto cifrado pero no en texto plano. Esto podría ser una coincidencia, pero también podría ser indicativo de relleno, como usted sugiere. Si están rellenados, se debe usar algún otro mecanismo de codificación.

¿Sabe si todos los valores cifrados son enteros, o son también posibles otros valores?

Determinar el algoritmo utilizado sin la clave correspondiente puede no ser del todo útil.

Si el texto es lo suficientemente pequeño y tiene el texto sin formato, ¿por qué trataría de descifrarlo? Aparte de, por supuesto, por curiosidad?

No hay una forma determinista de saberlo, pero a menudo hay pistas en el texto cifrado. ¿Está realmente encriptado (con algún tipo de clave)? ¿O es simplemente picadillo y (posiblemente) salado?

Si está en hash, podrías tener suerte y solo buscar en Google un par que coincida (suponiendo que tengas alguna que sea palabras de diccionario) porque ya hay diccionarios pre-hash en línea.

Si tiene un ejemplo de texto cifrado, podría publicarlo, alguien podría reconocer el formato de cifrado ...

Creo que es un error pensar que XOR es un esquema fácilmente descifrable. La forma de cifrado teóricamente más sólida es un teclado de una sola vez: simplemente una cadena de bits predeterminados con los que usted o su texto sin formato ...

XORs finitos, por otro lado ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top