안녕하세요?


지난번 '의사난수'라는 것을 언급 했을 때만 해도 컴퓨터가 직접 주사위를 굴려야 진정한 난수를 만드는가 하는 생각이 들었는데, 어떠한 규칙도 없는 물리현상을 이용해서 이미 난수를 생성하는 방법이 있다는 것을 들어서, 이번 포스팅에서는 관련된 내용을 포스팅 하고자 합니다.


링크: 컴퓨터가 랜덤(random)한 수를 만드는 방법



먼저 대중화(?)라기 보다는 서버 컴퓨터와 같이 고성능 컴퓨터에서 실제로 상요이 되는 방법이 있습니다. 바로 열잡음을 가지고서 난수를 만드는 방법이 있는데, 우선 아무리 컴퓨터의 회로에 일정한 전압을 걸어 준다고 해도 미세한 노이즈가 발생하는데, 이는 회로에 흐르는 전압을 측정해 보면 알 수 있습니다.




이 노이즈(열잡음)에서는 어떠한 규칙도 없기 때문에 트정한 시점에서 지점까지의 노이즈 값을 0과 1의 2진수로 변환하고 이를 난수로서 계산을 하면 진짜로 아무런 규칙이 없는 순수한 난수라고 해야 할까요? 결국 '의사 난수'와는 비교가 되지 않는 '진짜 난수'를 얻을 수 있는 것 입니다.



인터넷을 검색해도 저런 방식으로 난수를 생성해 주는 보드에 대한 정보를 얻을 수 없었습니다. 단지 TOSHIBA의 RANDOM MASTER라는 보드가 1초에 640MB의 난수를 출력할 수 있다는 정보만을 겨우 얻을 수가 있었습니다. 다만 이 도시바사의 난수생성 보드역시 '아날로그 신호'인 노이즈를 '디지털 신호'인 0과1로 변환하는 과정에서 미약하게 나마 규칙성이 나타나는데. 이를 제거하는 방법은 거의 기업의 '기밀'일 것으로 추정이 됩니다.



다른 방식으로는 '광자'를 이용한 방식이 있습니다. 이 방식에서는 '반투명 거울(half mirror)'라는 장치를 이용해서 50%의 확률로 빛이 직진해서 센서 1에 들어가면 0, 남은 50%의 확률로 빛이 굴절해서 센서2에 들어가면 1이 출력되는 식으로 2진수의 난수를 구할 수 있습니다.




다만, 이 물리난수 발생 방법도 저 '반투명 거울(half mirror)'가 진짜로 50% 확률로 반사와 투과를 시키는 지 여부가 가장 큰 문제라는 생각이 듭니다. 실제로는 저 사이에 생성된 이물질이나 여러가지 이유로 정확하게 50%가 되지 않아서 어떤 문제를 일으킬 가능성이 있을 수 있겠다는 생각이 듭니다.



다른 물리 난수를 발생시키는 방법은 바로 전자의 스핀을 관측해서, 스핀이 윗 방향이면 0, 아랫방향이면 1을 만들게 해서 2진수의 난수를 얻는 방식인데, 이 방법은 거의 양자 컴퓨터를 만드는 방법과 유사합니다. 즉, 실제로 성공만 하면 정말 강력한 난수 발생장치가 되겠지만, 양자 컴퓨터의 개발이 얼마나 어려운 지를 생각해 보면, 현실적으로 개발하기에는 아직도 먼 이야기가 아닌가 합니다.

+ Recent posts

티스토리 툴바