¿Es posible identificar el algoritmo utilizado para el cifrado de flujo basado en el análisis de un flujo cifrado?
Como de costumbre: si el cifrado es bueno, entonces su salida es indistinguible de la aleatoriedad (de hecho, un criptográfico seguro PRNG es realmente lo mismo que un cifrado de flujo usando la "inicialización inicial" como clave, y cifrando una larga secuencia de ceros). En particular, no se puede identificar un algoritmo específico.
Para identificarte, busca contexto . El algoritmo utilizado, en cualquier sistema, no suele ser un secreto; Auguste Kerckhoffs ha explicado que un "algoritmo secreto" no es una base sensata para el secreto, y el algoritmo puede e incluso debería hacerse público. Por lo tanto, muchos protocolos de comunicación incluyen campos que explicitan el algoritmo utilizado; esto hace que dicho protocolo sea potencialmente actualizable a nuevos algoritmos de una manera compatible con versiones anteriores (esto se denomina agilidad de algoritmo ). Por ejemplo, en SSL / TLS , el conjunto de algoritmos se indica claramente, sin cifrar, en el mensaje ServerHello
, por lo que todo el mundo (incluido cualquier oyente) sabe perfectamente qué algoritmo de cifrado se utiliza.
De manera similar, si se aplica el cifrado, entonces se realiza en dos lugares (el remitente y el receptor), ambos implicando una encarnación tangible del algoritmo. En palabras más cortas, hay algún software que realiza el cifrado y el descifrado. El software es altamente susceptible a ingeniería inversa y, por lo tanto, se puede identificar el algoritmo.
El cifrado de flujo RC4 se usa ampliamente como un cifrado de flujo (es el cifrado de flujo soportado por SSL, por ejemplo), y tiene sesgos . Hablando criptográficamente, está "roto", aunque no lo suficiente como para convertir el sesgo en ataques reales en la mayoría de las situaciones prácticas. Es posible que pueda explotar dichos sesgos en una identificación de algoritmo, especialmente si puede hacer que el sistema de encriptación desconocido procese una gran cantidad de bytes que conoce (debe poder hacer que el sistema cifre o descifre los bytes que conoce). , y observar el resultado). Consulte la página de Wikipedia para obtener información sobre los punteros.
Lea otras preguntas en las etiquetas encryption