랜덤 생성기를 만드는 방법
On 2월 10, 2021 by admin무작위 생성기는 어떻게 구현할 수 있습니까?
나는 언어 호출에 대해 말하는 것이 아닙니다. mathRandom () 메소드이지만 완전히 무작위로 숫자를 생성하는 루틴 구현
댓글
- I ' 진정한 임의성은 현재 불가능하다고 말하고자합니다.
- @Dynamic 같은 생각이지만 항상 그렇습니다. 필요할 때 임의 함수를 호출했지만 ' 무작위 메서드를 구현해야하는 방법에 대해 생각하지 못했습니다.
- " 완전 무작위 "는 매우 깊은 래빗 홀입니다.
- @Dynamic : 실제로 무작위 데이터와 구별 할 수없는 시퀀스를 얻는 것은 실제로 간단합니다. 하드웨어 지원으로 외부 세계를 살펴보십시오. 원자 및 아 원자 물리학 (원자 붕괴, 광자 타격 센서 유형 이벤트)은 f 현재 과학 이론) 정말 무작위적이고 측정하기 쉽습니다. 대규모의 열역학은 너무 혼란스러워서 마이크로 스케일 등의 매크로 시스템에서 검사 할 때 무작위로 간주 할 수 있습니다. 디지털 카메라 센서의 소음이 좋은 예입니다 …..
답변
진정한 난수의 핵심은 임의의 데이터 소스입니다. 때때로 이것은 키보드 이벤트 또는 네트워크 이벤트의 지연과 같은 정보입니다. 고품질의 임의 데이터가 필요한 경우 방사성 붕괴 일 수 있습니다. SGI는 lavarand 를 구현하여 디지털화 된 용암 램프 이미지에서 난수 생성기의 시드를 추출했습니다. 이것은 난수 생성기로 간주하기에 충분했습니다.
진정한 무작위 데이터 외에는 결정적이지만 혼란스러운 시스템으로 작업 할 수 있습니다. 예를 들어 메르 센 트위스터 입니다. 이러한 상황에서는 생성기에 숫자를 시드 한 다음이를 앞으로 실행하여 의사 난수를 얻습니다. 이는 “누군가 시드 (및 시퀀스의 다음 번호)를 결정할 수 있는지 여부가 중요하지 않은 게임 등에 충분합니다.
특허 5,732,138 및 http://www.lavarnd.org/ 는 번호를 만드는 방법에 대한 구현 세부 정보를 참조하세요.
댓글
- +1 씨앗에 대한 날씨 측정과 같은 다양한 데이터 소스를 고려합니다. wiki.cdyne .com /? title = CDYNE_Weather
- @ emeraldcode.com 날씨 측정의 문제는 완전히 무작위가 아니라는 것입니다. 날씨 예측에 대한 전체 필드가 있습니다. 그 때 온도가 올라가는 경향이 있습니다. 겨울은 여름보다 춥습니다. hotbits 시스템은 예측할 수없는 두 개의 붕괴 이벤트 (이벤트 1에서 이벤트 2까지의 시간 및 이벤트 3에서 이벤트 4까지의 시간 측정-1 인 경우)를 무작위로 사용합니다. : 2 == 3 : 4, 데이터를 버립니다. 1 : 2 인 경우 3 : 4, 임의 비트는 0입니다. 1 : 2 > 3 : 4 인 경우 임의 비트는 1입니다.
- 저는 ' 풍속, 기압, 온도, 습도 등에 대해 이야기하고 있습니다. 측정 샘플을 가져 와서 무작위성에 대해 논쟁하는 데 어려움을 겪을 수 있습니다. 또한 충분한 정확도로 취한 온도만으로는 매우 임의적입니다.
답변
어떤 종류의 무작위로 말하고 있습니까? about?
수학적 의미에서 무작위로 정의 하는 두 가지 주요 속성이 있습니다. 첫 번째 속성은 예측 불가능 두 번째는 균일 분포 입니다.
첫째, 소프트웨어 내에서 완전히 생성하는 것이 일반적으로 거의 불가능합니다. 휴먼 인터페이스 장치에서 엔트로피를 수집하는 것과 같은 몇 가지 방법이 있습니다. Linux에서는 /dev/random
이지만 유용하기 위해 상당히 낮은 수준의 엔트로피를 생성합니다. 다른 사람들은 이미 일부 하드웨어 구현을 지적했습니다. 그것들은 모두 물리학 이론에 깊이 뿌리를두고 있습니다 (광자가 탐지기에 부딪 힐 정확한 순간이 정말로 무작위 적이라는 우리의 믿음처럼). 이를위한 소프트웨어 알고리즘 (예 : Blum-Blum-Shub )이 있습니다. 일반적으로 예측 불가능 성이 필요한 경우 PRNG를 작성하지 마세요 대신 확립 된 것을 사용합니다 . 이것은 특히 암호화와 관련이 있습니다.
임의 함수의 다른 중요한 속성은 실제로 만족하기가 매우 쉽습니다. 많은 예가 있습니다. 이 중 RC4 , 선형 피드백 시프트 레지스터 뒤에있는 RNG (실제로 사용 된 암호화의 경우도 예전이지만 충분히 안전하지 않은 것으로 밝혀졌습니다) 등.표준 C 라이브러리 rand()
조차도 이러한 목적으로 잘 작동 할 것입니다.
가장 중요한 사항 : 두 가지 속성 중 어떤 것이 기본적으로 필요한지 알고 있어야합니다. 예측 불가능 PRNG도 균일하게 배포되지만 그 반대는 사실이 아닙니다. 또한 어떤 종류의 “엔진”(예 : 게임 엔진) 내부의 임의성을 노출하는 경우 시스템이 실제로 얼마나 쉬운 지 놀라 울 수 있으므로 사람들이 시스템을 게임 할 수 없도록하십시오. 예를 들어, CSS (DVD 암호화 알고리즘)는 암호화 목적으로 2 개의 LSFR을 사용했으며 매우 쉽게 손상되었습니다.
답변
첫 번째 , 소프트웨어에서 진정한 난수를 생성 할 수 없습니다. 의사 난수를 생성 할 수있는 수많은 알고리즘이 있습니다. 의사 난수가 필요한 이유에 따라 (즉, 암호화에서이를 사용하는 경우 요구 사항이 많습니다. 다름) 일반적으로 GNU 과학 라이브러리 의 난수 생성기와 같은 것을 사용합니다 (물론 원하는 언어로 구현할 수 있음).
답변
하드웨어. 어디서든 엔트로피를 수집 할 수있는 하드웨어에 연결해야합니다. 라디오, 라바 램프에 웹 카메라를 올려 놓거나 사용자가 횡설수설을 입력하거나 마우스로 놀게합니다. 현실 세계와의 접촉없이 진정한 임의성을 생성하는 것은 불가능합니다. 중요한 영역입니다. f 연구, 많은 작업이 투입되었습니다. 나는 당신이 “어떤 새로운 길을 타 오르고 있을지 의심 스럽습니다. 그래서 당신은 정말로 거인의 어깨에 서서 위키피디아 항목을 읽기 시작해야합니다.
“난수 생성은 남겨두기에는 너무 중요합니다. 기회. “
-Robert R. Coveyou
수정
그래서 저는 원하는 하드웨어가 사실 단지 CMOS 칩 이라는 사실을 알게되었습니다. 저렴한 카메라의 종류. 어둠 속에 보관하고 감도를 높이면 분명히 관찰되는 미세한 차이는 실제 생활에서 엔트로피를 유도하는 양자 역학에 뿌리를두고 있습니다.
답변
LOOOOONG 시간 전에 제가 본 마지막으로 의사 난수 생성기 (PRNG )는 Knuth, Vol. 2, “Seminumerical Algorithms”.
적어도 Knuth를 살펴볼 때까지 자신의 PRNG를 구현하려고 시도하지 마십시오.
답글 남기기