# 의사난수 (Pseudorandom)

의사난수(Pseudorandom)는 통계적 무작위성 검정을 통과하는 결과를 생성할 수 있는 특정 함수의 속성입니다. 결과가 진정으로 무작위임을 의미하지는 않습니다. 의사난수는 시드(seed)라는 초기값에서 출발하는 결정론적 알고리즘, 즉 의사난수 생성기(PRNG)로 만들어지며, 같은 시드를 넣으면 항상 같은 수열이 나옵니다.

## 겉으로는 무작위, 하지만 그렇지 않은

미리 정해진 방법으로 섞는 카드 묶음을 떠올려 보세요. 순서가 무작위처럼 보이지만, 섞는 방법과 처음 순서를 알면 같은 결과를 그대로 재현할 수 있습니다. **의사난수성**은 이와 유사합니다. 결정론적 과정으로 생성되더라도 무작위적으로 *보이는* 수열을 만드는 것입니다. 음악 앱의 셔플 기능이나 스프레드시트의 난수 함수도 대부분 이런 방식으로 동작합니다.

## 의사난수 생성기의 특징

- **시드에서 출발:** 예측할 수 없는 물리적 현상에 의존하는 진정한 난수 생성기(TRNG)와 달리, 의사난수 수열은 항상 시드 값으로 시작합니다. 동일한 시드는 항상 동일한 수열을 생성합니다.
- **무작위성 검정 통과:** 좋은 PRNG는 패턴을 감지하도록 설계된 통계적 검정을 통과하는 출력을 생성합니다.
- **속도와 재현성:** PRNG는 TRNG보다 훨씬 빠르게 많은 수를 만들 수 있고, 같은 시드로 같은 수열을 다시 얻을 수 있어 시뮬레이션과 디버깅에 유용합니다.
- **유한한 주기:** PRNG는 결국 출력 수열을 반복합니다. 주기는 매우 길 수 있지만 유한합니다.

## PRNG와 CSPRNG의 차이

모든 의사난수 생성기가 암호에 쓸 수 있는 것은 아닙니다. 통계적으로 무작위해 보이는 것과 공격자가 예측할 수 없는 것은 다른 문제이기 때문입니다.

- **일반 PRNG:** 메르센 트위스터(Mersenne Twister)나 선형 합동 생성기 같은 알고리즘은 시뮬레이션과 게임에는 적합하지만, 출력 일부만 관찰해도 내부 상태를 복원해 이후의 값을 예측할 수 있습니다. 암호용 키 생성에 쓰면 안 됩니다.
- **암호학적으로 안전한 PRNG(CSPRNG):** 출력의 일부를 알아도 다음 출력이나 이전 출력을 현실적으로 예측할 수 없도록 설계된 생성기입니다. 해시 함수나 블록 암호를 기반으로 한 생성기(예: NIST SP 800-90A의 Hash_DRBG, HMAC_DRBG, CTR_DRBG)나 ChaCha20 기반 생성기가 쓰입니다.

CSPRNG도 결정론적 알고리즘이지만, 시드가 충분히 크고 예측 불가능하면 안전합니다. 그래서 실제 시스템에서는 운영체제가 하드웨어 잡음, 인터럽트 시각 같은 엔트로피 원천에서 시드를 모으고, 그 시드로 CSPRNG를 돌려 난수를 제공합니다(예: Linux의 /dev/urandom과 getrandom(), Windows의 BCryptGenRandom). 결정론적이라는 사실 자체가 문제가 아니라, 시드가 예측 가능하거나 일반 PRNG를 쓰는 것이 문제입니다.

## 암호화폐에서의 의미

지갑의 개인 키와 니모닉(시드 문구)은 난수로 만들어지므로, 난수를 어떻게 생성했는지가 곧 자산의 안전과 직결됩니다. 2023년에 공개된 “Milk Sad” 취약점이 대표적입니다. Libbitcoin Explorer(bx) 3.x의 시드 생성 명령은 메르센 트위스터를 32비트 시스템 시각으로 초기화했기 때문에, 가능한 시드가 약 43억 개에 불과했습니다. 공격자는 이 범위를 모두 계산해 해당 도구로 만든 지갑의 개인 키를 찾아냈고, 실제로 자산이 도난되었습니다. 2013년에는 안드로이드의 SecureRandom 구현 결함으로 일부 비트코인 지갑 앱의 서명 난수가 반복되어 개인 키가 노출된 사례도 있었습니다.

## 응용 분야

- **시뮬레이션:** 몬테카를로 시뮬레이션, 날씨 예측, 금융 시장 모델링은 재현 가능한 의사난수에 크게 의존합니다.
- **컴퓨터 프로그래밍:** 재생 목록 섞기부터 무작위 게임 시나리오 생성까지 일반 PRNG가 널리 쓰입니다.
- **암호:** 키, 논스, 솔트, 서명용 난수는 반드시 운영체제가 제공하는 CSPRNG 또는 검증된 하드웨어 난수원에서 얻어야 합니다.

**중요 참고 사항:** 무언가가 무작위로 보인다고 해서 정말 예측 불가능한 것은 아닙니다. 암호 목적에는 일반 PRNG가 아니라 충분한 엔트로피로 초기화된 CSPRNG를 사용해야 합니다.

---
출처: https://achivx.kr/glossary/pseudorandom-%EC%9D%98%EC%82%AC%EB%82%9C%EC%88%98/ · ACHIVX 용어 사전 · 수정일 2026-10-20
