난수(random number) 는 예측할 수 없는 과정을 통해 만들어진 값입니다. 즉 주사위나 열 잡음 같은 물리적 현상에서 나오거나, 무작위를 모방하는 컴퓨터 알고리즘에서 생성됩니다. 진정한 난수 생성기(TRNG, True Random Number Generator)와 의사난수 생성기(PRNG, Pseudorandom Number Generator) 간의 결정적인 차이가 여러분의 앱이 실제로 안전한지, 아니면 그저 무작위처럼 보이기만 하는지를 좌우합니다. 추첨을 위한 빠른 선택이든 암호학적으로 안전한 키든 상관없이, 신뢰할 수 있는 난수 생성기를 사용하는 것이 큰 차이를 만듭니다. 이 가이드는 기본 개념, 잘못 선택했을 때의 실제 위험, 그리고 2026년 현재 여러분의 상황에 맞는 생성기를 고르는 방법을 다룹니다.
난수란 정확히 무엇인가요? (그리고 왜 중요할까요?)
난수는 그 값 자체로 정의되는 것이 아니라, 출처가 얼마나 예측 불가능한지로 정의됩니다. 주사위를 굴릴 때 결과가 무작위인 이유는, 주사위가 굴러 표면에 부딪히고 공기 저항을 받는 물리적 과정이 너무 복잡해서 정확히 모델링할 수 없기 때문입니다. 컴퓨팅에서 무작위성은 정보이론에서 비롯된 용어인 엔트로피(entropy) 로 측정되며, 이는 예측 불가능성을 정량화합니다. 출처의 엔트로피가 높을수록 다음 숫자를 추측하기 어렵습니다.
일상적인 무작위성에 대한 개념은 컴퓨팅에서의 개념과 자주 다릅니다. “1 2 3 4 5” 같은 수열은 사람에게는 비무작위적으로 보이지만, 위키백과의 난수 문서에서 말하듯이 “우리는 첫 번째 수열이 무작위가 아니라고 확신 있게 말할 수 없습니다 … 우연히 생성되었을 수도 있습니다.” 핵심 속성은 수열의 각 숫자가 다른 숫자들과 독립적이며, 이전 출력값으로부터 예측할 수 없다는 점입니다.
생성기는 크게 두 부류로 나뉩니다.
– 진정한 난수 생성기(TRNG, True Random Number Generators) – 하드웨어 난수 생성기(HRNG)라고도 불리며 – 본질적으로 예측 불가능한 물리적 현상에서 숫자를 끌어옵니다.
– 의사난수 생성기(PRNG, Pseudorandom Number Generators) – 결정론적인 수학 알고리즘을 사용합니다. 무작위처럼 보이지만 초기 상태(시드)를 알면 완전히 재현할 수 있습니다.
이 구분을 정확히 이해하는 것이 애플리케이션을 안전하게 유지하는 첫걸음입니다. 숫자를 넘어서는 다양한 종류의 무작위화 도구를 더 폭넓게 살펴보려면, 저희의 종합적인 숫자 난수 생성기 가이드를 확인해 보세요.

핵심 문제: 컴퓨터는 왜 ‘진정으로’ 무작위일 수 없는가
컴퓨터는 결정론적인 기계입니다. 모든 명령은 고정된 순서를 따릅니다. 난수를 생성하려면 외부 엔트로피 원천이나 무작위성을 시뮬레이션하는 알고리즘에 의존해야 합니다. 수학자 존 폰 노이만(John von Neumann)은 1951년에 이렇게 유명하게 말했습니다. “난수를 산술적 방법으로 만들어내겠다고 생각하는 사람은, 당연히도 죄를 짓고 있는 중이다.”
이 인용문은 위키백과의 난수 생성 문서에 보존되어 있으며, 근본적인 진실을 담고 있습니다. 산술(알고리즘) 방법은 결코 진정으로 예측 불가능한 숫자를 만들어낼 수 없습니다. 통계적 검사에 보기에 무작위인 수열만 생성할 수 있을 뿐입니다. 진정한 예측 불가능성을 얻을 수 있는 유일한 방법은 물리적 세계에서 엔트로피를 수집하는 것입니다. 저항기의 열 잡음, 대기 잡음, 방사성 붕괴, 심지어 라바 램프의 혼돈스러운 패턴까지 포함됩니다.
진정한 난수 생성기(TRNG) vs 의사난수 생성기(PRNG): 결정적 차이
핵심 차이는 예측 불가능성의 원천으로 귀결됩니다.
| 특징 | TRNG (진정한 RNG) | PRNG (의사 RNG) |
|---|---|---|
| 원천 | 물리적 엔트로피(열 잡음, 양자 효과 등) | 수학적 알고리즘 |
| 결정론적? | 아니오 – 각 출력값은 물리적 과정에 의존 | 예 – 같은 시드는 항상 같은 수열 생성 |
| 재현 가능? | 아니오 | 예(시드를 알 경우) |
| 속도 | 보통 더 느리고 엔트로피 수집에 의해 속도 제한 | 매우 빠름 |
| 블로킹? | 엔트로피 풀이 고갈되면 블록될 수 있음 | 블로킹 없음 |
| 용도 | 암호학, 보안 키, 복권 | 시뮬레이션, 게임, 비보안 애플리케이션 |
TRNG는 물리적 현상을 직접 측정합니다. 일반적인 원천으로는 저항기의 열 잡음, 전자 회로의 지터, 반도체의 샷 잡음, 광전 효과 같은 양자 현상 등이 있습니다. 실용적인 TRNG는 보통 잡음 원천, 디지타이저, 품질을 개선하는 컨디셔너(무작위성 추출기), 그리고 원천이 여전히 정상 작동하는지 확인하기 위한 헬스 테스트를 포함합니다.
PRNG는 난수 시드(보통 TRNG에서 가져옴)라는 초기값에서 시작해 다음 숫자를 생성하기 위해 수학적 변환을 반복적으로 적용합니다. 수열은 결정론적이라 시드를 알면 정확히 같은 숫자를 다시 재생할 수 있습니다. 이 재현 가능성은 시뮬레이션 디버깅에 훌륭하지만, 공격자가 시드를 발견하거나 추측할 수 있다면 보안에는 치명적입니다.
세 번째 부류인 암호학적으로 안전한 의사난수 생성기(CSPRNG) 는 두 세계의 장점을 결합합니다. TRNG를 사용해 높은 엔트로피의 시드를 얻은 다음, 정교하게 설계된 알고리즘으로 진정한 무작위성과 계산적으로 구별할 수 없는 무한한 숫자 스트림을 생성합니다. 표준 암호학 설계는 위키백과 문서에 설명된 대로 이 하이브리드 방식을 채택합니다.
TRNG는 어떻게 진정한 예측 불가능성을 만들어내는가
진정한 RNG는 물리적 환경에서 무작위성을 포착합니다. 유명한 사례 하나는 Cloudflare가 사용하는 것입니다. 샌프란시스코 사무실에 있는 라바 램프 벽입니다. Cloudflare 블로그 글(2017)에서 설명하듯이, 라바 램프 안의 끊임없이 변하는 예측 불가능한 패턴을 촬영하고 해시하여 높은 엔트로피의 난수를 만들어냅니다. 라바 램프는 참신한 접근이지만, 대부분의 TRNG는 역바이어스 다이오드의 열 잡음처럼 더 컴팩트한 원천을 사용합니다.
또 다른 최근 취미 프로젝트로 Joshua Coleman의 네온 엔트로피 난수 생성기(2026년 5월)는 빈티지 네온 램프 세 개를 사용합니다. 에너지가 가해진 네온 램프의 방전 속도는 예측 불가능하게 변하고, 광학 센서가 이 변화를 포착합니다. 라즈베리 파이 피코 W(Raspberry Pi Pico W)가 아날로그 신호를 읽어 난수 시드로 사용할 수 있는 SHA-256 64비트 값을 생성합니다. 제작자는 이 시스템이 “잘 특성화되지 않았다(ill-characterized)”고 인정하며 검증이 필요하다고 말하지만, 물리적 과정에서 엔트로피를 추출하는 원리를 잘 보여줍니다.
PRNG가 왜 컴퓨팅의 일꾼인가
PRNG는 빠르고, 재현 가능하며, 구현이 쉽기 때문에 어디에나 있습니다. 위키백과 문서는 PRNG가 “시뮬레이션(예: 몬테카를로 방법), 전자 게임(예: 절차적 생성), 암호학 같은 애플리케이션에서 핵심적”이라고 언급합니다. 시뮬레이션에서 같은 시드로 시작해 동일한 난수 수열을 다시 실행할 수 있는 것은 디버깅에 결정적입니다. 암호학에서 PRNG는 시드가 비밀로 유지되는 한 안전할 수 있습니다.
가장 널리 쓰이는 범용 PRNG는 메르센 트위스터(Mersenne Twister, MT19937) 로, 뛰어난 통계적 특성과 긴 주기(2^19937 − 1)로 유명합니다. 많은 프로그래밍 언어(Python, Ruby, PHP)가 비암호학적 목적의 기본 난수 생성기로 메르센 트위스터를 사용합니다. 하지만 메르센 트위스터는 암호학적으로 안전하지 않습니다. 공격자는 연속된 출력값 약 624개를 보면 내부 상태를 재구성할 수 있습니다. 보안과 관련된 모든 것에는 CSPRNG가 필요합니다. 특정 언어로 빌드하고 있다면 Python 난수 생성기, Java 난수 생성기, C++ 난수 생성기 같은 도구가 각 플랫폼별 올바른 접근법을 안내합니다.
실제 사례: 난수가 실패할 때 (복권 조작 사건)
약한 난수 생성기의 결과는 재앙이 될 수 있습니다. 가장 극적인 사례는 위키백과 문서에 설명된 미국 복권 조작 사건입니다. 다중주 복권 협회(MUSL, Multi-State Lottery Association)의 정보보안 책임자가 정기 점검 중 보안 RNG 컴퓨터에 백도어 악성코드를 몰래 설치했습니다. 그는 수년에 걸쳐 복권 번호를 예측해 총 1,650만 달러($16.5 million) 를 받았습니다. 이 공격은 백도어 때문에 RNG가 사실상 예측 가능했기에 성공했으며, 이는 손상되거나 약한 생성기에 의존하는 전형적인 실패 사례입니다.
악의적인 백도어가 없더라도 결함 있는 무작위성은 광범위한 피해를 입힐 수 있습니다. 위키백과의 난수 문서는 2012년 온라인 암호화 방식에서 100%가 아닌 99.8%의 무작위성 결함이 한 대형 서비스의 약 27,000명의 고객에게 부정적 영향을 미친 사건을 인용합니다. 이러한 결함은 진정한 무작위성으로부터의 작은 편차조차 큰 결과를 초래할 수 있음을 보여줍니다.
또 다른 유명 사례는 Dual EC DRBG 백도어입니다. 이 NIST 인증을 받은 암호학적으로 안전한 의사난수 생성기는 NSA가 삽입한 백도어를 포함하고 있다는 의심을 받았으며, (이론이 맞다면) NSA가 내부 상태를 파악해 그것에 의존하는 암호화를 깰 수 있게 했습니다. 위키백과 문서에서 언급하듯이, Dual EC DRBG는 2013년에 NSA 백도어가 확인되기 오래전부터 “매우 형편없고 백도어가 있을 가능성이 있는 의사난수 생성기”였음에도 보안 회사 RSA Security를 포함해 실제로 상당한 사용을 보았습니다.
가벼운 이야기로, 온라인 난수 도구의 인기는 사람들이 그것에 얼마나 의존하는지 보여줍니다. Wheel of Names에 따르면, 2026년 기준 이 사이트는 462,479,318회의 휠 스핀과 128만 시간(1.28 million hours) 이상의 스핀을 기록했습니다. 이 사이트는 암호학적으로 안전한 함수(crypto.getRandomValues())를 사용해 추첨, 교실 선택, 스트리밍 경품 추첨 등을 진행하는 많은 사용자에게 진정한 예측 불가능성을 보장합니다. 이 규모의 사용량은 난수 생성기가 실패할 때 수백만 명에게 영향을 미친다는 것을 보여줍니다.

2026년 여러분의 용도에 맞는 올바른 난수 생성기 선택 방법
올바른 난수 생성기를 고르는 것은 애플리케이션의 보안, 속도, 재현성 요구사항에 달려 있습니다. 이 결정 프레임워크를 사용하세요.
암호학: CSPRNG의 필수 사용
여러분의 애플리케이션이 암호화 키, 인증 토큰, 세션 ID 또는 다른 보안에 민감한 데이터를 다룬다면, 반드시 암호학적으로 안전한 의사난수 생성기(CSPRNG)를 사용해야 합니다. 이러한 목적으로 절대 Math.random(), random.randint(), 메르센 트위스터를 사용하지 마세요. 예측 가능성의 결과, 즉 금전적 도난, 데이터 유출, 계정 탈취는 너무 심각합니다.
권장 도구:
– 웹 브라우저 : Web Crypto API(crypto.getRandomValues())를 사용하세요. Wheel of Names가 무작위성을 보장하기 위해 사용하는 것입니다.
– Unix/Linux 시스템 : /dev/urandom에서 읽으세요. 하드웨어 엔트로피로 시드된 블로킹 없는 CSPRNG를 제공합니다. (참고: /dev/random은 충분한 엔트로피가 모일 때까지 블록되므로 대량 읽기에는 권장되지 않습니다.)
– Windows : CryptGenRandom() 또는 RNGCryptoServiceProvider를 사용하세요.
– 인텔 프로세서 : RDRAND 명령어는 온칩 하드웨어 생성기에서 난수를 반환하지만, 많은 보안 민감 시스템은 잠재적 백도어에 대응하기 위해 그 출력을 다른 엔트로피 원천과 섞습니다.

시뮬레이션과 게임: PRNG(예: 메르센 트위스터)의 속도
몬테카를로 시뮬레이션, 과학 컴퓨팅, 비디오 게임, 절차적 콘텐츠 생성에서는 속도와 통계적 품질이 암호학적 보안보다 더 중요합니다. 여기서는 메르센 트위스터(MT19937)나 더 새로운 PCG 계열 같은 빠른 PRNG가 잘 작동합니다. 이 생성기들은 초당 수십억 개의 숫자를 생성하며 대부분의 통계 검사를 통과합니다.
- 재현 가능성 은 핵심 장점입니다. 같은 시드에서 시작하면 같은 수열을 얻으며, 이는 디버깅과 실험 재현에 필수적입니다.
- 주의 : 돈, 신원 또는 접근 제어와 관련된 곳에는 절대 이것을 사용하지 마세요.
복권과 공정성: 하드웨어 기반 엔트로피의 필요성
복권, 경품 추첨, 상품 추첨, 그리고 공정성이 법적 또는 윤리적으로 요구되는 모든 시스템은 하드웨어 기반 엔트로피(TRNG)를 사용하거나, 최소한 물리적 엔트로피로 시드된 잘 설계된 CSPRNG를 사용해야 합니다. 복권 조작 사건은 시드나 소프트웨어가 변조되면 “안전한” RNG조차 손상될 수 있음을 보여줍니다. 대기 잡음(Random.org처럼), 양자 난수 생성기 또는 전용 하드웨어 모듈로부터의 물리적 무작위성이 가장 강력한 예측 불가능성 보장을 제공합니다.
테스트용 임의 전화번호 생성 같은 일상적 작업에는 난수 전화번호 생성기가 암호학적 하드웨어의 복잡함 없이 빠르고 신뢰할 수 있는 결과를 제공합니다.
고위험 애플리케이션의 경우:
– 물리적 원천 : 전용 HRNG(예: 열 잡음이나 양자 광자 방출 기반)을 사용하세요.
– 하이브리드 방식 : 속도를 위해 하드웨어 엔트로피와 CSPRNG를 결합하세요.
– 감사 : 균일성과 독립성에 대해 출력을 정기적으로 테스트하세요(6절 참조).
무작위성의 최신 동향: 최첨단 연구와 도구 (2026 업데이트)
기본적인 TRNG/PRNG 차이는 잘 확립되어 있지만, 최근 연구는 속도, 효율성, 적응성의 경계를 넓히고 있습니다. Scientific Reports 에 발표된 주목할 만한 2026년 연구 하나는 강화학습을 사용해 탐색과 활용을 동적으로 균형 있게 조정하는 하이브리드 메타휴리스틱 알고리즘인 DMARS_WGO(Dual-Mode Adaptive Reinforced Switching Walrus-Gazelle Optimizer) 를 소개합니다.
논문 DMARS_WGO: a deep reinforcement-driven hybrid metaheuristic for intelligent adaptive optimization에 따르면, 이 알고리즘은 CEC2017 스위트의 29개 벤치마크 함수 중 26개에서 1위를, CEC2022의 12개 함수 중 8개에서 1위를 차지했습니다. DMARS_WGO는 주로 최적화 알고리즘(범용 RNG가 아님)이지만, 머신러닝이 무작위 검색 과정의 품질을 어떻게 개선할 수 있는지를 보여줍니다. 이는 시뮬레이션에서 더 나은 무작위성의 직접적 이점입니다.
일상 개발자에게 가장 중요한 2026년 모범 사례는 운영체제 수준의 CSPRNG에 의존하는 것입니다. 현대 CPU에서 사용 가능한 인텔의 RDRAND 명령어는 코드가 직접 접근할 수 있는 하드웨어 기반 난수 생성기를 제공합니다. 리눅스 커널의 /dev/urandom은 이제 빠르고 안전한 ChaCha20 기반 CSPRNG를 사용합니다. Web Crypto API(crypto.getRandomValues())는 클라이언트 측 JavaScript 보안의 표준이 되었습니다.
현대 CPU가 난수를 생성하는 방법 (RDRAND 그 이상)
인텔과 AMD의 최신 프로세서는 RDRAND 명령어를 통해 접근할 수 있는 내장 하드웨어 난수 생성기(HRNG)를 포함합니다. 이 생성기는 금속-산화물-반도체(MOS) 트랜지스터의 열 잡음 같은 온칩 엔트로피 원천을 사용해 무작위 비트를 생성합니다. 초당 수천 개의 난수를 제공할 수 있습니다.
하지만 하드웨어는 이론적으로 변조될 수 있기 때문에(Dual EC DRBG 사례가 보여주듯이), 많은 보안 민감 애플리케이션은 RDRAND만 단독으로 사용하지 않습니다. 위키백과 문서는 “리눅스에서 난수 생성 시 인텔의 RDRAND 하드웨어 RNG 출력을 다른 엔트로피 원천과 섞지 않고 사용하는 것은 용납할 수 없는 것으로 간주된다”고 언급합니다. “화이트닝(whitening)”이라 불리는 이 관행은 숨겨진 백도어의 위험을 줄이기 위해 여러 독립적인 원천을 결합합니다.
여러분의 숫자 ‘무작위성’을 테스트하는 방법
잘 설계된 RNG를 사용하더라도, 그 출력이 기대한 통계적 특성을 보이는지 검증해야 합니다. 두 가지 주요 검사는 등확률성(각 값이 거의 비슷한 빈도로 나타남)과 독립성(연속된 값 사이에 예측 가능한 패턴이 없음)입니다.
PsychicScience.org 난수 생성기 페이지에 따르면, 선택한 범위 내에서 100,000개의 열린 수열 정수를 생성하여 브라우저의 Math.random() 메서드를 테스트할 수 있습니다. 이 페이지는 “우연히 무작위성 검사는 10번 중 약 1번 꼴로 비무작위 수열을 표시할 것입니다”라고 언급합니다. 즉, 10%의 위양성 비율은 정상입니다.
카이제곱 검정(Chi-Square Test) 간단 설명
무작위성에 대한 가장 일반적인 통계 검사는 카이제곱(χ²) 적합도 검정(Goodness-of-Fit test) 입니다. 실제로 작동하는 방식은 다음과 같습니다.
- RNG에서 N개의 숫자 수열을 생성합니다(예: 1에서 6 사이의 1,000개 정수).
- 각 값이 나타나는 횟수를 셉니다.
- 관측된 횟수를 기대 횟수와 비교합니다(균일 분포의 경우 각 값이 N/6회 나타나야 합니다).
- 카이제곱 통계량을 계산합니다. 모든 범주에 대해 ((관측 − 기대)² / 기대)를 합산합니다.
- 해석합니다. 이 카이제곱 값에 해당하는 확률이 0.10(일반적 임계값)보다 크면 무작위성으로부터 유의한 편차가 있다는 증거가 없습니다.
두 번째 검사인 쌍별 독립성 검사는 연속된 숫자의 가능한 각 쌍의 빈도가 동일하게 가능한지 확인합니다. 예를 들어, 주사위를 굴릴 때 (1,1), (1,2), …, (6,6) 쌍이 각각 비슷한 빈도로 나타나야 합니다. 카이제곱 분할표 검사는 높은 값과 낮은 값 사이를 번갈아 가는 경향 같은 편향을 감지할 수 있습니다.
PsychicScience.org의 도구를 포함한 많은 온라인 도구가 내장 카이제곱 검사를 제공합니다. 심각한 검증을 위해서는 NIST 통계 검사 스위트(STS)가 빈도, 런, 블록 빈도 검사 등을 포함한 15가지 다른 검사를 제공합니다.
결론
TRNG와 PRNG의 차이를 이해하는 것이 애플리케이션을 보안하고 정보에 입각한 결정을 내리는 첫걸음입니다. TRNG는 물리적 엔트로피를 수집하고, PRNG는 결정론적 알고리즘과 시드를 사용하며, CSPRNG는 보안을 위해 둘을 결합합니다. 1,650만 달러 복권 조작 사건이 보여주듯이, 잘못된 선택의 실제 결과는 재정적 손실, 법적 책임, 평판 훼손이 될 수 있습니다.
실행 가능한 조언: 오늘 당장 코드베이스를 감사하기 시작하여 Math.random()이 보안, 인증 또는 토큰 생성 컨텍스트에 절대 사용되지 않도록 하세요. 모든 민감한 작업에 CSPRNG로 마이그레이션하세요. 시뮬레이션과 게임의 경우 메르센 트위스터 같은 빠른 PRNG는 괜찮지만, 항상 재현성 요구사항을 인식하세요. 그리고 복권, 추첨 또는 공정성이 중요한 시스템을 운영 중이라면, 전용 하드웨어 RNG 또는 감사 가능한 엔트로피 원천을 갖춘 잘 검증된 CSPRNG에 투자하세요. 2026년 DMARS_WGO 연구의 말처럼 검색 역학을 “똑똑하게 스스로 적응”시키는 능력이 최첨단이지만, 대부분의 개발자에게는 단순히 올바른 기존 도구를 선택하는 것이 가장 영향력 있는 단계입니다.
FAQ
진정한 난수 생성기(TRNG)와 의사난수 생성기(PRNG)의 차이는 무엇인가요?
TRNG는 물리적 과정(열 잡음, 양자 효과, 라바 램프)을 사용하여 본질적으로 예측 불가능한 숫자를 생성합니다. PRNG는 수학적 알고리즘과 시작 시드를 사용하며, 출력은 무작위처럼 보이지만 완전히 결정론적입니다. 보안을 위해서는 TRNG 또는 CSPRNG가 필요합니다.
웹사이트에서 생성된 난수는 진정으로 무작위인가요?
대부분의 웹사이트는 결정론적이지만 통계적으로는 무작위인 PRNG를 사용합니다. 암호학이나 복권을 위한 신뢰할 수 있는 사이트는 하드웨어 기반 엔트로피나 CSPRNG(예: Web Crypto API)를 사용합니다. 이름 추첨기 같은 비보안 애플리케이션에서는 단순한 PRNG가 보통 충분합니다.
암호학적으로 안전한 난수를 어떻게 생성할 수 있나요?
브라우저에서 Web Crypto API(crypto.getRandomValues()) 같은 전용 API를 사용하세요. Unix/Linux 시스템에서는 /dev/urandom에서 읽으세요. 보안 목적으로 절대 Math.random()을 사용하지 마세요. 대량 생성을 위해 ChaCha20 같은 최신 CSPRNG는 빠르고 안전합니다.
답글 남기기