La seguridad falla en la clave privada y xor

-1

He implementado un programa muy corto para cifrar un archivo y enviarlo a un servidor remoto. Primero, construyo una clave basada en una frase de paso y un subconjunto de números primos (la longitud de la clave está definida por el usuario, 100 KB por defecto). El cifrado se realiza con un XOR simple a partir de los bytes de la fuente y los "bytes modulados" de la clave, por ejemplo: s ^ k . Se envía un índice de los archivos, también cifrado.

Si la clave privada y la frase de contraseña privada nunca se envían al servidor, ¿es posible descifrar archivos, tipos de archivos o nombres?

Este es el código del cifrado cuando se generó la clave.

while (!feof(fp_src))
{
    v = fgetc(fp_src) ;
    if (v == EOF) { break ; } // Success : end of process.

    // Loop on key content :
    p = fgetc(fp_key) ;
    if (p == EOF) {
        fseek(fp_key, 0, SEEK_SET) ;
        p = fgetc(fp_key) ;
        if (p == EOF) { break ; }
    }

    o = v ^ p ;
    fputc(o, fp_out) ;

    show_progress(src_len, proc_idx) ;
    proc_idx++ ;
}

Muchas gracias.

    
pregunta Etsig 21.05.2016 - 00:36
fuente

2 respuestas

0

Bien, entonces estás haciendo un pad de una vez , pero en realidad es un pad de múltiples tiempos porque la clave es finita (< 100kb) y se deriva de una frase de contraseña.

¡Romper (también conocido como cryptanalysing) sería divertido! Aquí hay algunas cosas con las que empezaría:

  1. Usted dice que la clave se deriva de una frase de contraseña. No nos dices cómo en tu pregunta, pero si tuviera acceso a tu binario, podría hacer una ingeniería inversa para resolverlo. Desde allí puedo probar un diccionario de frases de contraseña comunes hasta que obtenga un texto cifrado que coincida. Entonces sé cuál es su clave (esta es una forma de ataque de texto llano elegido ).

  2. Análisis de frecuencia: ya que sé que estás haciendo un bucle sobre la clave XORing cada byte de la clave varias veces (y presumiblemente siempre comenzando con el primer byte de la clave para un nuevo masaje), puedo contar con qué frecuencia Cada byte de clave produce cada carácter de texto cifrado. El carácter más común de texto cifrado (para cada byte de clave) debe asignarse a la letra 'e', que me permitirá averiguar la clave completa. No saber la longitud de la clave hace que esto sea más difícil, pero ciertamente no imposible.

Como dijeron @Aurora y @LukePark, la frase "no hagas tuyos" existe por una razón. Si está haciendo esto por su propio aprendizaje y nunca planea usarlo, entonces genial, pero de lo contrario, use PBKDF2 para derivar la clave de una frase de contraseña, y use AES para el cifrado.

    
respondido por el Mike Ounsworth 21.05.2016 - 07:18
fuente
1

Sí. Es relativamente trivial descifrar este cifrado sin que se haya enviado la clave o la contraseña, dado el tráfico interceptado suficiente.

    
respondido por el Peleus 21.05.2016 - 06:47
fuente

Lea otras preguntas en las etiquetas