483 / 736PRNG

Deterministic RNG

결정적 의사난수 생성기

같은 절차에 같은 초기 상태와 입력을 주면 같은 결과가 나옵니다. 결정적 생성기에서 이는 결함이 아니라 특성입니다. 안전성을 판단하려면 비밀인 출발 데이터를 모르는 사람도 결과를 예측할 수 있는지 살펴봐야 합니다.

Deterministic RNG는 의사난수 생성기입니다. 값을 만들 때마다 새로운 무작위 물리 현상을 측정하는 대신, 정해진 절차로 계산합니다. seed라는 입력에서 시작해 다음 계산에 필요한 정보인 내부 상태를 유지합니다. 같은 입력으로 전체 절차를 반복하면 결과도 재현되므로 테스트에 유용합니다. 다만 암호학적으로 안전한 생성기에는 적절한 설계와 충분한 엔트로피, 즉 공격자 관점에서 입력에 대한 불확실성도 필요합니다.

계산을 잠시 멈추고 메모리를 저장했다고 생각해 보세요. 같은 지점에서 다시 시작하고 이후 입력도 같다면 같은 방식으로 진행할 수 있습니다. NIST SP 800-90A는 이런 생성기를 DRBG로 설명합니다. 알고리즘, 설정, 요청 순서가 모두 중요합니다. 새로운 엔트로피를 보충하는 reseeding은 상태를 바꿉니다. 따라서 seed가 같다는 이유만으로 서로 다른 프로그램의 출력까지 같다고 할 수는 없습니다. [1]

간단한 시뮬레이션 프로그램도 무작위처럼 보이는 수를 만들 수 있습니다. 하지만 그것만으로 지갑을 보호할 수는 없습니다. RFC 4086은 통계 테스트를 통과한 수열도 공격자가 예측할 수 있다고 경고합니다. 암호학적으로 강한 생성기는 출력 일부가 알려져도 나머지를 현실적으로 예측하기 어려워야 합니다. 중요한 것은 ‘결정적’이라는 이름만이 아니라 설계와 초기 데이터의 품질, 비밀 유지입니다. [2]

오류를 찾을 때는 똑같은 상황을 정확히 재현할 수 있으면 도움이 됩니다. 그래서 libsodium의 randombytes_buf_deterministic()은 같은 seed에 같은 수열을 반환합니다. 개발자는 예상 결과를 공개해 다른 사람도 확인하게 할 수 있습니다. 바로 그렇기 때문에 공개된 테스트 seed를 실제 지갑에 사용해서는 안 됩니다. 누구나 같은 ‘비밀’을 계산할 수 있기 때문입니다. [3]

BIP32는 비슷한 재현성을 키 파생에 이용하지만, 일반적인 난수 데이터 생성과 동일한 절차는 아닙니다. 하나의 seed에서 가지가 나뉘는 키 트리를 만들고, 파생 경로가 사용할 가지를 정합니다. 따라서 같은 seed와 경로로 같은 키를 다시 얻을 수 있습니다. 그러나 주소를 하나 더 파생한다고 원래 비밀에 새롭고 독립적인 엔트로피가 추가되는 것은 아닙니다. [4]

BIP39에서 mnemonic이라고 부르는 복구 단어는 입력의 일부입니다. PBKDF2는 그 단어와 선택적인 추가 비밀인 passphrase를 결합해 이후 파생에 사용할 seed를 계산합니다. 단어가 같아도 passphrase가 다르면 결과가 달라집니다. 같은 키를 복구하려면 원래 입력 전체와 그에 맞는 파생 방법이 필요합니다. 단어가 같다는 사실만으로 충분하지는 않습니다. [5]

디지털 서명은 해당 비밀 키의 보유자가 거래를 승인했음을 보여 줍니다. RFC 6979는 그 키와 서명할 메시지에서 서명용 보조 값 k를 계산하는 방법을 설명합니다. 이 단계에서는 매번 새로운 난수를 얻을 필요가 없습니다. 그렇다고 처음 키를 만들 때 좋은 무작위성이 필요하다는 조건까지 사라지지는 않습니다. 올바른 서명 절차도 처음부터 추측할 수 있던 키를 고쳐 주지는 못합니다. [6]

BIP32로 같은 키를 복구하는 것은 원하는 동작입니다. 반면 새로워야 할 값을 실수로 반복하는 것은 문제입니다. 가상 머신 스냅샷은 메모리를 포함한 컴퓨터 상태를 저장합니다. libsodium이 경고하듯 이를 복원하면 생성기의 상태와 출력도 반복될 수 있습니다. 따라서 환경을 복사할 때 실행 중인 각 복사본이 자동으로 독립적인 비밀을 만든다고 가정해서는 안 됩니다. [3] [4]

개발자는 결과를 테스트 벡터, 즉 알려진 입력과 예상 출력의 쌍과 비교합니다. 일치하면 그 예제를 올바르게 계산했다는 뜻입니다. 실제 장치가 양질의 엔트로피를 얻는다는 증거는 아닙니다. NIST SP 800-90A도 생성 방식과 입력 요건을 구분합니다. 프로그램 버전, 설정, 엔트로피 보충 방식도 중요합니다. Deterministic RNG라는 표시만으로 지갑의 안전성을 판단할 수는 없습니다. [1]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 CSPRNG, Random Number Generator, HD Wallet, Seed Generation. 다음 항목에서도 이 글을 참조합니다 CSPRNG, COLDCARD RNG Incident (2026).

DOC · 001NIST SP 800-90A Rev. 1 — State, inputs and reseeding명세 DOC · 002RFC 4086 — Pseudorandom sequences and unpredictability명세 DOC · 003libsodium — Deterministic output and VM snapshots문서 DOC · 004BIP32 — Hierarchical deterministic key derivation명세 DOC · 005BIP39 — Mnemonic and passphrase to seed명세 DOC · 006RFC 6979 — Deterministic signing and initial key generation명세
개정일: 1차 출처 우선 · 투자 조언이 아닙니다