본문으로 건너뛰기

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

난수 비트 스트림은 키 생성, 암호화, 논스 등 다양한 보안 응용에서 필수적이다. 이 장에서는 의사난수 생성기(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)modmX_{n+1} = (aX_n + c) \bmod m

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

권장 설정: m=2311m = 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. pq3(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=s2modnX_0 = s^2 \bmod n Xi=Xi12modnX_i = X_{i-1}^2 \bmod n Bi=Ximod2(최하위 비트 추출)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],  ViEDE([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],  RiEDE([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_interval232\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=PkP=CkC = P \oplus k \qquad P = C \oplus k

  • One-Time Pad와 유사하나 진난수 대신 의사난수 사용
  • 동일 키로 두 메시지를 암호화하면 C1C2=P1P2C_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비트 해시로 변환 (mnm \geq n)
블록 암호AES 등으로 입력 비트를 스크램블

건강 테스트 (Health Testing)

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

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

  • 동일 값이 연속 CC번 이상 나타나면 오류 보고
  • C=1+log(W)HC = \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)modmX_{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의 불균등 분포