He diseñado un generador aleatorio simple que cicla dos números de manera caótica utilizando un método de multiplicación y módulo. Funciona muy bien para eso.
Sin embargo, si lo usara como generador de cifrado, sería vulnerable a un ataque de texto sin formato conocido, dado que un atacante puede realizar ingeniería inversa de la semilla de una serie de números aleatorios de una manera computacionalmente eficiente.
Para probar que el cifrado no funciona, encuentre un par legal de valores de inicialización que generen 7 ceros seguidos en el rango [0; 255], utilizando la menor potencia, tiempo de CPU, etc. posible.
Aquí está el generador aleatorio escrito en JavaScript:
function seed(state1,state2){
//Constants
var mod1=4294967087
var mul1=65539
var mod2=4294965887
var mul2=65537
function random(limit){
//Cycle each state variable 1 step
state1=(state1*mul1)%mod1
state2=(state2*mul2)%mod2
//Return a random variable
return (state1+state2)%limit
}
//Return the random function
return random
}
//Initiate the random generator using 2 integer values,
//they must be in the ranges [1;4294967086] and [1;4294965886]
random=seed(31337,42)
//Write 7 random values in the range [0;255] to screen
for(a=0;a<7;a++){
document.write(random(256)+"<br>")
}
He creado una herramienta para probar pares de números candidatos, se puede encontrar aquí .
Durante los próximos 3 días, no se permiten spoilers , una respuesta debe contener solo un conjunto de números y, por supuesto, debe ser un conjunto diferente de los publicados por solucionadores anteriores. A partir de entonces, se le recomienda publicar código y explicar su enfoque.
Editar, la cuarentena ha terminado: las
respuestas deben contener un conjunto único de números y una explicación y un código para documentar el método de resolución.
La solución más elegante gana.
Para el registro:
escribir un programa que pueda encontrar una solución rápidamente es elegante.
Hacer un programa que utilice las características de una GPU de manera eficiente para hacerlo aún más rápido es elegante.
Hacer el trabajo en una pieza de "museo" es elegante.
Encontrar un método de solución que pueda utilizarse con solo lápiz y papel es muy elegante.
Explicar su solución de manera instructiva y fácil de entender es elegante.
Usar computadoras múltiples o muy caras es poco elegante.