Sí. Hay formas extremadamente eficientes de romper un generador lineal congruente.
s n + 1 = as n + b mod m define un generador lineal congruente. donde m es el módulo. En su forma más simple, el generador simplemente genera sn como el n th número pseudoaleatorio. Si el atacante conoce m y a , b no se conoce, Thomas describió cómo romperlo.
Si no se conoce ninguno de a , b , m , aún se puede romper un generador lineal congruente, recuperando primero m . Es un ejercicio interesante derivar cómo hacerlo de manera eficiente; se puede hacer. Voy a mostrar cómo a continuación; no siga leyendo si prefiere intentar resolverlo por sí mismo.
Para recuperar m , defina t n = s n + 1 - s n y un = | t n + 2 t n - t 2 n + 1 |; luego con alta probabilidad tendrá m = gcd ( u 1 , u 2 , ..., u 10 ). 10 aquí es arbitrario; si lo hace k , entonces la probabilidad de que esto falle es exponencialmente pequeña en k . Puedo compartir un indicador de por qué esto funciona, si alguien está interesado.
La lección importante es que el generador lineal congruente es irremisiblemente inseguro y completamente inadecuado para uso criptográfico .
Añadido: @AviD me odiará aún más :), pero aquí están los cálculos de por qué esto funciona, para aquellos que lo solicitaron.
La idea clave: t n + 1 = s n + 1 - s n = (como n - b) - (como n-1 - b) = como n - como n-1 = en n mod m , y t n + 2 = a 2 t n mod m , y t n + 3 = a 3 t n mod m . Por lo tanto, t n + 2 t n - t n + 1 2 = 0 mod m , es decir, | t n + 2 t n - t n + 1 2 | es un múltiplo aleatorio de m. Hecho de la teoría numérica ingeniosa: el gcd de dos múltiplos aleatorios de m será m con probabilidad 6 / π 2 = 0.61; y si tomas el gcd de k de ellos, esta probabilidad se acerca mucho a 1 (exponencialmente rápido en k). ¿Eso es genial, o qué?