본문으로 건너뛰기

8장. 난수 비트 생성과 스트림 암호

개요​

PRNG/TRNG 원리, 선형 합동 생성기, BBS, 블록 암호 기반 PRNG, 스트림 암호, RC4, 진난수 생성기, Intel DRNG

난수 비트 스트림은 키 생성, 암호화, 논스 등 다양한 보안 응용에서 필수적이다. 이 장에서는 의사난수 생성기(PRNG), 블록 암호 기반 PRNG, 스트림 암호(RC4), 진난수 생성기(TRNG)를 다룬다.

학습 목표

  • 난수의 무작위성과 예측 불가능성 개념을 설명한다.
  • TRNG, PRNG, PRF의 차이를 이해한다.
  • 블록 암호를 이용한 PRNG 구성 방법을 설명한다.
  • 스트림 암호와 RC4의 구조를 개관한다.

8.1 의사난수 생성 원리​

난수의 용도​

  • 키 분배 및 상호 인증의 논스(nonce)
  • 세션 키 생성
  • RSA 공개키의 소수 생성
  • 스트림 암호의 키스트림 생성

난수의 두 가지 요구사항​

요구사항설명
무작위성 (Randomness)균일 분포 + 독립성
예측 불가능성 (Unpredictability)이전 값으로 다음 값 추론 불가

TRNG vs PRNG vs PRF​

유형입력출력결정론적
TRNG물리적 엔트로피 소스난수 비트 스트림아니오
PRNG시드(seed)개방형 의사난수 비트 스트림예
PRF시드 + 문맥 특정 값고정 길이 의사난수 값예

PRNG와 PRF는 동일한 알고리즘을 사용할 수 있으며, 출력 길이만 다르다.

PRNG 요구사항​

무작위성 (NIST SP 800-22):

  • 균일성: 0과 1의 출현 확률이 각각 1/21/2
  • 확장성: 부분 수열도 무작위성 테스트 통과
  • 일관성: 다양한 시드에서 일관된 결과

예측 불가능성:

  • 순방향: 이전 비트로 다음 비트 예측 불가
  • 역방향: 생성된 값으로 시드 추론 불가

시드: TRNG로 생성하는 것이 권장됨 (SP 800-90A)


8.2 의사난수 생성기​

선형 합동 생성기 (Linear Congruential Generator)​

Xn+1=(aXn+c) mod mX_{n+1} = (aX_n + c) \bmod m

파라미터설명
mm모듈러스 (m>0m > 0)
aa승수 (0<a<m0 < a < m)
cc증분 (0≤c<m0 \leq c < m)
X0X_0시드 (0≤X0<m0 \leq X_0 < m)

권장 설정: m=231−1m = 2^{31} - 1 (소수), a=75=16807a = 7^5 = 16807, c=0c = 0

취약점: 파라미터를 알면 X0,X1,X2,X3X_0, X_1, X_2, X_3으로 a,c,ma, c, m을 역산 가능 → 암호학적으로 안전하지 않음

BBS (Blum Blum Shub) 생성기​

암호학적으로 안전한 PRNG(CSPRBG)이다.

알고리즘:

  1. p≡q≡3(mod4)p \equiv q \equiv 3 \pmod{4}인 두 큰 소수 선택
  2. n=p×qn = p \times q
  3. gcd⁡(s,n)=1\gcd(s, n) = 1인 시드 ss 선택

X0=s2 mod nX_0 = s^2 \bmod n Xi=Xi−12 mod nX_i = X_{i-1}^2 \bmod n Bi=Xi mod 2(최하위 비트 추출)B_i = X_i \bmod 2 \quad \text{(최하위 비트 추출)}

보안: nn의 소인수분해 난이도에 기반. next-bit test를 통과하는 것이 증명됨.


8.3 블록 암호 기반 PRNG​

CTR 모드 PRNG​

while (len(temp) < 요청 비트 수):
V = (V + 1) mod 2^128
output_block = E(Key, V)
temp = temp || output_block

OFB 모드 PRNG​

while (len(temp) < 요청 비트 수):
V = E(Key, V)
temp = temp || V

ANSI X9.17 PRNG​

3중 DES(EDE)를 사용하는 강력한 PRNG이다.

Ri=EDE([K1,K2],  Vi⊕EDE([K1,K2],  DTi))R_i = \text{EDE}([K_1, K_2],\; V_i \oplus \text{EDE}([K_1, K_2],\; DT_i)) Vi+1=EDE([K1,K2],  Ri⊕EDE([K1,K2],  DTi))V_{i+1} = \text{EDE}([K_1, K_2],\; R_i \oplus \text{EDE}([K_1, K_2],\; DT_i))

  • DTiDT_i: 현재 날짜/시간 값
  • ViV_i: 시드 값
  • RiR_i: 의사난수 출력

NIST CTR_DRBG​

SP 800-90A에서 정의한 카운터 모드 기반 DRBG이다. Intel DRNG에서 사용된다.

파라미터3DESAES-128AES-192AES-256
outlen64128128128
keylen168128192256
seedlen232256320384
reseed_interval≤232\leq 2^{32}≤248\leq 2^{48}≤248\leq 2^{48}≤248\leq 2^{48}

동작 단계:

  1. 초기화: 엔트로피 소스에서 seedlen 비트를 받아 Key와 V 생성
  2. 생성: CTR 모드로 의사난수 블록 생성
  3. 갱신: reseed_interval에 도달하면 새 엔트로피로 Key와 V 재생성

8.4 스트림 암호​

구조​

키를 PRNG에 입력하여 **키스트림(keystream)**을 생성하고, 평문과 바이트 단위로 XOR한다.

C=P⊕kP=C⊕kC = P \oplus k \qquad P = C \oplus k

  • One-Time Pad와 유사하나 진난수 대신 의사난수 사용
  • 동일 키로 두 메시지를 암호화하면 C1⊕C2=P1⊕P2C_1 \oplus C_2 = P_1 \oplus P_2로 평문 노출 위험

설계 고려사항​

  1. 긴 주기: 키스트림의 반복 주기가 길어야 함
  2. 통계적 무작위성: 0/1 균등 분포, 256개 바이트 값 균등 출현
  3. 충분한 키 길이: 128비트 이상 권장

블록 암호 vs 스트림 암호​

특성스트림 암호블록 암호
속도일반적으로 빠름AES HW 가속 시 빠름
코드 크기작음상대적으로 큼
키 재사용위험가능
적합한 응용데이터 스트림, 통신 채널파일 전송, 이메일, DB

8.5 RC4​

1987년 Ron Rivest가 설계한 바이트 지향 스트림 암호이다.

S 벡터 초기화​

// 초기화
for i = 0 to 255:
S[i] = i
T[i] = K[i mod keylen]

// 초기 순열
j = 0
for i = 0 to 255:
j = (j + S[i] + T[i]) mod 256
Swap(S[i], S[j])

스트림 생성​

i, j = 0
while (true):
i = (i + 1) mod 256
j = (j + S[i]) mod 256
Swap(S[i], S[j])
t = (S[i] + S[j]) mod 256
k = S[t] // 키스트림 바이트

특징​

항목내용
키 길이1256바이트 (82048비트)
상태256바이트 순열 배열 S
주기>10100> 10^{100}
속도출력 바이트당 8~16 기계어 연산

RC4의 보안​

  • WEP 프로토콜에서의 취약점은 RC4 자체가 아닌 키 생성 방식의 문제
  • [ALFA13]의 키스트림 편향(bias) 공격으로 반복 암호화된 평문 복구 가능
  • IETF RFC 7465: TLS에서 RC4 사용 금지
  • NIST SP 800-52: 정부 용도 RC4 사용 금지

8.6 진난수 생성기 (TRNG)​

엔트로피 소스​

비결정론적 물리 현상을 이용하여 난수를 생성한다.

소스예시
전자적 잡음열 잡음, 결합 인버터 회로
음향/영상 입력마이크 잡음, 렌즈 캡 씌운 카메라
디스크 드라이브공기 난류에 의한 회전 속도 변동
사용자 입력키 입력 타이밍, 마우스 움직임

PRNG vs TRNG 비교​

특성PRNGTRNG
효율성높음낮음
결정론결정론적비결정론적
주기성주기적 (매우 긴 주기)비주기적

컨디셔닝 (Conditioning)​

TRNG 출력의 편향(bias)을 제거하고 엔트로피를 극대화하는 처리이다.

방법설명
해시 함수mm비트 입력을 nn비트 해시로 변환 (m≥nm \geq n)
블록 암호AES 등으로 입력 비트를 스크램블

건강 테스트 (Health Testing)​

SP 800-90B에서 권장하는 엔트로피 소스 모니터링 테스트이다.

반복 계수 테스트 (Repetition Count Test):

  • 동일 값이 연속 CC번 이상 나타나면 오류 보고
  • C=⌈1+−log⁡(W)H⌉C = \lceil 1 + \frac{-\log(W)}{H} \rceil, WW: 허용 오탐 확률, HH: 최소 엔트로피

적응 비율 테스트 (Adaptive Proportion Test):

  • NN개 연속 샘플에서 특정 값의 빈도가 CC회 이상이면 오류 보고

Intel DRNG​

Intel 프로세서 칩에 내장된 하드웨어 난수 생성기이다.

단계구성출력
엔트로피 소스결합 인버터 쌍 + 열 잡음512비트 단위, 4Gbps
컨디셔너AES CBC-MAC (CMAC)256비트, 편향 제거
DRBGAES CTR_DRBG128비트 단위, 시드당 최대 511블록

명령어:

  • RDRAND: DRBG 출력에서 16/32/64비트 의사난수 획득
  • RDSEED: 컨디셔너 출력에서 하드웨어 생성 시드 획득

주요 용어​

한국어영어설명
의사난수 생성기PRNG시드 기반 결정론적 난수 생성
의사난수 함수PRF고정 길이 의사난수 출력
진난수 생성기TRNG물리적 엔트로피 기반 난수 생성
시드SeedPRNG 초기 입력값
키스트림Keystream스트림 암호의 의사난수 출력
선형 합동 생성기Linear Congruential GeneratorXn+1=(aXn+c) mod mX_{n+1} = (aX_n + c) \bmod m
BBS 생성기Blum Blum Shub소인수분해 난이도 기반 CSPRBG
CTR_DRBGCTR_DRBGCTR 모드 기반 NIST 표준 DRBG
스트림 암호Stream Cipher키스트림과 XOR로 암호화
RC4RC4바이트 지향 순열 기반 스트림 암호
엔트로피 소스Entropy Source물리적 무작위성 제공 장치
컨디셔닝Conditioning편향 제거 및 엔트로피 극대화 처리
편향Skew/Bias0과 1의 불균등 분포