STM32F4XXXX MCU의 RNG (Random Number Generator) 주변 장치가 궁금합니다. 보면 이 참조 설명서 (페이지 748). 반면에 stdlib 라이브러리에는 동일한 작업을 수행하는 rand () 함수가 있습니다. 이제 두 가지 질문이 있습니다.
- rand () 함수와 RNG (Random Number Generator) 주변 장치의 차이점 (장점 및 단점)은 무엇입니까?
- 이 부분을보십시오 :
이 두 가지 옵션 (특히 두 번째 옵션)에 대해 설명하십시오.
답변
Dave의 대답은 그것을 잘 재개하지만 두 번째 옵션에 대해 조금 더 명확히합니다.
실제 하드웨어 난수 생성기는 물리적 엔트로피 소스를 사용합니다. 그러한 엔트로피 소스는 우주 방사선, 전기 노이즈, 역 바이어스 다이오드 (또는 BJT 트랜지스터), 추아 회로 등으로부터의 아 반란 치 효과 일 수있다. 엔트로피 소스를 결정적이지 않을수록 랜덤 출력의 품질이 우수하다. 이상적인 엔트로피 소스는 양자 물리 효과 또는 결정 론적 방정식으로 모델링 할 수없는 것을 사용하는 것입니다.
난수 생성기의 또 다른 중요한 요소는 엔트로피 소스가 단위 시간당 제한된 양의 엔트로피를 생성 할 수 있다는 것입니다. 좋은 예는 chua 회로입니다.이 회로는 임의적이지만 속도가 매우 낮아 실제 응용 프로그램에 사용할 수 없습니다.
내장 RNG가있는 많은 프로세서 / 마이크로 컨트롤러에서 의도적으로 잘못 동기화 된 2 ~ 4 클럭에서 클럭 드리프트가 사용됩니다. 그런 다음 아날로그 및 디지털 필터를 모두 사용하여 더 많은 패턴을 무작위 화하고 결과를 레지스터로 이동시킵니다. 이러한 필터링을 수행하려면 몇주기가 필요하며, 이는 새로운 값을 사용할 수 있기 전에 주어진 클럭에 필요한 최소주기를 설명합니다.
클럭 드리프트는 양자 효과가 아니기 때문에 모델링 할 수 있지만 온도, 실리콘 프로세스, 작동 주파수, 전기 노이즈, 배경 방사선 등과 같은 많은 매개 변수에 의존하기 때문에 충분히 임의적입니다. .
하드웨어 RNG가 처리량이 충분하지 않은 응용 프로그램 (예 : 매우 까다로운 암호화 응용 프로그램)에서는 하드웨어 RNG를 sdtlib의 rand () 함수와 같은 의사 난수 생성기의 시드로 사용하는 것이 일반적입니다. 그러나 이러한 응용 프로그램은 일반적으로 특별히 매우 자주 폐기 될 수 씨앗에서 실행되도록 설계되어있다 (랜드의 더 나은 구현)를 제공하는 진정한 임의의 값을. 하드웨어 RNG가 통합 된 최신 Intel 프로세서에서는 의사 랜덤 알고리즘 부분이 실리콘에 직접 통합되어 하드웨어에 의해 수행되므로 매우 높은 랜덤 처리량을 생성합니다.
rand () 메소드 자체에 대해 염두에두면 충분히 많은 양의 엔트로피를 생성하도록 설계된 수학적 표현 일뿐입니다. 응용 프로그램에 따라 충분히 큰 암호 키 생성의 경우 무작위성은 좋아하는 음악 플레이어의 간단한 무작위 셔플에 필요한 무작위성보다 높은 품질이어야합니다. 난수 출력의 품질이 높을수록 난수의 계산 비용이 높아집니다.
난수와 관련된 연산은 파일의 MD5 해시를 계산하는 것과 매우 유사합니다. 시드 값의 단일 비트 변경이 전체 생성 패턴을 변경하도록 일종의 비트 눈사태 효과를 사용하려고합니다. 참고로, 의사 난수 생성기로 MD5를 사용하는 것은 권장하지 않습니다. 단지 예일뿐입니다. 비효율적이며 무작위 적이지는 않지만 요점이 있습니다. 동일한 파일을 MD5 보유 알고리즘에 공급하면 항상 동일한 결정적 출력을 얻을 수 있습니다. 구현이 현재 시간과 같은 임의의 요소에 의존하지 않는 한 동일한 시드를 입력하면 rand () 함수
답변
중요한 차이점은 rand()
라이브러리 함수가 의사 난수 생성기라는 것입니다. 특정 시작 (시드) 값이 주어지면 항상 동일한 수의 시퀀스를 생성합니다.
반면 RNG 주변 장치는 실제 난수 생성기이며 반복 불가능한 숫자 시퀀스를 생성합니다.
답변
두 가지 주제를 비교적 쉽게 설명 할 수 있습니다.
- 1 : 40 클록주기마다 한 번 이상 임의의 숫자를 빠르게 생성 할 수 없으므로 48MHz / 40 = ~ 1M Sample / s
- 2 : 하드웨어에는 생성 된 모든 숫자에 이상한 동작이 있는지 확인하는 모니터가 있습니다. 예를 들어 온도를 소스로 사용하고 온도 환경이 매우 안정적인 경우 RNG가 동일한 수의 시퀀스를 다시 생성 할 수 있습니다 (같은 시드 값으로 시작하면 의사 난수 생성기처럼) . 구성 요소는이를 모니터링하고 RNG가 예상대로 작동하는 경우 신호를 제공합니다. 숫자가 “실제로”무작위 여야하는 경우이 플래그를 모니터하여 실제로 있는지 확인하십시오. 이 작업이 정확히 수행되고 RNG가 실제로 작동하는 방식은 나머지 텍스트에 나와 있습니다.
답변
일정 시간 동안 모터에 에너지를 공급하고 휠과 볼이 멈출 때까지 기다렸다가 볼이 들어있는 포켓을 관찰하는 기계식 룰렛 휠 스피너를 설계한다고 가정합니다. 일반적으로 각 스핀 후에 볼과 휠은 약간 다른 위치에있게되고, 한 스핀 후 볼 위치의 작은 변화는 다음 스핀에서 끝나는 위치에 큰 차이를 만들 수 있습니다. 따라서 모터가 항상 같은 길이 동안 통전 되더라도 볼이 한 스핀에 도달하는 포켓은 이전에 스핀이 도달 한 위치와 무관합니다.
그러나 이제 몇 개의 숫자가 약간의 함몰이 있거나 모터 베어링이 평평한 지점을 생성한다고 가정 해 봅시다. 그런 다음 일부 스핀은 임의적이지만 스핀 후 볼이 오목하게 떨어지고 평평한 지점에 베어링이 놓인 후에는 다음 스핀이 마지막 스핀과 동일한 결과를 갖도록 편향 될 수 있습니다. 대부분의 스핀이 디봇과 플랫 스팟에 동시에 맞지 않으면 그 존재는 사물에 큰 영향을 미치지 않을 것입니다. 다른 한편으로, 하나의 디봇 / 플랫 콤보가 바로 오른쪽에 배치되어 볼이 합당하게 일정하게 떨어지면 볼이 다시 볼을 보내도록 배치됩니다. 극도로 치우친 행동으로 끝납니다.
4와 23에 착륙 한 후 다음 스핀이 4 인 경우 반드시 문제가되는 것은 아닙니다. 이 상황에서 4의 약 1/38이 나타납니다. 또한, 임의의 데이터의 획득은 단지 포켓 번호를 포착해야한다. 왜냐하면 공이 포켓의 다양한 부분에 얼마나 자주 놓여 야하는지에 대한 유용한 것은 없기 때문이다. 그럼에도 불구하고, 숫자를 기록하는 모든 것이 주머니에서 공이 멈추는 곳을 “관찰”하고 비정상적인 패턴을 관찰하는 데 유용 할 수 있습니다. 위치 분포는 문제를 나타내지 않고 앞이나 뒤로 기울어 질 수 있지만 분포에 폭이 좁아 우려 할 수 있습니다.
랜덤 발생기의 연속 판독 값이 통계적으로 독립적 인 경우 , 바이어스 보상은 어렵지 않습니다 (필요한 시간은 결정적이지 않지만). 그러나 발전기가 판독 값이 독립적이지 않은 상태 (예 : 위 휠의 순환 상태)에 속하면 보상이 기본적으로 불가능 해 지므로 하드웨어 RNG가 이러한 동작을 감지하기 위해 회로를 포함해야합니다.