곱하기 및 계수 방법을 사용하여 혼란스러운 방식으로 두 숫자를 순환시키는 간단한 임의 생성기를 설계했습니다. 그것은 잘 작동합니다.
내가 암호 생성기로 사용한다면 공격자가 계산적으로 효율적인 방식으로 일련의 난수에서 시드를 리버스 엔지니어링 할 수 있다는 점을 감안하면 알려진 일반 텍스트 공격에 취약합니다.
암호가 손상되었음을 증명하려면 가능한 적은 전력, CPU 시간 등을 사용하여 [0; 255] 범위의 행에서 7 개의 0을 생성하는 올바른 시드 값 쌍을 찾으십시오.
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>")
}
후보 번호 쌍을 테스트하기위한 도구를 만들었으며 여기 에서 찾을 수 있습니다 .
다음 3 일 동안 스포일러는 허용되지 않으며 답변에는 일련의 숫자 만 포함되어야하며 물론 이전 솔버가 게시 한 것과 다른 세트 여야합니다. 그런 다음 코드를 게시하고 접근 방식을 설명하는 것이 좋습니다.
편집, 격리가 끝났습니다.
답변에는 고유 한 숫자 세트와 설명 및 코드가 모두 포함되어 해결 방법을 문서화해야합니다.
가장 우아한 솔루션이 승리합니다.
레코드 :
솔루션을 빠르게 찾을 수있는 프로그램 작성은 우아합니다.
GPU의 기능을 효율적으로 활용하여 더욱 빠르게 수행하는 프로그램을 만드는 것은 우아합니다.
"박물관"에서 작업을하는 것은 우아합니다.
펜과 종이만으로도 활용 가능한 솔루션 방법을 찾는 것은 매우 우아합니다.
유익하고 이해하기 쉬운 방식으로 솔루션을 설명하는 것은 우아합니다.
여러 대 또는 매우 비싼 컴퓨터를 사용하는 것은 중요하지 않습니다.