481 / 691RNG

Random Number Generator

난수 생성기

RNG는 불확실성을 사용할 수 있는 값으로 바꾸는 과정의 일부입니다. 비밀 키에는 단순히 무작위처럼 보이는 출력보다 예측 불가능성, 초기화, 실패 처리가 중요합니다.

Random Number Generator는 특정 목적에 필요한 값을 제공합니다. 암호학적 사용에서는 명시한 가정 아래 공격자가 그 값을 실질적으로 예측할 수 없어야 합니다. 물리적 엔트로피 원천, 결정적 생성기, 운영체제 인터페이스는 서로 다른 계층이며 RNG라는 이름만으로 그 특성을 알 수는 없습니다.

엔트로피 원천은 불확실성을 제공하고, 조정 처리는 입력을 준비하며, 결정적 생성기는 내부 상태에서 출력을 만듭니다. NIST SP 800-90C는 90A의 메커니즘과 90B에 따른 원천을 결합합니다. 따라서 반환되는 모든 비트가 새로운 물리적 측정에 대응하는 것은 아닙니다. [NIST SP 800-90C — RBG constructions]

수열이 통계 검정을 통과해도 공격자가 이미 알고 있을 수 있습니다. RFC 4086은 시계, 일련번호, 예측 가능한 초기값을 경고합니다. 시뮬레이션용 생성기의 이름이나 출력 분포만으로 암호학적 용도에 적합하다고 판단해서는 안 됩니다. [RFC 4086 — Unpredictability and weak inputs]

NIST SP 800-90B는 잡음 원천, 조정 처리, 시작 시점과 동작 중의 상태 검사를 평가합니다. 이 검사는 원천의 고장을 찾는 것이며 지갑 전체의 안전성을 증명하지 않습니다. 실패 처리는 설계에 포함되어야 하며, 고장 난 경로의 출력을 검증된 난수인 것처럼 알리지 않고 제공해서는 안 됩니다. [NIST SP 800-90B — Source health and failure handling]

Linux getrandom()은 기본적으로 urandom 원천의 초기화를 기다립니다. GRND_NONBLOCK을 사용하면 기다리는 대신 EAGAIN을 반환할 수 있습니다. 초기화 후 urandom에 256바이트 이하를 요청하면 신호에 중단되지 않고 전체를 읽는 것이 보장됩니다. 더 큰 요청에는 이 보장이 없으며 앱은 반환 상태를 처리해야 합니다. [Linux getrandom(2) — Initialization and return behavior]

Web Crypto getRandomValues()는 지원하는 정수 배열을 암호학적으로 강한 값으로 채우며, 65536바이트를 넘으면 QuotaExceededError를 발생시킵니다. 명세는 키 생성에 generateKey()를 권장합니다. 이 인터페이스가 있다고 페이지가 신뢰할 만한 것은 아니며, 비밀에 접근할 수 있는 코드로부터 비밀을 보호하지도 않습니다. [W3C Web Crypto — getRandomValues and key generation]

BIP39는 먼저 128~256비트의 초기 엔트로피와 계산한 체크섬을 인코딩합니다. 이후 단어와 선택적 passphrase에서 PBKDF2로 512비트 seed를 도출합니다. 체크섬이나 더 긴 도출 출력은 예측 가능한 입력을 고치지 못하며, 단어를 직접 고르는 것은 무작위 생성을 대신할 수 없습니다. [BIP39 — Initial entropy and mnemonic-to-seed derivation]

결정적 생성기는 보호된 상태와 올바른 초기화가 필요합니다. NIST SP 800-90A는 인스턴스 생성, 출력 생성, 재시딩, 인스턴스 제거를 구분합니다. 상태 노출 후 회복에는 적절한 메커니즘과 공격자가 모르는 새로운 엔트로피가 필요합니다. 단순한 다음 호출은 일반적인 회복 보장이 아닙니다. [NIST SP 800-90A Rev. 1 — DRBG lifecycle and reseeding]

검토는 평가 대상 버전의 구체적인 원천, 알고리즘, 초기화, 인터페이스, 오류 시 동작을 밝혀야 합니다. 하드웨어 또는 오프라인이라는 표지만으로 이 연결을 입증할 수 없습니다. 인용한 표준은 생성 요건을 설명하지만 특정 지갑을 인증하거나 나중의 백업 유출을 막아 주지는 않습니다. [NIST SP 800-90C — RBG constructions] [RFC 4086 — Unpredictability and weak inputs]

더 정확히 이해하려면 이 항목과 함께 다음도 읽어 보세요 Cryptographic Entropy, CSPRNG, Seed Generation, Brute Force Search Space. 다음 항목에서도 이 글을 참조합니다 CSPRNG, Deterministic RNG, True Random Number Generator, Seed Generation.

DOC · 001NIST SP 800-90C — RBG constructions명세 ↗DOC · 002RFC 4086 — Unpredictability and weak inputs명세 ↗DOC · 003NIST SP 800-90B — Source health and failure handling명세 ↗DOC · 004Linux getrandom(2) — Initialization and return behavior문서 ↗DOC · 005W3C Web Crypto — getRandomValues and key generation명세 ↗DOC · 006BIP39 — Initial entropy and mnemonic-to-seed derivation명세 ↗DOC · 007NIST SP 800-90A Rev. 1 — DRBG lifecycle and reseeding명세 ↗
1차 출처 우선 · 투자 조언이 아닙니다