Ho progettato un semplice generatore casuale che cicla due numeri in modo caotico usando un metodo di moltiplicazione e modulo. Funziona benissimo per questo.
Se dovessi usarlo come generatore di cifratura sarebbe comunque vulnerabile a un noto attacco in chiaro, dato che un aggressore può decodificare il seme da una serie di numeri casuali in modo computazionalmente efficiente.
Per provare la crittografia non trovata, trova una coppia legale di valori seed che generano 7 zeri di fila nell'intervallo [0; 255], usando il minor consumo di energia, tempo di CPU ecc.
Ecco il generatore casuale scritto in 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>")
}
Ho creato uno strumento per testare le coppie di numeri candidati, può essere trovato qui .
Per i prossimi 3 giorni, nessun spoiler consentito , una risposta deve contenere solo un set di numeri e, naturalmente, dovrebbe essere un set diverso da quelli pubblicati dai solutori precedenti. Successivamente sei incoraggiato a pubblicare codice e spiegare il tuo approccio.
Modifica, la quarantena è terminata: le
risposte devono contenere sia un insieme univoco di numeri sia una spiegazione e un codice per documentare il metodo di risoluzione.
La soluzione più elegante vince.
Per la cronaca:
scrivere un programma in grado di trovare rapidamente una soluzione è elegante.
Realizzare un programma che utilizza le funzionalità di una GPU in modo efficiente per farlo ancora più velocemente è elegante.
Fare il lavoro su un pezzo di "museo" è elegante.
Trovare un metodo di soluzione che può essere facilmente utilizzabile usando solo carta e penna è molto elegante.
Spiegare la tua soluzione in modo istruttivo e facilmente comprensibile è elegante.
L'uso di computer multipli o molto costosi non è elegante.