Zaprojektowałem prosty generator losowy, który cyklicznie zamienia dwie liczby za pomocą metody mnożenia i modułu. Działa to doskonale.
Gdybym użył go jako generatora szyfrów, byłby jednak podatny na znany atak w postaci tekstu jawnego, biorąc pod uwagę, że osoba atakująca może odwrócić inżynierowanie ziarna od szeregu liczb losowych w sposób efektywny obliczeniowo.
Aby udowodnić, że złamano szyfr, znajdź legalną parę wartości początkowych, które generują 7 zer w rzędzie w zakresie [0; 255], zużywając jak najmniej energii, czasu procesora itp., Jak to możliwe.
Oto losowy generator napisany w 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>")
}
Stworzyłem narzędzie do testowania par numerów kandydatów, można je znaleźć tutaj .
Przez następne 3 dni spoilery nie są dozwolone , odpowiedź musi zawierać tylko zestaw liczb, i oczywiście powinien być inny zestaw niż te publikowane przez poprzednie solwery. Następnie zachęcamy do pisania kodu i wyjaśnienia swojego podejścia.
Edycja, kwarantanna się zakończyła:
odpowiedzi powinny zawierać zarówno unikalny zestaw liczb, jak i objaśnienie oraz kod dokumentujący metodę rozwiązywania.
Najbardziej eleganckie rozwiązanie wygrywa.
Dla przypomnienia: napisanie
programu, który szybko znajdzie rozwiązanie, jest eleganckie.
Tworzenie programu, który efektywnie wykorzystuje funkcje GPU, aby zrobić to jeszcze szybciej, jest eleganckie.
Wykonanie pracy na „muzealnym sprzęcie” jest eleganckie.
Znalezienie metody rozwiązania, która może być wykorzystana tylko za pomocą długopisu i papieru, jest bardzo eleganckie.
Wyjaśnienie rozwiązania w pouczający i łatwo zrozumiały sposób jest eleganckie.
Korzystanie z wielu lub bardzo drogich komputerów jest nieeleganckie.