난수 생성기는 어떻게 작동하는가?
우리가 스마트폰 게임에서 아이템을 뽑거나, 로또 번호를 자동으로 생성할 때, 그 뒤에는 어김없이 '난수 생성기(Random Number Generator)'가 작동하고 있습니다. 어떻게 컴퓨터는 예측 불가능해 보이는 숫자를 만들어낼 수 있을까요? 난수 생성기는 크게 '의사난수 생성기'와 '진성난수 생성기' 두 종류로 나뉩니다.
결정론적 세계의 무작위성: 의사난수 생성기 (PRNG)
우리가 일상적으로 접하는 대부분의 난수는 사실 '진짜' 난수가 아닌 '의사(pseudo)난수'입니다. '의사'라는 말이 붙는 이유는, 이 숫자들이 정해진 규칙과 알고리즘에 따라 생성되기 때문입니다. 즉, 시작 값(seed)과 알고리즘을 알면 다음에 나올 숫자를 예측할 수 있습니다.
가장 고전적이고 유명한 의사난수 생성 알고리즘 중 하나는 '선형 합동 생성기(Linear Congruential Generator, LCG)'입니다. 작동 방식은 매우 간단합니다.
- 초기값(seed) 설정: 수열을 시작할 첫 번째 숫자를 정합니다. 보통 현재 시간이나 사용자의 마우스 움직임 같은 예측하기 어려운 값을 사용합니다.
- 수학 공식 적용: 이전 숫자에 큰 수를 곱하고(a), 다른 숫자를 더한(c) 뒤, 또 다른 큰 수(m)로 나눈 나머지를 구합니다. (
다음숫자 = (a * 이전숫자 + c) % m) - 반복: 이렇게 얻은 '다음숫자'를 새로운 '이전숫자'로 사용하여 2번 과정을 반복합니다.
이 과정을 거치면 통계적으로는 무작위처럼 보이는 긴 숫자들의 배열을 얻을 수 있습니다. LCG는 매우 빠르고 간단해서 많은 곳에 사용되지만, 주기가 짧고 패턴이 예측될 수 있다는 단점이 있어, 더 복잡하고 정교한 '메르센 트위스터(Mersenne Twister)'와 같은 다른 알고리즘들이 현대에는 더 널리 쓰입니다. 의사난수는 과학 시뮬레이션, 게임, 통계 모델링 등 재현 가능성이 필요한 분야에 매우 유용합니다.
자연의 불확실성을 담다: 진성난수 생성기 (TRNG)
반면, 암호학이나 매우 높은 수준의 보안이 요구되는 분야에서는 예측이 원천적으로 불가능한 '진짜' 난수가 필요합니다. 이를 위해 '진성난수 생성기(True Random Number Generator)'는 우리 주변의 물리적 현상을 이용합니다.
진성난수 생성기는 다음과 같은 예측 불가능한 현상들을 측정하여 난수를 만듭니다.
- 대기 소음(Atmospheric Noise): 특정 주파수에서 발생하는 라디오 노이즈는 완전히 무작위적입니다.
- 방사성 동위원소 붕괴: 원자핵이 언제 붕괴할지는 양자역학적으로 예측이 불가능합니다.
- 광자(Photon)의 움직임: 반투명 거울에 광자를 쏘았을 때, 광자가 거울을 통과할지 반사될지는 무작위적입니다.
- 컴퓨터 내부의 미세한 노이즈: CPU 팬의 소음, 하드디스크의 미세한 진동, 사용자의 정확한 마우스 움직임 시간 등도 소스로 활용될 수 있습니다.
이러한 물리적 현상에서 얻은 아날로그 신호를 디지털 데이터로 변환하여, 누구도 예측할 수 없는 순수한 무작위 수열을 만들어내는 것입니다. 진성난수는 생성 과정이 복잡하고 느리지만, 그 예측 불가능성 덕분에 우리 디지털 사회의 보안을 지키는 핵심적인 역할을 담당합니다.