ToolPal
Colorful dice representing randomness and probability in number generation

랜덤 숫자 생성기: 컴퓨터는 어떻게 난수를 만들까? (2026)

📷 Skitterphoto / Pexels

랜덤 숫자 생성기: 컴퓨터는 어떻게 난수를 만들까? (2026)

난수 생성기의 원리, 의사 난수와 진짜 난수의 차이, 암호학적 난수의 개념, 그리고 게임·보안·통계 분야에서의 실제 활용 사례를 알아봅니다.

2026년 3월 21일9분 소요

무작위란 무엇일까?

우리는 '랜덤'이라는 말을 일상적으로 씁니다. 음악 앱의 셔플 버튼, 굴려진 주사위, 뽑힌 복권 번호. 일상적인 맥락에서 랜덤은 단순히 '예측할 수 없다'는 뜻입니다. 그런데 이 단순해 보이는 개념 뒤에는 의외로 깊은 질문이 숨어 있습니다. 정확하고 결정론적인 논리로 작동하는 컴퓨터가, 진정으로 예측 불가능한 값을 만들어낼 수 있을까요?

솔직하게 말하면 — 쉽지 않고, 기본 설정으로는 불가능합니다. 컴퓨터는 결정론적 기계입니다. 같은 입력과 같은 상태가 주어지면 항상 같은 결과를 냅니다. 이것은 소프트웨어를 신뢰할 수 있게 만드는 특성이자, 동시에 진정한 랜덤을 만드는 데 근본적인 장애물입니다.

컴퓨터가 이 문제를 어떻게 해결했는지(또는 우회했는지)는 실용 컴퓨팅의 가장 흥미로운 성과 중 하나입니다. 수학, 물리학, 암호학을 아우르는 이 이야기는 게임에서 은행 보안까지 현대 소프트웨어 전반에 영향을 미칩니다.

의사 난수 생성기: 컴퓨팅의 주력 도구

컴퓨터에서 랜덤처럼 보이는 숫자를 만드는 가장 일반적인 방법은 **의사 난수 생성기(PRNG, Pseudo-Random Number Generator)**입니다. '의사(가짜)'라는 단어가 붙어 있지만, PRNG는 실제로 매우 유용하고 소프트웨어의 무작위성 관련 작업 대부분을 담당합니다.

PRNG는 **시드(seed)**라는 초기값에서 출발해 수학적 공식을 반복 적용하여 숫자 수열을 생성합니다. 이 공식은 결과 수열이 통계적으로 무작위처럼 보이도록 설계됩니다. 숫자들이 범위 안에 균등하게 분포하고, 패턴을 찾기 어려우며, 어떤 값이든 비슷한 확률로 나타납니다.

PRNG의 핵심 특성은 수열 전체가 시드에 의해 완전히 결정된다는 점입니다. 같은 알고리즘에 같은 시드를 넣으면 언제나 동일한 수열이 나옵니다. 이것이 PRNG의 강점이자 한계입니다.

메르센 트위스터

세계에서 가장 널리 쓰이는 PRNG는 아마도 **메르센 트위스터(Mersenne Twister)**일 것입니다. 1997년에 소개된 이 알고리즘은 Python의 random 모듈, Ruby, PHP 등 수많은 언어와 환경에 기본 탑재되어 있습니다. 주기가 2^19937 - 1으로, 숫자가 반복되기 전까지 10^6000개 이상의 값을 생성할 수 있습니다. 사실상 무한에 가까운 수입니다.

메르센 트위스터는 통계적 무작위성 테스트를 거의 모두 통과합니다. 물리 시뮬레이션, 몬테카를로 계산, 게임 레벨 생성, 플레이리스트 셔플 등에 탁월합니다. 하지만 치명적인 약점이 있습니다. 충분한 출력값을 관찰하면 생성기의 내부 상태를 역추적할 수 있습니다. 즉, 공격자가 충분한 출력값을 수집하면 이후의 모든 값을 예측할 수 있게 됩니다.

이 때문에 메르센 트위스터 같은 일반 PRNG는 암호학적 용도로는 전혀 적합하지 않습니다.

시드가 중요한 이유

PRNG에서 초기 시드는 모든 것을 결정합니다. 공격자가 시드를 알면 전체 수열을 알 수 있습니다. 소프트웨어는 종종 현재 시각(타임스탬프)을 시드로 사용하는데, 얼핏 합리적으로 보이지만 타임스탬프는 불확실성(엔트로피)이 매우 낮습니다. 프로그램이 언제 시작됐는지 추측할 수 있다면 시드도 추측할 수 있기 때문입니다.

고정된 시드를 사용하는 경우 — 소프트웨어 테스트에서 흔한 일입니다 — 프로그램은 매 실행마다 동일한 '랜덤' 값을 생성합니다. 버그 재현에는 유용하지만, 보안과 관련된 값을 생성하는 프로덕션 코드에서 이런 일이 벌어지면 재앙이 됩니다.

진짜 난수 생성기: 물리적 예측 불가능성 활용

사전에 정해진 상태와 전혀 무관한, 아무리 강력한 컴퓨터로도 예측할 수 없는 숫자를 원한다면 물리적 세계에서 엔트로피를 가져와야 합니다.

**진짜 난수 생성기(TRNG, True Random Number Generator)**가 바로 이것을 합니다. 양자역학적 또는 열역학적 수준에서 진정으로 예측 불가능한 물리적 과정을 측정합니다. 방사성 붕괴의 정확한 타이밍, 전자 회로의 열 잡음, 광자 검출 이벤트, 라디오 수신기가 포착한 대기 잡음 등이 그 예입니다.

random.org 같은 사이트는 대기 라디오 잡음을 수집해 진짜 난수를 제공합니다. HSM(하드웨어 보안 모듈)이라는 전용 하드웨어에는 고보증 보안 애플리케이션을 위한 전용 엔트로피 소스가 내장되어 있습니다.

단점은 처리 속도입니다. 물리적 과정은 느립니다. 열 잡음 소스는 초당 몇 킬로비트의 엔트로피만 생성할 수 있어, 대용량 랜덤 데이터를 빠르게 만드는 데는 적합하지 않습니다. 하드웨어 구현 비용도 더 높습니다.

실제로 대부분의 시스템은 두 방식을 결합한 하이브리드 접근을 사용합니다. 진짜 무작위성으로 고품질 CSPRNG(아래 참조)의 시드를 설정하고, 이후에는 CSPRNG가 빠르게 예측 불가능한 값들을 생성합니다.

암호학적 난수: 최고 수준의 보안

순수한 PRNG도, 순수한 TRNG도 암호학적 애플리케이션이 필요로 하는 것을 완전히 충족하지 못합니다. 암호학에서는 특정한 요건이 필요합니다. 대량의 출력을 관찰한 적대자조차도 출력이 진짜 난수와 계산적으로 구별되지 않아야 합니다.

이것이 **암호학적으로 안전한 의사 난수 생성기(CSPRNG, Cryptographically Secure Pseudo-Random Number Generator)**의 영역입니다. CSPRNG는 추가적인 수학적 보장을 제공하는 PRNG입니다.

  1. 순방향 비밀성. 내부 상태가 노출되더라도 과거 출력값은 복원할 수 없습니다.
  2. 예측 불가능성. 이전 출력이 아무리 많아도, 미래 출력값을 무차별 대입보다 빠르게 예측할 수 없습니다.
  3. 올바른 시드. 타임스탬프가 아닌 물리적 엔트로피 소스로 시드를 설정합니다.

현대 운영체제는 CSPRNG를 핵심 서비스로 제공합니다. Linux에서는 /dev/urandom/dev/random, macOS와 iOS에서는 SecRandomCopyBytes, Windows에서는 BCryptGenRandom이 그것입니다. 이 시스템 기본 요소들은 하드웨어 인터럽트, 디스크 탐색 시간, 네트워크 패킷 타이밍, 키 입력 간격, 현대 CPU에 내장된 전용 하드웨어 엔트로피 생성기(인텔의 RDRAND 명령어 등) 등 다양한 소스에서 엔트로피를 수집합니다.

Web Crypto API

웹 애플리케이션과 브라우저 기반 도구의 경우, W3C Web Crypto API가 crypto.getRandomValues() 함수를 통해 브라우저의 CSPRNG에 접근하는 표준 방법을 제공합니다. 이것은 서버를 거치지 않고 JavaScript에서 암호학적으로 안전한 난수를 생성하는 표준 방식입니다.

// 암호학적으로 안전한 랜덤 바이트 16개 생성
const array = new Uint8Array(16);
crypto.getRandomValues(array);
console.log(array);

crypto.getRandomValues()가 반환하는 값은 운영체제의 CSPRNG에서 나오며, 이는 다시 하드웨어 엔트로피 소스를 사용합니다. 암호화 키, 세션 토큰, 논스, 기타 보안에 민감한 값 생성에 적합합니다.

ToolPal의 난수 생성기 도구도 이 방식을 사용합니다. 사이트에서 숫자를 생성할 때, 값은 crypto.getRandomValues()에서 나옵니다. 보안 소프트웨어가 사용하는 것과 동일한 소스입니다. 타임스탬프로 시드를 설정하거나 단순한 카운터를 사용하지 않습니다.

난수가 실제로 쓰이는 곳

난수는 추상적인 개념이 아닙니다. 현대 컴퓨팅의 곳곳에 깊이 녹아 있습니다.

게임과 시뮬레이션

비디오 게임의 모든 주사위 굴림, 아이템 드롭, 카드 셔플, 절차적으로 생성된 레벨은 난수에 의존합니다. 게임에서는 암호학적 안전성보다 속도와 통계적 품질이 중요하기 때문에 PRNG를 주로 사용합니다.

시뮬레이션 소프트웨어 — 날씨 예측에서 금융 위험 분석까지 — 는 몬테카를로 방법에 난수를 활용합니다. 분석적으로 풀기 너무 복잡한 시스템의 결과를 추정하기 위해 수천, 수백만 개의 무작위 샘플을 사용하는 기법입니다.

흥미로운 점이 있습니다. 시드된 PRNG를 사용하는 게임은 시드를 알면 플레이를 완벽하게 재현할 수 있습니다. 마인크래프트에서 '스피드런 시드'가 작동하는 원리가 바로 이것입니다. 시드가 세계의 모든 요소를 결정하므로, 같은 시드를 공유하면 누구나 동일한 세계를 생성할 수 있습니다.

통계와 표본 추출

연구자들은 모집단에서 대표성 있는 무작위 표본이 필요합니다. 설문 설계, 임상시험 무작위 배정, 품질 관리 표본 추출, A/B 테스트 그룹 배정 등이 모두 좋은 난수 생성에 의존합니다. 임상시험에서 배정 무작위성이 나쁘면 결과를 무효화하는 미묘한 편향이 생길 수 있습니다.

통계적 표본 추출에는 부트스트래핑도 포함됩니다. 기존 데이터에서 무작위로 재표본을 추출해 추가 데이터 수집 없이 신뢰구간과 불확실성을 추정하는 기법입니다.

암호학과 보안

난수가 미션 크리티컬이 되는 영역입니다. 현대 암호학의 모든 측면이 예측 불가능한 난수에 의존합니다.

  • 암호화 키. AES-256 키는 256비트의 랜덤한 값입니다. 이 비트들이 예측 가능하다면 암호화는 의미를 잃습니다.
  • 세션 토큰. 웹 애플리케이션은 사용자를 인증하는 세션 ID를 생성합니다. 예측 가능한 세션 ID는 위조되어 계정을 탈취하는 데 사용될 수 있습니다.
  • 논스(Nonce). 많은 암호학적 프로토콜에서 재전송 공격을 막기 위해 일회성 값을 사용합니다. 이 값은 반드시 랜덤이어야 합니다.
  • 비밀번호 솔트. 비밀번호 해싱은 레인보우 테이블 같은 사전 계산 공격을 막기 위해 랜덤 솔트값을 추가합니다.
  • TLS 핸드셰이크. HTTPS 연결을 보호하는 TLS 프로토콜 전체가 연결 설정 중 생성되는 랜덤값에 의존합니다.

역사적으로 나쁜 난수 생성이 원인이 된 치명적 보안 사고들이 있습니다. 2008년 Debian OpenSSL 버그는 엔트로피 소스를 실수로 무력화해 유효한 키 공간을 수천 개로 줄여버렸습니다. 플레이스테이션 3의 서명 키는 소니가 ECDSA 서명에 같은 랜덤값을 반복 사용했기 때문에 추출됐습니다. 랜덤값을 재사용하는 것은 수학적으로 즉시 키가 노출되는 치명적 설계 결함입니다.

비밀번호와 보안 토큰

ToolPal의 비밀번호 생성기로 강력한 비밀번호를 생성할 때, 문자는 암호학적으로 안전한 난수를 사용해 선택됩니다. 이렇게 하면 생성된 모든 비밀번호가 서로 독립적이고, 패턴이 없으며, 허용된 문자셋에서 균등하게 선택됩니다.

시드가 취약한 PRNG를 사용하는 비밀번호 생성기는 눈에 띄지 않더라도 통계적으로 예측 가능한 패턴으로 비밀번호를 만들어냅니다. 생성기를 아는 공격자는 탐색 공간을 대폭 줄일 수 있습니다.

복권과 공정한 추첨

복권, 경품 추첨, 무작위 선발 과정에서는 난수 생성기의 품질이 결과의 공정성을 직접 결정합니다. 대기 잡음처럼 진짜 랜덤 소스가 고액 복권에 주로 사용되는 것도 내부 상태에 의해 결정되지 않는다는 것이 검증 가능하기 때문입니다.

온라인 추첨은 추가적인 도전 과제가 있습니다. 참여자에게 추첨이 진정으로 랜덤했으며, 결과가 발표 후 조작되지 않았음을 증명해야 합니다. 이를 위해 커밋-리빌(commit-reveal) 방식을 사용합니다. 주최자가 추첨 전에 랜덤 시드에 대한 암호학적 커밋을 공개하고, 추첨 후에 시드를 공개해 누구나 독립적으로 검증할 수 있게 합니다.

랜덤에 대한 흔한 오해들

"최근 결과가 다음 결과에 영향을 준다." 이것은 도박사의 오류입니다. 동전이 앞면 10번 연속으로 나왔다면, 대부분의 사람은 다음에 뒷면이 나올 것 같은 느낌을 받습니다. 하지만 그렇지 않습니다. 각 던지기는 독립적입니다. 동전에는 기억이 없습니다. 좋은 난수 생성기도 마찬가지입니다. 과거 출력이 미래 출력에 영향을 주지 않습니다.

"사람은 랜덤한 숫자를 잘 고를 수 있다." 사실이 아닙니다. 사람이 '랜덤한' 숫자 수열을 쓰면, 같은 숫자를 반복하는 것을 피하고, 긴 연속을 피하고, 무의식적으로 특정 숫자를 선호합니다. 연구들은 일관되게 인간이 만든 '랜덤' 수열이 알고리즘이 만든 것보다 훨씬 예측 가능하다는 것을 보여줍니다.

"랜덤해 보이면 좋은 생성기다." 시각적 검사는 랜덤성을 평가하는 최악의 방법입니다. 나쁜 생성기 중 다수가 눈으로 보기엔 랜덤해 보이지만 통계 테스트를 통과하지 못합니다. 전문적인 평가에는 NIST SP 800-22, Diehard 테스트, TestU01 같은 공식 테스트 스위트를 사용합니다.

"랜덤이면 균등 분포여야 한다." 랜덤은 분포가 아니라 예측 불가능성에 관한 것입니다. 정규 분포에서도, 지수 분포에서도 랜덤 샘플이 있을 수 있습니다. '랜덤'은 다음 값을 예측할 수 없다는 의미이지, 모든 값이 동등한 확률을 가진다는 뜻이 아닙니다.

"카드를 한 번 섞으면 충분하다." 표준 52장짜리 카드 덱의 가능한 배열은 52!(약 8 × 10^67)가지입니다. 나쁜 랜덤 소스를 쓴 단순한 셔플 구현은 이 공간을 충분히 탐색하지 못할 수 있습니다. 올바른 접근은 적절한 랜덤 소스와 조합한 Knuth(피셔-예이츠) 셔플 알고리즘을 사용하는 것입니다.

상황에 맞는 랜덤 선택하기

올바른 랜덤 소스는 목적에 따라 달라집니다.

용도권장 소스
게임 메카닉, 셔플, 시뮬레이션PRNG (메르센 트위스터 등)
통계 표본 추출, A/B 테스트잘 시드된 PRNG
비밀번호 생성CSPRNG (Web Crypto API 등)
암호화 키, 세션 토큰CSPRNG
복권 또는 고액 추첨TRNG 또는 감사된 CSPRNG
재현 가능한 테스트시드가 문서화된 PRNG

ToolPal의 난수 생성기와 비밀번호 생성기 같은 브라우저 기반 도구에서는 Web Crypto API의 crypto.getRandomValues()가 올바른 선택입니다. 빠르고, 암호학적으로 안전하며, 추가 라이브러리 없이 모든 현대 브라우저에서 사용 가능합니다.

랜덤성 테스트와 검증

난수 생성기가 실제로 좋은지 어떻게 알 수 있을까요? 개별 출력값을 육안으로 검증하는 것은 불가능합니다. 그것이 랜덤성의 본질이기 때문입니다. 하지만 대규모 출력 샘플에 통계 테스트를 적용할 수 있습니다.

NIST 통계 테스트 스위트(SP 800-22)가 표준 기준입니다. 빈도, 연속, 직렬 상관, 스펙트럼 분석 등 15가지 테스트를 포함합니다. 통과한다고 해서 보안이 보장되지는 않습니다(PRNG가 모든 테스트를 통과하면서도 내부 상태를 아는 사람에게는 예측 가능할 수 있습니다). 하지만 실패한다면 해당 생성기는 분명히 나쁜 것입니다.

보안이 중요한 애플리케이션에서는 어떤 PRNG를 쓸지 선택하는 것이 아니라, 시스템이 제공하는 CSPRNG를 사용하는 것이 답입니다. 보안 목적으로 난수 생성기를 직접 구현하는 것은 거의 항상 실수입니다. 시스템 기본 요소들은 수많은 전문가들이 수년에 걸쳐 감사하고 검토하고 테스트했습니다. 직접 만든다고 이점이 없고 위험만 추가됩니다.

결론

난수 생성은 이론과 공학이 흥미롭게 만나는 지점입니다. 랜덤성의 수학적 특성 — 그 의미, 측정 방법, 생성 방법 — 은 진정으로 깊은 주제입니다. 그리고 그 실용적 결과 — 암호화된 연결, 공정한 게임, 대표적인 표본, 안전한 비밀번호 — 는 매우 구체적이고 즉각적입니다.

핵심 요점을 정리하면:

  • PRNG는 결정론적이고 빠르며, 시뮬레이션과 게임에 적합하지만 보안에는 부적합합니다.
  • TRNG는 물리적 과정에서 엔트로피를 가져와 진정으로 예측 불가능한 값을 생성하지만 느립니다.
  • CSPRNG는 두 방식을 결합합니다. 물리적 엔트로피로 시드를 설정하고, 암호학적 보장이 있는 알고리즘을 실행해 속도와 보안을 모두 제공합니다.
  • Web Crypto API는 CSPRNG 수준의 랜덤성을 브라우저 기반 애플리케이션에 제공하여, 서버 개입 없이 안전한 비밀번호, 토큰, 숫자를 생성할 수 있게 합니다.

ToolPal의 비밀번호 생성기로 비밀번호를 만들거나 랜덤 숫자 생성기로 숫자를 뽑을 때마다, 값은 crypto.getRandomValues()에서 나옵니다. 현대 웹을 보호하는 것과 동일한 암호학적 기반입니다. 타임스탬프도, 예측 가능한 시드도, 도박사의 오류도 없습니다. 제대로 다루어진, 진정한 예측 불가능성입니다.

자주 묻는 질문

이 글 공유하기

XLinkedIn

관련 글