진정한 난수 생성(True random number generation)은 열 잡음, 대기 정전, 양자 붕괴 같은 물리적 엔트로피를 수집한 뒤, 그 혼돈적인 아날로그 신호를 디지털 비트로 변환하는 방식으로 작동합니다. 알고리즘 기반 생성기와 달리 하드웨어 기반 시스템은 비결정론적인 환경 변수를 측정하여 수학적으로 예측할 수 없고 패턴이 없는 수열을 만들어냅니다.
이 기술이 어떻게 작동하고, 어디서 실패하며, 용도에 맞는 접근법을 어떻게 선택해야 하는지 정리했습니다.
TRNG의 작동 원리: 물리적 혼돈에서 디지털 비트로
진정한 난수 생성기(TRNG) — 하드웨어 난수 생성기(HRNG)라고도 부릅니다 — 는 공식을 따르지 않습니다. 예측 불가능한 물리 세계와 엄격한 디지털 논리 사이를 잇는 다리 역할을 하며, 외부의 엔트로피 소스를 수집해 그 아날로그 신호를 이진 스트림으로 변환합니다.
존 폰 노이만(John von Neumann)은 1951년에 이런 경고를 남겼습니다. “난수를 산술적 방법으로 만들어내려는 사람은, 당연히, 죄를 짓고 있는 것이다.”
세 가지 주요 엔트로피 소스
| 소스 | 측정 대상 | 기기 예시 |
|---|---|---|
| 열 잡음 | 회로 내 전자 이동에 의한 전압 변동 | 스마트폰 Secure Enclave(Apple A 시리즈, Google Tensor) |
| 대기 잡음 | 번개 같은 자연 현상에서 발생하는 라디오 정전 | 전용 RNG 서버 |
| 양자 현상 | 방사성 붕괴, 진공 요동 | ANU 양자 RNG, 엔터프라이즈 서버 |

파이프라인은 단순합니다. 물리 소스 → 센서/디지타이저 → 이진 출력. 한쪽 끝으로 날것의 엔트로피가 들어가면 반대쪽 끝에서 깨끗한 난수 비트가 나옵니다.
TRNG vs PRNG: 결정론의 경계
난수 생성에서 가장 근본적인 구분은 물리적 엔트로피와 알고리즘적 논리 사이의 차이입니다.
| 특성 | TRNG(하드웨어) | PRNG(알고리즘) | CSPRNG(하이브리드) |
|---|---|---|---|
| 소스 | 물리적 엔트로피 | 수학 공식 | 하드웨어 시드 + 알고리즘 |
| 예측 가능? | 아니오 | 예 — 시드를 알면 예측 가능 | 극히 어려움 |
| 속도 | 느림(블로킹) | 매우 빠름 | 빠름 |
| 재현 가능? | 아니오 | 예(같은 시드 = 같은 출력) | 아니오 |
| 용도 | 암호 키, 보안 토큰 | 시뮬레이션, 게임 | 실무 보안 시스템 |
PRNG가 실패할 때: Hot Lotto 사기 사건
PRNG는 시드 값을 수학 공식의 출발점으로 사용합니다. 출력은 무작위처럼 보이지만 완전히 결정론적입니다. 누군가 시드와 공식을 알면 모든 숫자를 예측할 수 있습니다.
이건 이론적인 이야기가 아닙니다. Hot Lotto 사기 스캔들에서 내부자는 악성코드를 심어 점검 기간 동안 PRNG가 예측 가능한 시드를 사용하도록 강제했고, 1,650만 달러짜리 잭팟을 조작했습니다.

PRNG가 올바른 선택일 때
PRNG는 속도와 재현성이 중요한 작업에서 오히려 더 적합합니다. 몬테카를로 시뮬레이션에서 과학자들은 결과를 검증하려고 같은 수열을 반복적으로 실행해야 합니다. 시드를 재사용할 수 있기 때문에 시뮬레이션의 일관성이 유지되며, 이는 블로킹 방식의 TRNG로는 불가능한 일입니다.
하이브리드 해법: CSPRNG
대부분의 현대 시스템은 암호학적으로 안전한 의사난수 생성기(CSPRNG) — 소량의 진짜 하드웨어 엔트로피를 끌어와 빠른 알고리즘을 시드하는 하이브리드 방식 — 를 사용합니다. 이렇게 하면 TRNG의 예측 불가능성과 PRNG의 속도를 함께 얻을 수 있습니다.
산업 표준은 NIST SP 800-90A로, 정부 및 산업용으로 이런 생성기를 어떻게 설계해야 하는지를 규정합니다.
개발자 가이드: 어떤 라이브러리를 써야 할까
| 언어 | 안전하지 않음(PRNG) | 안전함(CSPRNG) |
|---|---|---|
| Python | random(메르센 트위스터) |
secrets(/dev/urandom에서 읽음) |
| JavaScript | Math.random() |
crypto.getRandomValues() |
| Go | math/rand |
crypto/rand |
| Java | java.util.Random |
java.security.SecureRandom |
규칙은 간단합니다. 보안과 관련된 모든 작업에는 secrets / crypto / SecureRandom을 사용하세요. random / Math.random()은 게임과 시뮬레이션 용도로만 씁니다.
2026년 소비자 하드웨어 속의 TRNG
2026년에 이르러 하드웨어 엔트로피는 엔터프라이즈 서버를 넘어 일상 기기로 확산했습니다. 최신 스마트폰 칩은 Secure Enclave 내부에 전용 TRNG를 탑재하고 있으며, 프로세서에서 직접 열 잡음을 수집해 FaceID, 디지털 지갑, 보안 메시징용 암호 키를 생성합니다.
엔터프라이즈 보안에서 최전선은 양자 난수 생성입니다. 호주 국립대(Australian National University) 같은 기관의 시스템은 양자 진공 요동에서 수를 만들어냅니다. 이 정도 수준의 무작위성은 미래의 양자 컴퓨터조차도 깨기 어려울 것으로 보입니다.
화이트닝: 날것의 잡음에서 깨끗한 데이터로
날것의 엔트로피는 거의 균일하지 않습니다. 온도 드리프트 때문에 열 센서가 0보다 1을 조금 더 많이 만들어낼 수 있습니다. 이런 편향을 보정하기 위해 데이터는 화이트닝(whitening) — 보통 XOR 연산이나 암호학적 해시 — 을 거쳐 패턴을 평탄하게 만들고 균일한 분포를 보장합니다.
이 후처리 단계는 인증된 시스템에 사용되는 모든 엔트로피 소스에 NIST SP 800-90B가 요구하는 사항입니다.
혼돈을 수확한 짧은 역사
- 1927년: L.H.C. 티펫(L.H.C. Tippett)은 인구조사 기록에서 손수 뽑아낸 41,600자리 숫자 표를 발표했습니다.
- 1955년: RAND 코퍼레이션이 전자 펄스 기계를 이용해 A Million Random Digits 를 출간했습니다.
- 2013년: Dual_EC_DRBG 스캔들이 터졌습니다. NSA가 NIST 인증 생성기에 백도어를 심어놓아 SSL 연결을 해킹할 수 있었다는 사실이 드러났습니다. 이 사건은 업계를 다중 소스 엔트로피 혼합 — 단일 실패 지점이 없도록 — 방향으로 이끄는 계기가 되었습니다.
결론
진정한 난수는 디지털 신뢰의 기반입니다. 예측 가능한 코드와 혼돈적 현실을 잇기 위해 물리적 하드웨어가 필요합니다. 스마트폰의 열 잡음이든 서버실의 양자 요동이든, 의사난수에서 하드웨어로 검증된 엔트로피로의 전환은 2026년 보안에 필수적입니다.
개발자에게: 보안 용도에서는 절대 random이나 Math.random()을 쓰지 말고 secrets(Python) 또는 crypto.getRandomValues()(JavaScript)를 사용하세요. 조직에게: 하드웨어 TRNG는 더 이상 선택이 아닙니다. 암호화의 기본 요구사항입니다.
FAQ
컴퓨터의 내부 시계도 진정한 난수 소스인가요?
아닙니다. 시계는 예측 가능하며, 값이 계속 변하기 때문에 오히려 PRNG 시드로 자주 쓰입니다. 하지만 공격자가 숫자가 생성된 대략적인 시점을 알면 가능성의 범위를 좁힐 수 있습니다. 진정한 난수는 키 입력 간격, 열 잡음처럼 비결정론적 이벤트의 타이밍을 측정한 뒤 통계적 화이트닝을 거쳐야 얻어집니다.
인간이 진정으로 무작위인 수열을 만들어낼 수 있나요?
인간은 무작위성에 서툽니다. 무작위 집합에서 자연스럽게 나타나는 군집(예: “1, 1, 1”)을 피하려 하고, 옵션 사이를 너무 자주 바꿉니다. 이런 패턴은 통계 검정으로 쉽게 잡아낼 수 있어서, 인간 입력은 시드 용도로는 괜찮지만 보안이 중요한 작업에는 부족합니다.
진정한 무작위성을 검증하는 통계 검정은 뭔가요?
NIST 통계 검정 스위트(STS) 가 사실상 표준입니다. 그 밖에 Dieharder 검정과 AIS 31 표준이 있습니다. 이 검정들은 반복 패턴, 동일 비트의 긴 실행, 편향이나 예측 가능성을 나타내는 기타 이상 징후를 찾아냅니다.
답글 남기기