GPIO 핀을 사용하는 난수 생성기?


22

방금 AVR Random Number Generator 질문을 읽고 AVR 에서 임의 시드를 생성하는 여러 가지 방법이 있습니다.

  • 특수한 "보안 AVR"을 사용하십시오.
  • 내부 온도 센서 사용
  • 쓰지 않은 EEPROM 읽기
  • 사용자 입력 사이의 시간 간격 측정
  • 플로팅 ADC 핀을 사용하십시오.

풀업 및 플로팅없이 입력으로 구성된 단일 디지털 핀이 아닌 이유는 무엇입니까? 이론적으로는 임의의 비트 스트림을 생성해야합니다. 왜 이것을 사용하지 않습니까? 상태가 너무 느리게 변합니까? 1 또는 0에 붙어 경향이 있습니까? 다른 문제가 있습니까?


1
안전 AVR 죽은 AFAIK입니다
vicatcu

1
기록되지 않은 eeprom이 항상 0xFF가 아닙니까?
vsz December

@vsz, 아마도 당신이 그것에 무언가를 쓰고 당신이 쓴 것을 잊어 버리면, 그것은 이제 "무작위"입니다. lol.
Vorac

답변:


5

"임의"는 까다로운 단어입니다. 일부 상황에서는 단순히 "예측할 수 없음"을 의미하지만 다른 상황, 특히 신호 처리 및 암호화와 관련된 상황에서는 "통계적으로 상관되지 않음"을 의미합니다.

플로팅 핀에서 읽은 값을 예측할 수 없더라도 (첫 번째 의미에서 "임의") 두 번째 의미에서는 유용하지 않을 수 있습니다.


15

디지털 입력과 아날로그 입력의 차이점은 아날로그에서 시드 값의 범위가 더 크다는 것입니다.

둘째, 그러나 아마도 더 중요한 것은 : 디지털 핀의 부동 "중간 값"값이 로직 감지 레벨 (전력 및 접지 레일 레벨이 아니라 입력 회로의 스위칭 임계 값) 사이의 중간에 정확하게 있지 않은 경우 결과 비트 스트림은 이 바이어스는 시드를 아날로그 레벨의 스큐보다 훨씬 강하게 왜곡합니다.

근처의 트레이스 나 신호, 또는 의도적이든 우발적이든 저항성 풀업 / 풀다운을 통해 커플 링이 거의 필요하지 않습니다. "부동"디지털 핀을 플로팅으로 밀어 넣는 경우에도 발생할 수 있습니다. 전개. 모든 설계를 엔지니어링 할 때 이러한 형태의 장애 모드를 피하는 것이 가장 좋습니다.


14

부동 입력이 정의되지 않았습니다. 임의의 비트를 줄 수도 있지만 0 또는 1에서 멈추는 경향이 있습니다. 대부분의 경우 멈추게됩니다. 실제로 부동 상태 인 경우 시스템 소음과 전력 소비가 증가 할 수 있습니다. 플로팅 입력은 일반적으로 입력을 사용하지 않는 경우에도 좋지 않습니다.


입력 버퍼의 첫 번째 단계를 구성하는 두 개의 트랜지스터가 완벽하게 균형을 이루거나 외부 전류 소스가 존재 하지 않으면 입력 플로팅되지 않는 한 입력 플로팅됩니다 결국 1까지 또는 0까지 내려갑니다.
wjl

9

가장 간단한 해결책은 잘못 사용 된 오픈 콜렉터 트랜지스터 회로에서 하드웨어 랜덤 신호 발생기 회로를 구축하는 것입니다. 비트 스트림 출력을 마이크로 컨트롤러의 입력에 사용하십시오. 들어오는 비트를 주기적으로 샘플링하십시오. 대략 1과 0의 수를 균일하게 유지하려면 상태 변경을 1로 사용하고 변경을 0으로 사용하지 마십시오. 자세한 정보는 트랜지스터 노이즈 발생 기용 Google을 참조하십시오.


흥미 롭군 "오용 된 오픈 컬렉터 트랜지스터 회로"는 어떤 모습입니까?
Stephen Collings

7
@Remiel-트랜지스터의 기본 이미 터 접합을 역 바이어스하고 실제로 엉터리 제너처럼 작동합니다. 매우 시끄러운 제너를 취하고 잡음을 증폭하여 임의의 비트 스트림을 얻습니다. 참조 robseward.com/misc/RNG2
코너 늑대

3

많은 마이크로 컨트롤러에서 사용할 수있는 하나의 랜덤 생성기는 두 클럭 소스 (아마 내부 및 외부) 사이의 오류입니다. 그것들을 비교할 때, 소음으로 인해 약간 표류하며 사용할 수 있습니다.

결국 그것은 당신이 필요로하는 것에 달려 있습니까? 약간의 무작위 화와 아무 것도 연결되지 않은 ADC 핀을 사용할 수도 있습니다. 아니면 그냥 같은 알고리즘을 사용하십시오

메르 센 트위스터 http://en.wikipedia.org/wiki/Mersenne_twister

이것이 암호화 적으로 안전하지만 대부분의 목적에 충분하다면 그렇지 않습니다.


즉,이 기술을 지원하지 않습니다 내 지식 AVR 클럭 시스템에 참조 된 이전 문제의 MSP430 애플리케이션 노트에서 찍은 접근 방식
vicatcu

옳은. 직접 지원되지 않더라도 동일한 클럭 소스로 수행 할 수 있습니다.
구스타보 리 토프 스키

3

랜덤 시드의 품질과 알고리즘은 각 랜덤 비트의 엔트로피 또는 불확실성에 의해 결정됩니다. 그런 다음 최고의 시드 생성기는 여러 단계의 낮은 엔트로피가 아니라 아주 적은 단계로 높은 엔트로피를 사용합니다.

높은 엔트로피의 좋은 예 는 임의의 시드에 Latin Squares 방법을 사용합니다 .

플로팅 입력은 결함, 누설 또는 유입 노이즈에 의해 쉽게 바이어스됩니다.


0

PIC18F 마이크로 프로세서에서는 난수에 대한 시드가 필요합니다. 시드는 0에서 32767 (15 비트)까지 가능합니다. 프로그램 시작시 핀과 아날로그 입력 핀 중 하나를 만들 것을 제안합니다. 이 핀을 읽고 최하위 비트를 가져 와서 16 비트 변수에 넣으십시오. 그런 다음 변수를 왼쪽으로 1만큼 시프트하십시오. 핀을 다시 읽고 ADC 결과의 LSB를 마지막 비트를 저장 한 변수의 첫 번째 비트에 넣으십시오. 다시 왼쪽으로 시프트하십시오 .....

변수에 15 비트가 될 때까지이 과정을 반복하십시오. 이것은 씨앗에 넣어야 할 숫자입니다.

이 작업을 수행 한 후에는 아날로그 입력 핀을 디지털 입력 핀으로 만들고 약하게 풀업하거나 디지털 출력 핀으로 만들 수 있습니다. 어느 쪽이든이 핀이 떠 다니는 것을 막을 것입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.