제목이 요약됩니다. DateTime.Now 또는 광 센서에서 생성 된 숫자와 같은 임의의 다른 소스에 의존하지 않고 동일한 입력에 대해 가변 출력을 생성 할 수있는 알고리즘이 있는지 알고 싶습니다. 또한 알고리즘을 실행할 수 없습니다 순서대로, 서로 다른 결과를 생성하는 두 개의 별개의 관련없는 런.
2.0 + 2.0
그러한 시스템을 계산 하는 것만으로 는 동일한 결과를 얻을 수 없습니다. 다른 임의의 출처가 필요하지 않습니다.
제목이 요약됩니다. DateTime.Now 또는 광 센서에서 생성 된 숫자와 같은 임의의 다른 소스에 의존하지 않고 동일한 입력에 대해 가변 출력을 생성 할 수있는 알고리즘이 있는지 알고 싶습니다. 또한 알고리즘을 실행할 수 없습니다 순서대로, 서로 다른 결과를 생성하는 두 개의 별개의 관련없는 런.
2.0 + 2.0
그러한 시스템을 계산 하는 것만으로 는 동일한 결과를 얻을 수 없습니다. 다른 임의의 출처가 필요하지 않습니다.
답변:
DateTime.Now 또는 광 센서에서 생성 된 숫자와 같은 임의의 소스에 의존하지 않고 동일한 입력에 대해 가변 출력을 생성 할 수있는 알고리즘이 있는지 알고 싶습니다.
아니요, 알고리즘의 정의는 잘 정의되고 결정적입니다. 즉, 동일한 입력이 항상 동일한 출력을 생성 할 수 있기 때문에 근본적으로 불가능합니다. 무작위 알고리즘이 있지만 입력으로 임의성이 필요합니다.
또한 결정 성은 컴퓨터 하드웨어 의 가장 중요한 디자인 목표입니다. 동일한 입력이 주어지면 동일한 출력을 생성하지 않는 CPU는 대부분의 목적에 전혀 쓸모가 없습니다.
아니오, 의사 난수 생성 알고리즘은 항상 동일한 시드 (따라서 의사 난수) 에서 동일한 출력을 생성합니다 .
"프로그램"이 아니라 "알고리즘"이라는 용어를 사용한 것이 흥미 롭습니다. 여기에는 특정 클래스의 예 답변 (RAM의 소프트 오류, 멀티 스레드 RNG의 다른 스레드 인터리빙 등)이 제외됩니다. 알고리즘을 실행할 때마다 반복 할 때마다 동일한 입력을 무작위로 지정하지 않으면, 각 실행에서 동일한 출력을 생성합니다.
즉, CPU 온도와 같은 기본 사항조차도 제대로 정규화되면 엔트로피 소스로 작동하기에 충분히 예측할 수 없습니다. 따라서 이것이 실행 된 시간을 알고 있다면 "암호 적으로 안전한"난수 생성기를 예측할 수 있다고 생각하지 마십시오. 그들 중 다수는 시스템 생성 엔트로피 피드를 사용합니다.
동일한 시드가 주어질 때마다 동일한 난수 시퀀스가 생성되도록 사람들이 매우 열심히 일한다는 것을 알고 있습니까? 이것은 결과가 완전히 재현 가능하다는 것을 의미하므로 Monte Carlo 시뮬레이션과 같은 것들에 바람직한 특성입니다. 시드를 지정하지 않으면 시간과 같은 것이 사용되지만 정확한 재현성을 실제로 원합니다.
이것이 정말로 바람직하지 않은 유일한 RNG는 암호화에 사용되는 RNG이며, 일반적으로 운영 체제 자체의 난수 소스 (일반 상황에서는 되감기 불가능하고 멋진 하드웨어를 사용할 수 있음 )를 사용하여 시드를 제공함으로써이를 달성합니다.