의사난수 (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를 사용해야 합니다.
이 글은 학습을 위한 일반 정보이며 투자 권유나 법률 자문이 아닙니다. 가상자산은 가격 변동이 크고 원금 손실 위험이 있습니다.