¿Puedo determinar el cifrado utilizado para cifrar un archivo con OpenSSL?

4

Tengo dos archivos que fueron cifrados usando OpenSSL. Sé que el primero se cifró con bf-cbc , y también conozco la contraseña para descifrarlo. Es probable que el segundo archivo use la misma contraseña, pero cuando intento descifrarlo, aparece el siguiente mensaje de error:

bad decrypt
29034:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:evp_enc.c:330:

Si intento descifrarlo utilizando un cifrado diferente (diga aes-128-cbc , ya que es el primero en la lista) aparece el mismo mensaje de error.

Entonces, ¿el error que estoy recibiendo se debe a una contraseña incorrecta o al cifrado incorrecto? ¿Es realmente posible decir? Me imagino que podría probar cada cifrado en mi versión OpenSSL y ver si alguno de ellos funciona. ¿Hay un atajo para intentar esto?

    
pregunta Rowan Parker 16.04.2012 - 08:23
fuente

2 respuestas

4

Si su cifrado está usando relleno (es decir, no está en un modo de transmisión por secuencias como CFB, OFB, CTR o CTS), es posible que se dé cuenta simplemente observando el tamaño de los datos cifrados. Por ejemplo, si es de 24 bytes (192 bits), entonces podría ser Blowfish (porque tiene un tamaño de bloque de 64 bits, y 192 es divisible por 64), y no puede ser AES porque 192 no puede dividirse por 128 (AES tamaño de bloque). Pero dado que la mayoría de los tamaños de bloque son múltiplos entre sí, esto probablemente no será muy útil, pero a veces se puede usar para restringir la elección.

Si el método anterior falla, es computacionalmente imposible distinguir los datos descifrados con la clave incorrecta con el cifrado correcto y los datos descifrados con la clave correcta con el cifrado incorrecto. Ambos producen datos aleatorios. (Esto puede formalizarse asumiendo que el cifrado es una permutación aleatoria). Esto es a menos que el cifrado tenga grandes debilidades, por supuesto, lo que probablemente no sea el caso si se incluye en OpenSSL (excepto los antiguos seguros para la exportación como el rc4 de 40 bits).

Por lo tanto, la única forma es probar todos los cifrados posibles con los que se podrían haber cifrado (hay un número infinito de cifrados potenciales, pero solo unos pocos se utilizan en el mundo). Siempre se puede preparar un script para automatizarlo.

Por supuesto, puede almacenar el cifrado utilizado para cifrar el archivo junto a él (o dentro de él), como un byte que toma un valor diferente para cada cifrado. Si la clave se mantiene en secreto, esto no supone ningún riesgo para la seguridad (los sistemas de cifrado modernos están diseñados para confiar completamente en la clave, consulte el Principio de Kerckhoff).

    
respondido por el Thomas 21.04.2012 - 16:09
fuente
2
  

Entonces, ¿el error que estoy recibiendo se debe a una contraseña incorrecta o al cifrado incorrecto?

Posiblemente uno o ambos. Creo que la función EVP_DecryptFinal_ex () verifica que el valor y el tamaño del relleno después del descifrado sean consistentes con el tamaño de bloque utilizado por el proceso de encriptación y el tamaño del mensaje de entrada si utiliza el relleno (el valor predeterminado). El error que se le devuelve parece indicar que la verificación falló y que la elección de algo y / o la clave es incorrecta.

  

¿Es realmente posible decir?

No lo creo. Los expertos pueden querer opinar aquí.

    
respondido por el obscure 18.04.2012 - 13:55
fuente

Lea otras preguntas en las etiquetas